当前位置: 首页 > article >正文

OpenHarmony 5.0版本视频硬件编解码适配

一、简介

Codec HDI(Hardware Device Interface)对上层媒体服务提供视频编解码的驱动能力接口,主要功能有获取组件编解码能力,创建、销毁编解码器对象,启停编解码器操作,编解码处理等。
Codec HDI 2.0接口依赖OpenMax IL的标准接口,Codec HDI通过调用封装好的libOMX_Core.z.so获取支持的编解码器组件并创建组件运行。
本文主要介绍OpenHarmony 5.x版本视频硬件编解码Codec HDI的适配方法。
注:5.x版本的AVPlayer播放器histreamer引擎调用的视频硬件编解码框架和AVCodec视频硬件编解码框架都会调用到av_codec_service系统服务,通过IPC与Codec HDI通信。

二、适配流程

配置codec_host 服务

vendor/{company}/{product}/hdf_config/uhdf/device_info.hcs 文件配置codec_host服务
以rk3568为例,配置如下文件:vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs

codec :: host {hostName = "codec_host";priority = 50;gid = ["codec_host", "uhdf_driver", "vendor_mpp_driver"];codec_omx_idl_device :: device {device0 :: deviceNode {policy = 2;priority = 100;moduleName = "libcodec_driver.z.so";serviceName = "codec_component_manager_service";deviceMatchAttr = "media_codec_capabilities";}}...
}

codec_component_manager_service 服务被视频硬件编解码服务调用,重点是这个服务的配置。

配置codec_capabilities hcs文件

添加 vendor/{company}/{product}/hdf_config/uhdf/media_codec/media_codec_capabilities.hcs文件,该文件主要描述芯片支持的硬件编解码组件的能力集。
根据codec_component_manager_service 服务配置的deviceMatchAttr,media_codec_capabilities.hcs文件的match_attr字段为media_codec_capabilities。
以rk3568为例,添加 vendor/hihope/rk3568/hdf_config/uhdf/media_codec/media_codec_capabilities.hcs 文件

root {module = "master";codec_config {match_attr = "media_codec_capabilities";use_openmax = true;// capsMask: 0x01, Adaptive playback; 0x02, Secure playback; 0x04, Tunnel playback.// allocateMask: 0x01, Input buffer allocated within the Codec module;// allocateMask: 0x02, Input buffer allocated by an external user;// allocateMask: 0x04, Output buffer allocated within the Codec module;// allocateMask: 0x08, Output buffer allocated by an external user.VideoHwEncoders {/* node name explanation -- HDF_video_hw_enc_avc_rk:****    HDF____________video_________hw___________________enc_________avc____rk**       |                                |                       |                                          |                       |            |** HDF or OMX    video or audio    hardware or software      encoder or decoder    mime    vendor*/HDF_video_hw_enc_avc_rk {role = 1;type = 1;name = "OMX.rk.video_encoder.avc";supportProfiles = [1, 32768, 2, 32768, 8, 32768];maxInst = 4;isSoftwareCodec = false;processModeMask = [];capsMask = [0x01];minBitRate = 1;maxBitRate = 40000000;minWidth = 144;minHeight = 144;maxWidth = 4096;maxHeight = 4096;widthAlignment = 2;heightAlignment = 2;minBlockCount = 99;maxBlockCount = 8160;minBlocksPerSecond = 99;maxBlocksPerSecond = 489600;blockSizeWidth = 16;blockSizeHeight = 16;supportPixelFmts = [28, 24, 20, 12];measuredFrameRate = [320, 240, 165, 165, 720, 480, 149, 149, 1280, 720, 73, 73, 1920, 1080, 18, 18];bitRateMode = [1, 2];minFrameRate = 1;maxFrameRate = 60;canSwapWidthHeight = true;}...}VideoHwDecoders {HDF_video_hw_dec_avc_rk {role = 1;type = 0;name = "OMX.rk.video_decoder.avc";supportProfiles = [1, 32768, 2, 32768, 8, 32768];maxInst = 6;isSoftwareCodec = false;processModeMask = [];capsMask = [0x01];minBitRate = 1;maxBitRate = 10000000;minWidth = 144;minHeight = 144;maxWidth = 4096;maxHeight = 4096;widthAlignment = 2;heightAlignment = 2;minBlockCount = 99;maxBlockCount = 34560;minBlocksPerSecond = 99;maxBlocksPerSecond = 2073600;blockSizeWidth = 16;blockSizeHeight = 16;supportPixelFmts = [24, 12, 20];measuredFrameRate = [320, 240, 617, 617, 720, 480, 559, 559, 1280, 720, 276, 276, 1920, 1080, 164, 164, 3840, 2160, 30, 30];bitRateMode = [];minFrameRate = 1;maxFrameRate = 60;canSwapWidthHeight = true;}...}}
}

该文件需根据实际芯片能力配置,name组件名根据OMX组件层的定义配置,其他参数尽量按实际配置,否则系统服务层可能因检验参数失败导致编解码异常。

编解码能力配置文件添加编译

vendor/{company}/{product}/hdf_config/uhdf//hdf.hcs 引入media_codec_capabilities.hcs

以rk3568为例,vendor/hihope/rk3568/hdf_config/uhdf/hdf.hcs 添加

+     #include "media_codec/media_codec_capabilities.hcs"

OMX Wrapper的封装

封装实现libOMX_Core.z.so,供Codec HDI通过dlopen调用。
不同厂商OMX组件层的实现是不同的,这里不再详细赘述。

三、适配验证

适配完成后可以通过应用调用AVPlayer播放码流验证。
开机后首次播放视频或kill av_codec_service进程后首次播放视频时,如果可以获取到可用的编解码组件会有如下打印:

I C02b32/HCODEC: [GetManager xxx] need to get ICodecComponentManager
I C02b32/HCODEC: [GetCapList xxx] GetComponentCapabilityList return xxx components
I C02b32/HCODEC: [HdiCapToUserCap xxx] ----- codecName: xxx.encoder.avc -----
I C02b32/HCODEC: [HdiCapToUserCap xxx] codecType: 0, mimeType: video/avc, maxInstance x
...
I C02b32/HCODEC: [HdiCapToUserCap xxx] ----- codecName: xxx.decoder.avc -----
I C02b32/HCODEC: [HdiCapToUserCap xxx] codecType: 1, mimeType: video/avc, maxInstance x

硬件解码组件创建成功,正常解码播放会有如下打印:

I C02b32/HCODEC: [0][dec.avc][Uninitialized][OnAllocateComponent xxx] create omx node xxx.decoder.avc succ
I C02b32/HCODEC: [ChangeStateTo xxx] Uninitialized -> Initialized
I C02b32/HCODEC: [ChangeStateTo xxx] Starting -> Running

相关文章:

OpenHarmony 5.0版本视频硬件编解码适配

一、简介 Codec HDI(Hardware Device Interface)对上层媒体服务提供视频编解码的驱动能力接口,主要功能有获取组件编解码能力,创建、销毁编解码器对象,启停编解码器操作,编解码处理等。 Codec HDI 2.0接口…...

deepseek热度已过?

DeepSeek的热度并没有消退,以下是具体表现: 用户使用量和下载量方面 • 日活跃用户量增长:DeepSeek已经成为目前最快突破3000万日活跃用户量的应用程序。 • 应用商店下载量:1月26日,DeepSeek最新推出的AI聊天机器人…...

分治-归并系列一>翻转对

目录 题目:解析:策略一: 代码:策略二: 代码: 题目: 链接: link 这题和逆序对区别点就是,要找到前一个元素是后一个元素的2倍 先找到目标值再,继续堆排序 解析&#xff1…...

FFMPEG大文件视频分割传输教程,微信不支持1G文件以上

如下是一个2.77g的文件分割教程 . 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑,是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FF…...

从数据海洋中“淘金”——数据挖掘的魔法与实践

从数据海洋中“淘金”——数据挖掘的魔法与实践 在这个数据飞速膨胀的时代,每天产生的数据量可以用“天文数字”来形容。如果将数据比作金矿,那么数据挖掘(Data Mining)就是在数据的海洋中挖掘黄金的技术。作为一门结合统计学、机…...

elestio memos SSRF漏洞复现(CVE-2025-22952)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前言…...

MySQL5.7数据库部署和安装

1. 准备系统环境 Vmawre安装CentOS7 略… 2. 下载MySQL5.7安装包 下载地址: https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 3. 卸载系统自带的MariaDB sudo yum remove $(rpm -qa | grep mariadb)4. 解压安…...

力扣第272场周赛

周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 这场周赛是在课堂上模拟的, 总体来说比较简单, 但不幸被老师压力了。以下分享一下我的解题思路 如果你每天没有时间刷题的话, 可以看一下我写的东西, 我尽量讲解的通俗一些, 不会…...

Java学习手册:JVM、JRE和JDK的关系

在Java生态系统中,JVM(Java虚拟机)、JRE(Java运行时环境)和JDK(Java开发工具包)是三个核心概念。它们共同构成了Java语言运行和开发的基础。理解它们之间的关系对于Java开发者来说至关重要。本文…...

C++中作用域(public,private,protected

在C中,public、private 和 protected 是用于控制类成员(变量和函数)访问权限的关键字。它们决定了类成员在代码中的可见性和可访问性。在学习时候,对于public是最容易理解的,对于private也好理解,但是对于p…...

如何用 esProc 实现 Oracle 和 MySQL 的混合运算

逻辑数仓可以实现多源混算,但需要配置视图、预处理数据,结构太沉重。duckdb 是轻量级的方案,但没有内置 Oracle 的 connector,自己开发难度又太高。同为轻量级方案,esProc 支持 JDBC 公共接口,可以实现任何…...

题目 2701: 蓝桥杯2022年第十三届决赛真题-取模(C/C++/Java组)

题目 2701: 蓝桥杯2022年第十三届决赛真题-取模&#xff08;C/C/Java组&#xff09; 时间限制: 3s 内存限制: 512MB 提交: 6633 解决: 1263 题目描述 给定 n, m &#xff0c;问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x n mod y 。 输入格式 输入包含多…...

FreeRTOS 中 SVC与SysTick以及PendSV 优先级配置

在FreeRTOS中,针对ARM Cortex-M架构,SVC、SysTick和PendSV的优先级配置需遵循以下原则以确保系统高效运行: 优先级配置详解 优先级规则 数值越低,优先级越高(Cortex-M默认设定)。硬件中断(如DMA、UART)通常配置为最高优先级(数值0~4),确保实时性。系统异常(SVC、S…...

Linux 第二讲 --- 基础指令(二)

前言 这是基础指令的第二部分&#xff0c;但是该部分的讲解会大量使用到基础指令&#xff08;一&#xff09;的内容&#xff0c;为了大家的观感&#xff0c;如果对Linux的一些基本指令不了解的话&#xff0c;可以先看基础指令&#xff08;一&#xff09;&#xff0c;同样的本文…...

Python中的数值运算函数及math库详解

文章目录 Python中的数值运算函数及math库详解一、内置数值运算函数1. 基本数值运算函数2. 类型转换函数3. 进制转换函数 二、math库中的数学常数三、math库常用数学函数1. 数论与表示函数2. 幂函数与对数函数3. 三角函数4. 角度转换5. 双曲函数6. 特殊函数 四、实际应用示例1.…...

P8627 [蓝桥杯 2015 省 A] 饮料换购

题目描述 思路 一是可以多枚举几个数&#xff0c;找找规律 二可以模拟 代码 #include<bits/stdc.h> #define int long long using namespace std;const int N 2e510;int a[N]; int b[N]; //前缀和 signed main() {int n;cin >> n; //表示初始的饮料盖int ans …...

《Vue Router实战教程》12.不同的历史记录模式

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 不同的历史记录模式 在创建路由器实例时&#xff0c;history 配置允许我们在不同的历史模式中进行选择。 Hash 模式 hash 模式是用 createWebHashHistory() 创建的&#xff1a; import { createRouter,…...

第十五届蓝桥杯大赛软件赛省赛Python 大学 B 组试做(下)【本期题单: 缴纳过路费, 纯职业小组】

本期题单&#xff1a;缴纳过路费&#xff0c;纯职业小队 文章目录 缴纳过路费题目思路分析代码 纯职业小组题目思路分析 感谢大伙观看&#xff0c;别忘了三连支持一下大家也可以关注一下我的其它专栏&#xff0c;同样精彩喔~下期见咯~ 缴纳过路费 题目 题目链接&#xff1a;缴…...

数字政府网络架构建设方案

数字政府网络架构建设方案 一、引言 随着信息技术的快速发展&#xff0c;数字政府建设已成为提升政府治理能力和服务水平的关键。网络架构作为数字政府的核心基础设施&#xff0c;对于保障数据安全、提高服务效率、促进信息共享具有重要意义。本方案旨在为数字政府网络架构建…...

Dynamics 365 Business Central AL Code 公司间物料同步的Code参考

#BC ERP# #D365 ERP# #Navision# 前言 在BC实施过程中&#xff0c;经常会碰到客户有多个公司&#xff0c;但物料是相同的。因为都在BC平台&#xff0c;用Power Automate方案也是可行&#xff0c;但往往用AL Code实现更容易。 CodeUnit 实现Sync item to Other company codeu…...

vue+uniapp 获取上一页直接传递的参数

在小程序里页面之间跳转有时候需要传递参数给下个页面用 const toDetail item > { uni.navigateTo({ url: /pagesFood/stu/FoodSelection?groupCode1&merchCode2, }); }; 那么下个页面就要获取到这些参数&#xff0c;在实际开发中&#xff…...

[UEC++]UE5C++各类变量相关知识及其API(更新中)

基础变量 UE自己定义的目的&#xff1a;1.跨平台&#xff1b;2.兼容反射&#xff1b;3.方便宏替换 FString 基础赋值与初始化 遍历与内存 迭代器访问 清除系列操作 合并 插入与移除 RemoveFromStart是从开头看&#xff0c;没有则移除失败返回false&#xff1b; RemoveFromEnd是…...

RK3588 android12 适配 ilitek i2c接口TP

一&#xff0c;Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器&#xff0c;如 ILI6480、ILI9341 等&#xff0c;采用 I2C 接口。 这些控制器能够支持多点触控&#xff0c;并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&a…...

安装vllm

ubuntu 22.04, RTX3080, cuda 12.1, cudnn 8.9.7&#xff0c;cuda和cudnn的安装参考&#xff1a;https://blog.csdn.net/m0_52111823/article/details/147154526?spm1001.2014.3001.5501。 查看版本对应关系&#xff0c;下载12.1对应的whl包&#xff0c;https://github.com/vl…...

利用安固软件实现电脑屏幕录像:四种实用方法分享

在日常工作中&#xff0c;有时我们需要录制电脑屏幕以进行教学演示、软件操作记录或重要会议的存档。安固软件终端安全管理系统提供了强大的屏幕录像功能&#xff0c;可以满足这些需求。 接下来&#xff0c;本文将介绍如何使用安固软件设置电脑实时画面录像&#xff0c;并分享…...

[Effective C++]条款30:透彻了解inlining的里里外外

. 1、内联函数 inline内联函数的设计是为了消除函数调用的开销&#xff0c;在编译期间由编译器将函数体插入到每个调用点&#xff0c;来避免常规函数调用时的压栈、跳转和返回等操作&#xff0c;减少函数调用的时间开销。 1.1、内联函数作用 减少函数调用开销&#xff1a; 消…...

CExercise_10_2动态内存分配_1从键盘输入输入中读取一个整数n,动态分配一个长度为n的整型数组。

题目&#xff1a; 编写程序&#xff0c;从键盘输入输入中读取一个整数n&#xff0c;动态分配一个长度为n的整型数组。 将数组元素初始化为1, 2, 3, …, n&#xff0c;并输出打印数组内容&#xff0c;最后释放内存。 注意: 初始化内存块时可以直接使用下标来操作内存块。 遍历打…...

这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件

这种情况是应为VScode的版本太新了&#xff0c;更新到1.86版本后要求远程连接服务器的内核版本不符合条件 解决方法 vscode降级&#xff0c;使用1.86以前的版本。亲测这种方法成功解决 首先关闭VSCode自动更新 Windows下载1.85版本链接&#xff1a;https://update.code.visua…...

文件IO7(中文字库的原理与应用/目录检索原理与应用/并发编程的原理与应用)

中文字库的原理与应用 ⦁ 基本概念 一般在项目中都会显示汉字&#xff0c;都采用中文简体字符集&#xff0c;计算机早期只有ANSI组织设计的ANSII码&#xff0c;其实也属于字符集&#xff0c;这套字符集并未收录中文&#xff0c;只收录256个字符。 所以后期中国国家标准总局设…...

基于SpringBoot的智慧社区管理系统(源码+数据库)

499基于SpringBoot的智慧社区管理系统&#xff0c;系统包含三种角色&#xff1a;管理员、用户主要功能如下。 【用户功能】 1. 首页&#xff1a;查看系统。 2. 超市商品&#xff1a;浏览超市中各类商品信息。 3. 动物信息&#xff1a;了解社区内的动物种类和相关信息。 4. 车位…...