HarmonyOS C++ 接口VideoDecoder软解相关咨询

通过C++ 层VideoDecoder相关接口创建软件解码器(如下),可以正常解码数据。

OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
const char *name = OH_AVCapability_GetName(capability);
videoDec = OH_VideoDecoder_CreateByName(name);

需要确认以下两个问题:

1、对于硬解,可以遵循参考帧数量,比如参考帧数量为2,一般send 2个数据,必然会有解码数据输出,但是软解这里需要多send几个数据,才会有解码数据输出,请问这里的逻辑?由于解码是异步的,不可能无限制的send数据,需要根据一个条件来决定是否等待解码数据,比如输入多少个数据,肯定会有解码数据输出,硬解可以通过参考帧数量判断,软解这里呢?

2、由于软件解码后的数据无法从OH_AVBuffer *获取 OH_NativeBuffer *,那就需要读取yuv数据,API文档中只有下列接口:

uint8_t *OH_AVBuffer_GetAddr(OH_AVBuffer *buffer); 
int32_t OH_AVBuffer_GetCapacity(OH_AVBuffer *buffer); 

实际需要的是类似ffmpeg AVFrame中的下列数据格式,请问如何获取?

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

问题1:异步解码,每一帧解码完毕都会通过用户注册的回调告诉用户,不存在不知道怎么判断解码是否完成的问题。至于用户丢了多少数据才会出第一帧,丢了多少数据才会出第2帧,这个没有判断方法,能够保证的是最后解码结束的时候总共出的帧等于送的帧。

问题2:参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avcodec/video-decoding.md#buffer%E6%A8%A1%E5%BC%8F

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS C++ VideoDecoder组件使用
194浏览 • 1回复 待解决
HarmonyOS 媒体硬相关问题咨询
618浏览 • 1回复 待解决
ArkTS层通过接口访问C++层对象
383浏览 • 1回复 待解决
HarmonyOS 是否有c接入接口相关的demo
37浏览 • 1回复 待解决
如何修改C++版本?C++支持情况?
1205浏览 • 1回复 待解决
c++ 有vp2px 的接口么?
1873浏览 • 1回复 待解决
HarmonyOS C++开发
33浏览 • 1回复 待解决
HarmonyOS InputText相关咨询
340浏览 • 1回复 待解决
HarmonyOS h264/h265是在CPU运行吗
74浏览 • 1回复 待解决
HarmonyOS ArkTS与C/C++的交互
769浏览 • 1回复 待解决
HarmonyOS C++异步操作
376浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人