解码器创建失败

用户您好,请详细描述您所遇到的问题。

  1. 系统软件版本:x3j3_lnx_db_20210907 release
  2. 问题涉及的技术领域:视频解码
  3. 问题描述:参考《MU-2520-4-P-X3_Platform_AUTO_Media_System_Interface_Manual.pdf》文档解码器中的 sample 代码创建解码通道失败
  4. 复现概率:必现。已进行的排查措施、分析及结果:
    1. 尝试过 H264/H265,NV21/NV12 现象均一致
  5. 软件上是否有做自定义修改:否

以下代码参考《MU-2520-4-P-X3_Platform_AUTO_Media_System_Interface_Manual.pdf》“9.3.5 HB_VDEC_ResetChn”的示例代码,试图创建一个解码通道,但是 HB_VDEC_CreateChn() 接口始终返回错误码 -269024261,文档对此错误码的解释为“操作不允许”,没有进一步的解释。出错打印内容如下图所示:

相关代码如下:

VDEC_CHN VDEC_Chn = 0;
int32_t s32Ret = 0;
int32_t Width = 1920;
int32_t Height = 1080;
VDEC_CHN_ATTR_S m_VdecChnAttr ;
memset(&m_VdecChnAttr , 0, sizeof(VDEC_CHN_ATTR_S));
m_VdecChnAttr.enType = PT_H265;
m_VdecChnAttr.enMode = VIDEO_MODE_FRAME;
m_VdecChnAttr.enPixelFormat = HB_PIXEL_FORMAT_NV21;
m_VdecChnAttr.u32FrameBufCnt = 10;

m_VdecChnAttr.u32StreamBufCnt = 10;
m_VdecChnAttr.u32StreamBufSize = Width * Height * 1.5;
m_VdecChnAttr.bExternalBitStreamBuf = HB_TRUE;
if (m_VdecChnAttr.enType == PT_H265) {
 m_VdecChnAttr.stAttrH265.bandwidth_Opt = HB_TRUE;
 m_VdecChnAttr.stAttrH265.enDecMode = VIDEO_DEC_MODE_NORMAL;
 m_VdecChnAttr.stAttrH265.enOutputOrder = VIDEO_OUTPUT_ORDER_DISP;
 m_VdecChnAttr.stAttrH265.cra_as_bla = HB_FALSE;
 m_VdecChnAttr.stAttrH265.dec_temporal_id_mode = 0;
 m_VdecChnAttr.stAttrH265.target_dec_temporal_id_plus1 = 2;
 }
 if (m_VdecChnAttr.enType == PT_H264) {
 m_VdecChnAttr.stAttrH264.bandwidth_Opt = HB_TRUE;
 m_VdecChnAttr.stAttrH264.enDecMode = VIDEO_DEC_MODE_NORMAL;
 m_VdecChnAttr.stAttrH264.enOutputOrder = VIDEO_OUTPUT_ORDER_DISP;
 }
s32Ret = HB_VDEC_CreateChn(VDEC_Chn, &m_VdecChnAttr);
printf("[XXXXXXXXXXXXXXXXX] HB_VDEC_CreateChn: %d\n", s32Ret);

在代码最开始调用以下接口:-
s32Ret = HB_VDEC_Module_Init();

if (s32Ret) {

printf(“HB_VDEC_Module_Init: %d\n”, s32Ret);

}

谢谢,加上这行确实成功了。

我在我手上这份文档(X3 AIOT媒体接口手册,V1.0,2021-04)没有找到这个接口的,请问一下是不是这个版本已经老了,哪里可以下载到最新的版本吗

加上以上代码之后解码器创建成功了,但是调用 HB_VDEC_SendStream 送入码流的时候又出错了,错误信息如下,麻烦帮忙看下是什么问题呢(那个错误码按文档所述是未知错误):

HB_VDEC_StartRecvStream: 0HB_VDEC_SendStream 2801 bytes success[ERROR][MM][src/vdi/linux/vdi_osal.c:174] [ERROR][432691.58622][16818:16821][VideoDecoder] DecodeHeader:1554 FAILED TO DEC_PIC_HDR: ret(1), SEQERR(00005000)[ERROR][MM][src/vdi/linux/vdi_osal.c:174] [ERROR][432691.58630][16818:16821][COMPONENT] Component wave_decoder will be terminated.[ERROR][MM][src/vdi/linux/vdi_osal.c:174] [ERROR][432691.60046][16818:16819][TASK] It's not allowd to do this operation. Please check the task state 6.[ERROR][][video/src/hb_vdec.c:666] [432691.600542]HB_VDEC_SendStream[666]: [HB_VDEC] HB_VDEC_SendStream:666 Failed  VeChn = 0 s32Ret = -269024256

send 给解码器的起始数据必须是 sps,pps 描述信息。