首页 > 其他分享 >Android Codec2 CCodec (二九)C2SoftHevcDec - Ⅰ

Android Codec2 CCodec (二九)C2SoftHevcDec - Ⅰ

时间:2024-12-07 17:29:36浏览次数:7  
标签:withConstValue BaseParams DefineParam C2SoftHevcDec build 组件 C2 Android 二九

在上一篇文章中,我们了解了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

相关文章

  • Android 屏幕采集并编码为H.264
    前言我们前面基于摄像机的图像采集以及编解码已经完成了,那么接下来计划后面的三篇博文分别实现Android屏幕采集实现并进行H.264编解码、MIC音频采集并编码为AAC以及AAC解码播放,希冀可以通过这六篇博文能够对Android上面的音视频编解码有一个初步的学习和了解,由于博主也是近......
  • Android——Click事件实现方式
    Android观察者模式(ObserverDesignPattern):在对象之间定义⼀个⼀对多的依赖,当⼀个对象状态改变的时候,所有依赖的对象都会得到通知并⾃动更新。说⼈话:也叫发布订阅模式,能够很好的解耦一个对象改变,⾃动改变另⼀个对象这种情况。①、Subject被观察者定义被观察者必......
  • Android 移动应用开发---乡村民宿(2)Banner 轮播图,并实现跳转对应界面
    一,添加插件1,去东软职业技能在线下载插件2,找到需要的插件,并导入到libs里,只需要在build.gradle里面刷新一下就行了刷新就是把第三个步骤先注释点击syncNow,再取消注释再点一下syncNow这样就刷新成功了,我们就可以正常使用Banner插件了一般常用的插件有这些如果没有步骤三的......
  • Android 流畅度评估及卡顿定位、优化
    原文见:在路上的博客:Android流畅度评估及卡顿优化导言:本文主要是关于Android流畅度和卡顿优化的全方位介绍,算是对2020部分工作的总结。全文主要包括:1、渲染原理和流畅概念2、卡顿的标准3、卡顿评估和判断4、卡顿定位工具和高效定位方法5、卡顿优化建议1、渲染和流......
  • 将 C++程序移植到 Android 平台
    将C++程序移植到Android平台 将C++程序移植到Android平台需要多个步骤,涉及AndroidNDK(NativeDevelopmentKit)和AndroidStudio。下面是详细的步骤指导:1.环境准备安装AndroidStudio:确保你的开发环境中安装了AndroidStudio,这是开发Android应用的主流IDE。......
  • Android studio出现uplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt foun
    Android编译KotlinSDK依赖包类重复冲突问题1、问题问题:gradle同步可以成功,但是编译运行时,出现以下异常。2、分析取以上内容中的一条进行分析可以看到在模块org.jetbrains.kotlin:kotlin-stdlib:1.8.20和org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21中存在重复的......
  • android手机能同时播放两个video音频吗?
    一般来说,Android手机不能同时播放两个视频的音频。Android系统的音频焦点机制通常只允许一个应用同时控制音频输出。如果第二个视频开始播放,第一个视频的音频通常会被暂停。然而,有一些方法可以实现类似的效果,但都需要一些额外的技巧或限制:混合音频:前端可以使用WebAudio......
  • Android基础登录功能实现(手把手,保姆级)
    目录前言Android环境创建项目认识项目登录功能的XML(activity_main.xml):Java实现具体的功能:首先,我们需要先把Java文件和xml文件中的控件关联起来。1.认识初始文件:2.了解Java文件和xml文件的关联后,我们怎么找到控件的关联呢?这就需要请到findViewById()这个方法和xml文件中......
  • android更新系统时间的命令
    更新日期和时间可以使用date命令来设置时间和日期。以下是命令格式:bashCopyCodeadbshelldateMMDDhhmm[[CC]YY][.ss]MM 是月份(两位数)DD 是日期(两位数)hh 是小时(两位数)mm 是分钟(两位数)CC 是世纪(两位数,通常不需要)YY 是年份(两位数).ss 是秒数(两位数,可选)例如,......
  • Android基础的ListView适配器SimpleAdapter的使用方法,附带可修改模板
            本代码使用的Android版本:android-studio-2024.2.1.11-windows目录一、适配器的五个主要参数二、效果图:三、功能实现的代码(模板):    1.Store主页面:2.item_commodity模板界面:四、结语        本文章还有使用自定义适配器来实现该功能......