在上一篇文章中,我们了解了SimpleC2Component提供的接口的含义。这一节,我们将以C2SoftHevcDec为例,探讨Codec2组件的参数应该如何定义。
1、BaseParams
C2SoftHevcDec::IntfImpl定义了组件支持的默认参数,它继承自SimpleInterface<void>::BaseParams,所以我们先了解BaseParams。
class C2SoftHevcDec::IntfImpl : public SimpleInterface<void>::BaseParams {
}
BaseParams定义了Codec2组件可能用到的参数,同时提供了一些为常用参数设定默认值的便捷方法。BaseParams的构造函数声明如下:
explicit BaseParams(
const std::shared_ptr<C2ReflectorHelper> &helper,
C2String name,
C2Component::kind_t kind,
C2Component::domain_t domain,
C2String mediaType,
std::vector<C2String> aliases = std::vector<C2String>());
调用构造函数需要传入以下几个参数:
- helper:C2ReflectorHelper对象,该对象是从C2ComponentStore中获取的;
- name:组件名称;
- kind:组件类型,是encoder还是decoder;
- domain:组件域,是video组件还是audio组件;
- mediaType:媒体类型,对于encoder填入输出的数据类型,对于decoder填入输入数据类型;
- aliases:别名,此参数可以为空;
对于每一个组件我们都要为其指定name、kind、domain和mediaType。
虽然BaseParams中定义了许多C2Param,但是不是所有的参数都会被使用。组件所必要的参数会在构造函数中做初始化并添加到C2ReflectorHelper。构造函数的实现如下:
// 1. 初始化ApiFeatures
addParameter(
DefineParam(mApiFeatures, C2_PARAMKEY_API_FEATURES)
.withConstValue(new C2ApiFeaturesSetting(C2Config::api_feature_t(
API_REFLECTION |
API_VALUES |
API_CURRENT_VALUES |
API_DEPENDENCY |
API_SAME_INPUT_BUFFER)))
.build());
// 2. 初始化组件名称
addParameter(
DefineParam(mName, C2_PARAMKEY_COMPONENT_NAME)
.withConstValue(AllocSharedString<C2ComponentNameSetting>(name.c_str()))
.build());
if (aliases.size()) {
C2String joined;
for (const C2String &alias : aliases) {
if (joined.length()) {
joined += ",";
}
joined += alias;
}
// 3. 初始化组件别名
addParameter(
DefineParam(mAliases, C2_PARAMKEY_COMPONENT_ALIASES)
.withConstValue(AllocSharedString<C2ComponentAliasesSetting>(joined.c_str()))
.build());
}
// 4. 初始化Kind
addParameter(
DefineParam(mKind, C2_PARAMKEY_COMPONENT_KIND)
.withConstValue(new C2ComponentKindSetting(kind))
.build());
// 6. 初始化Domain
addParameter(
DefineParam(mDomain, C2_PARAMKEY_COMPONENT_DOMAIN)
.withConstValue(new C2ComponentDomainSetting(domain))
.build());
// 7. 初始化InputStreamCount
addParameter(
DefineParam(mInputStreamCount, C2_PARAMKEY_INPUT_STREAM_COUNT)
.withConstValue(new C2PortStreamCountTuning::input(1))
.build());
// 8. 初始化OutputStreamCount
addParameter(
DefineParam(mOutputStreamCount, C2_PARAMKEY_OUTPUT_STREAM_COUNT)
.withConstValue(new C2PortStreamCountTuning::output(1))
.build());
2、C2SoftHevcDec::IntfImpl
原文阅读:
Android Codec2(二九)C2SoftHevcDec - Ⅰ
扫描下方二维码,关注公众号《青山渺渺》阅读音视频开发内容。
标签:withConstValue,BaseParams,DefineParam,C2SoftHevcDec,build,组件,C2,Android,二九 From: https://blog.csdn.net/qq_41828351/article/details/144301219