您好!
我正在尝试解码之前由官方编码器编码的 H.264字节流、以便使用不同的比特率对其重新编码。 实际上、我尝试重新编码来自不同编码器的流、但由于它不起作用、我尝试使用我们一直使用的同一本机 H.264编码器、只是检查解码器是否正常工作以及我是否知道如何使用它。
不幸的是,这对我来说是不起作用的。 解码器初始化正常、并且在不长的时间后、它会正确识别视频分辨率。 它还会发送一些图像、然后我使用相同的参数直接将这些图像馈送到编码器、只是不同的比特率。 但是、图像无法识别。 在此阶段、我可能会假设存在一些缓冲器不匹配、可能是 Y 和 UV、宽度和间距未正确传递。 但问题出现在日志中、在日志 中、对 VIDDEC2_PROCESS 的几乎每次调用都以返回代码-1结束、并从状态中获得一些扩展错误。 常见错误为0x200 (应用隐藏)、0x600 (+数据不足)等 消耗的字节数有时仅与长度相关、有时甚至更多、有时更少。
HD 解码导致 VIDDEC2_Process 崩溃、因此我目前只尝试 VGA。
视频解码器使用以下参数进行初始化:
IVIDDEC2_Params _vdpParams = m_hvdpParams.viddecParams;
vdpParams.size = sizeof ( m_hvdpParams );
vdpParams.maxHeight = MAX_HEIGHT;
vdpParams.maxWidth = MAX_WIDTH;
vdpParams.maxFrameRate = MAX_FRATE * 1000;
vdpParams.maxBitRate = MAX_bitrate;
vdpParams.dataEndeals= XDM_BYTE;
vdpParams.forceChromaFormat = XDM_YUV_420SP;
m_hvdpParams.displayDelay = 0;
m_hvdpParams.hdvicpHandle = NULL;
m_hvdpParams.disableHDVICPeveryFrame = 0;
m_hvdpParams.levelLimit= level_4_2;
m_hvdpParams.frame_closedloop_flag = 0;
m_hvdpParams.inputDataMode = IH264VDEC_TI_ENTIREFRAME;
m_hvdpParams.sliceFormat = IH264VDEC_TI_BYTESTREAM;
IVIDDEC2_DynamicParams &vddpDynamicParams = m_hvddDynamicParams.viddecDynamicParams;
vddpDynamicParams.size = sizeof (m_hvddDynamicParams);
vddpDynamicParams.decodeHeader = XDM_DECODE_AU;
vddpDynamicParams.displayWidth = 0;
vddpDynamicParams.frameSkipMode = IVIDEO_NO_SKIP;
vddpDynamicParams.frameOrder = IVIDDEC2_DISPLAY_ORDER;
vddpDynamicParams.newFrameFlag = XDAS_false;
vddpDynamicParams.mbDataFlag = XDAS_false;
m_hvddDynamicParams.getDataFxn =空;
m_hvddDynamicParams.dataSyncHandle =空;
m_hvddDynamicParams.resetHDVICPeveryFrame = 1;
m_hVideoDecoder = VIDDEC2_create (m_hEngine、"h264dec、&vdpParams);
我曾尝试自己解析 NAL 单元并单独给它们馈送。
我还尝试给它一个内部有任何 NAL 单元的缓冲区、并尝试根据占用的字节数进行处理。
能不能告诉我我有什么问题、或者使用 H.264解码器的正确方法是什么?
谢谢、
Gadi