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