blob: 0e70b29080e509c7a578fcde7605574a759d80ed [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//#define LOG_NDEBUG 0
#define LOG_TAG "V4L2ComponentCommon"
#include <v4l2_codec2/common/V4L2ComponentCommon.h>
#include <log/log.h>
#include <set>
namespace android {
const std::string V4L2ComponentName::kH264Encoder = "c2.v4l2.avc.encoder";
const std::string V4L2ComponentName::kVP8Encoder = "c2.v4l2.vp8.encoder";
const std::string V4L2ComponentName::kVP9Encoder = "c2.v4l2.vp9.encoder";
const std::string V4L2ComponentName::kH264Decoder = "c2.v4l2.avc.decoder";
const std::string V4L2ComponentName::kVP8Decoder = "c2.v4l2.vp8.decoder";
const std::string V4L2ComponentName::kVP9Decoder = "c2.v4l2.vp9.decoder";
const std::string V4L2ComponentName::kHEVCDecoder = "c2.v4l2.hevc.decoder";
const std::string V4L2ComponentName::kH264SecureDecoder = "c2.v4l2.avc.decoder.secure";
const std::string V4L2ComponentName::kVP8SecureDecoder = "c2.v4l2.vp8.decoder.secure";
const std::string V4L2ComponentName::kVP9SecureDecoder = "c2.v4l2.vp9.decoder.secure";
const std::string V4L2ComponentName::kHEVCSecureDecoder = "c2.v4l2.hevc.decoder.secure";
// static
bool V4L2ComponentName::isValid(const char* name) {
return name == kH264Encoder || name == kVP8Encoder || name == kVP9Encoder ||
name == kH264Decoder || name == kVP8Decoder || name == kVP9Decoder ||
name == kHEVCDecoder || name == kH264SecureDecoder || name == kVP8SecureDecoder ||
name == kVP9SecureDecoder || name == kHEVCSecureDecoder;
}
// static
bool V4L2ComponentName::isEncoder(const char* name) {
ALOG_ASSERT(isValid(name));
return name == kH264Encoder || name == kVP8Encoder || name == kVP9Encoder;
}
// static
bool V4L2ComponentName::isDecoder(const std::string& name) {
ALOG_ASSERT(isValid(name));
static const std::set<std::string> kValidDecoders = {
kH264Decoder, kH264SecureDecoder, kVP8Decoder, kVP8SecureDecoder,
kVP9Decoder, kVP9SecureDecoder, kHEVCDecoder, kHEVCSecureDecoder,
};
return kValidDecoders.find(name) != kValidDecoders.end();
}
// static
std::optional<VideoCodec> V4L2ComponentName::getCodec(const std::string& name) {
ALOG_ASSERT(isValid(name));
static const std::map<std::string, VideoCodec> kNameToCodecs = {
{kH264Decoder, VideoCodec::H264}, {kH264SecureDecoder, VideoCodec::H264},
{kH264Encoder, VideoCodec::H264},
{kVP8Decoder, VideoCodec::VP8}, {kVP8SecureDecoder, VideoCodec::VP8},
{kVP8Encoder, VideoCodec::VP8},
{kVP9Decoder, VideoCodec::VP9}, {kVP9SecureDecoder, VideoCodec::VP9},
{kVP9Encoder, VideoCodec::VP9},
{kHEVCDecoder, VideoCodec::HEVC}, {kHEVCSecureDecoder, VideoCodec::HEVC},
};
auto iter = kNameToCodecs.find(name);
if (iter == kNameToCodecs.end()) {
return std::nullopt;
}
return iter->second;
}
} // namespace android