xref: /aosp_15_r20/external/v4l2_codec2/v4l2/V4L2ComponentCommon.cpp (revision 0ec5a0ec62797f775085659156625e7f1bdb369f)
1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 //#define LOG_NDEBUG 0
6 #define LOG_TAG "V4L2ComponentCommon"
7 
8 #include <v4l2_codec2/v4l2/V4L2ComponentCommon.h>
9 
10 #include <log/log.h>
11 #include <set>
12 
13 namespace android {
14 
15 const std::string V4L2ComponentName::kH264Encoder = "c2.v4l2.avc.encoder";
16 const std::string V4L2ComponentName::kVP8Encoder = "c2.v4l2.vp8.encoder";
17 const std::string V4L2ComponentName::kVP9Encoder = "c2.v4l2.vp9.encoder";
18 
19 const std::string V4L2ComponentName::kH264Decoder = "c2.v4l2.avc.decoder";
20 const std::string V4L2ComponentName::kVP8Decoder = "c2.v4l2.vp8.decoder";
21 const std::string V4L2ComponentName::kVP9Decoder = "c2.v4l2.vp9.decoder";
22 const std::string V4L2ComponentName::kHEVCDecoder = "c2.v4l2.hevc.decoder";
23 const std::string V4L2ComponentName::kH264SecureDecoder = "c2.v4l2.avc.decoder.secure";
24 const std::string V4L2ComponentName::kVP8SecureDecoder = "c2.v4l2.vp8.decoder.secure";
25 const std::string V4L2ComponentName::kVP9SecureDecoder = "c2.v4l2.vp9.decoder.secure";
26 const std::string V4L2ComponentName::kHEVCSecureDecoder = "c2.v4l2.hevc.decoder.secure";
27 
28 // static
isValid(const std::string & name)29 bool V4L2ComponentName::isValid(const std::string& name) {
30     return name == kH264Encoder || name == kVP8Encoder || name == kVP9Encoder ||
31            name == kH264Decoder || name == kVP8Decoder || name == kVP9Decoder ||
32            name == kHEVCDecoder || name == kH264SecureDecoder || name == kVP8SecureDecoder ||
33            name == kVP9SecureDecoder || name == kHEVCSecureDecoder;
34 }
35 
36 // static
isEncoder(const std::string & name)37 bool V4L2ComponentName::isEncoder(const std::string& name) {
38     ALOG_ASSERT(isValid(name));
39 
40     return name == kH264Encoder || name == kVP8Encoder || name == kVP9Encoder;
41 }
42 
43 // static
isDecoder(const std::string & name)44 bool V4L2ComponentName::isDecoder(const std::string& name) {
45     ALOG_ASSERT(isValid(name));
46     static const std::set<std::string> kValidDecoders = {
47             kH264Decoder, kH264SecureDecoder, kVP8Decoder,  kVP8SecureDecoder,
48             kVP9Decoder,  kVP9SecureDecoder,  kHEVCDecoder, kHEVCSecureDecoder,
49     };
50 
51     return kValidDecoders.find(name) != kValidDecoders.end();
52 }
53 
54 // static
getCodec(const std::string & name)55 std::optional<VideoCodec> V4L2ComponentName::getCodec(const std::string& name) {
56     ALOG_ASSERT(isValid(name));
57     static const std::map<std::string, VideoCodec> kNameToCodecs = {
58             {kH264Decoder, VideoCodec::H264}, {kH264SecureDecoder, VideoCodec::H264},
59             {kH264Encoder, VideoCodec::H264},
60 
61             {kVP8Decoder, VideoCodec::VP8},   {kVP8SecureDecoder, VideoCodec::VP8},
62             {kVP8Encoder, VideoCodec::VP8},
63 
64             {kVP9Decoder, VideoCodec::VP9},   {kVP9SecureDecoder, VideoCodec::VP9},
65             {kVP9Encoder, VideoCodec::VP9},
66 
67             {kHEVCDecoder, VideoCodec::HEVC}, {kHEVCSecureDecoder, VideoCodec::HEVC},
68     };
69 
70     auto iter = kNameToCodecs.find(name);
71     if (iter == kNameToCodecs.end()) {
72         return std::nullopt;
73     }
74     return iter->second;
75 }
76 
77 }  // namespace android
78