同openH264编码一样,openH264的解码流程也主要分为3步:
1:创建解码器。
int result = WelsCreateDecoder(&decoder);
同样可以通过判断返回值来判断解码器是否创建成功。
2:初始化解码器。
memset (&pParam, 0, sizeof (SDecodingParam));
pParam.uiTargetDqLayer = UCHAR_MAX;
pParam.eEcActiveIdc = ERROR_CON_FRAME_COPY_CROSS_IDR;
pParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;
result = decoder->Initialize(&pParam);
3:调用解码器开始解码。
int stride[2] = {videoWidth, videoWidth/2};
uint8_t* dst[3];
memset (dst, 0, sizeof (dst));
int result = decoder->DecodeFrame((const unsigned char*)src, length, dst, stride, videoWidth, videoHeight);
解码后的数据存储在dst中,格式为YUV420P,如果需要其他格式的话,要进行格式转换。