您好!
我正在尝试对之前由 DM36x H.264编码器编码的 H.264流进行代码转换。 解码器和编码器在同一个线程上工作。 解码器解码的每个帧都将通过编码器、以相同的分辨率以不同的比特率进行编码。 当流速达到 VGA 640x480等 SD 分辨率时、效果会很好。 但是、当流速为1280x720或1920x1088时、解码器停止解码并在编码器处理第一个解码帧后立即给出"IH264VDEC_EX_ERR_INV_CODEC _ID"等错误。 如果对编码器进行了注释、则解码器将无 错误地处理 HD 流。 编码器正在破坏解码器正在使用的东西。 我正在 设置解码器中的 resetHDVICPeveryFrame=1并使用默认编码器参数( 这也意味着在这里重置 HDVICPeveryFrame=1)。 编码器和解码器的 groupId 是相同的、因为它们不是并行使用的、而是一个接一个地使用。
视频解码器使用以下参数进行初始化:
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);
为了使解码器和编码器在 HD 中协同工作、是否还有其他需要更改的地方?
谢谢、
Gadi