HarmonyOS videodecoder解码API和nativewindow api 使用问题

解码模块:解码器创建后注册的回调函数中OH_AVCodecOnNeedInputBuffer和OnNewOutputBuffer 回调index的时机具体是在什么时间?

需要以队列形式储存吗?

OH_AVBuffer_GetAddr函数的解释获取到的是buffer的虚拟地址,是否可以进行数据拷贝?

渲染模块: HarmonyOS系统中使用XComponent控件,sdk层使用XComponent控件创建view,native层需要通过XComponent相关接口获取nativewindow实例吗?

nativewindow中支持传metadata的接口弃用,使用 videodecoder 和 nativewindow 是否可以进行vivid解码播放?还是要进行额外的操作?

ohnativewindow有类似 ANativeWindow_lock、 ANativeWindow_unlockAndPost的接口吗?

gitee上开源ijkplayer使用ffmpeg软解之后使用EGL和nativewindow进行渲染,软解码之后如果不使用EGL的话是否可以渲染?

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

解码模块:https://gitee.com/harmonyos_samples/AVCodecVideo

1、具体实现原理:解码器Start后,解码器每拿到一帧,OnNeedInputBuffer就会被调起一次,avcodec框架会给用户一个OH_AVBuffer。

在输入回调中,用户需手动把帧bufer、index存入输入队列中,并同时输入线程解锁。

在输入线程中,把上一步的帧信息储存为bufferInfo后,pop出队。

在输入线程中,使用上一步的bufferInfo,调用ReadSample接口解封装帧数据。

在输入线程中,使用解封装后的bufferInfo,调用解码的PushInputData接口,此时这片buffer用完,返回框架,实现buffer轮转。

PushInputData后,这一帧开始解码,每解码完成一帧,输出回调会被调起一次,用户需手动把帧buffer、index存入输出队列中

在输出线程中,把上一步的帧信息储存为bufferInfo后,pop出队。

在输出线程中,调用FreeOutputData接口后,就会送显并释放buffer。释放的buffer会返回框架,实现buffer轮转。2、 队列形式以及储存都不是必须的。用队列方便,储存是为了配合线程用条件变量来控制,避免在进行stop()等耗时操作时,出现阻塞死锁等问题

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS关于API使用问题
389浏览 • 1回复 待解决
HarmonyOS API调用崩溃问题
454浏览 • 1回复 待解决
HarmonyOS VideoDecoder使用OpenGL渲染
168浏览 • 1回复 待解决
HarmonyOS 关于C API问题
190浏览 • 1回复 待解决
元服务的api应用api集 如何区分
1645浏览 • 1回复 待解决
HarmonyOS C++ VideoDecoder组件使用
184浏览 • 1回复 待解决
HarmonyOS视频解码问题
694浏览 • 1回复 待解决
API9API10实现沉浸式窗口的方式
411933浏览 • 1回复 待解决
HarmonyOS消息订阅该使用哪个api
392浏览 • 1回复 待解决
HarmonyOS 使用华为登录API 报错1001500001
491浏览 • 1回复 待解决
HarmonyOS 使用 api11 地图不显示
501浏览 • 1回复 待解决
HarmonyOS API11限制使用标准库
346浏览 • 1回复 待解决
HarmonyOS调用相机设备API获取失败问题
439浏览 • 1回复 待解决
对于获取权限的api问题
1817浏览 • 1回复 待解决
HarmonyOS CBOR编解码问题
381浏览 • 1回复 待解决
HarmonyOS uri编码解码问题
17浏览 • 1回复 待解决