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
2024-12-20 16:02:43
浏览
收藏 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
微信
回复
2024-12-20 16:53:56
相关问题
HarmonyOS关于API使用问题
971浏览 • 1回复 待解决
HarmonyOS 钱包SENFC相关API使用
189浏览 • 1回复 待解决
HarmonyOS AVPlayer API问题
154浏览 • 1回复 待解决
HarmonyOS 蓝牙api问题
473浏览 • 1回复 待解决
HarmonyOS AudioCapturer API相关问题
268浏览 • 1回复 待解决
HarmonyOS API调用崩溃问题
840浏览 • 1回复 待解决
HarmonyOS 发布API相关问题
426浏览 • 1回复 待解决
HarmonyOS UI测试API问题
401浏览 • 1回复 待解决
HarmonyOS VideoDecoder使用OpenGL渲染
500浏览 • 1回复 待解决
HarmonyOS @kit.ConnectivityKit api问题
222浏览 • 1回复 待解决
元服务的api应用api集 如何区分
2018浏览 • 1回复 待解决
HarmonyOS 使用防截图API报错
256浏览 • 1回复 待解决
HarmonyOS 关于C API问题
736浏览 • 1回复 待解决
HarmonyOS C++ VideoDecoder组件使用
486浏览 • 1回复 待解决