解码模块:hdDec
这是intel mediasdk的解码模块,是成熟模块
1. extern "C" int
__declspec( dllexport )qdcInitDecompressVideo( void
*
pVideoCompressorCfg_reserved,
QY_VIDEO_HEADER * pVh_compress,
QY_VIDEO_HEADER * pVh_decompress, QDC_OBJ_INFO
* pQdcObjInfo );
说明:解码初始化
参数说明:
参数1:pVideoCompressorCfg_reserved,视频压缩策略,输入。
VIDEO_COMPRESSOR_cfgCommon *
pVideoCfgCommon = (
VIDEO_COMPRESSOR_cfgCommon * )pVideoCompressorCfg_reserved;
参数2:pVh_compress, 压缩图像
参数3:pVh_decompress,解压缩图像
参数4:pQdcObjInfo, 解码控制对象。
2.extern "C" int
__declspec( dllexport )qdcExitDecompressVideo( QDC_OBJ_INFO
* pQdcObjInfo )
说明:解码清理
参数说明:
参数1:pQdcObjInfo,解码控制对象
3.extern "C" int
__declspec( dllexport )qdcDecompressVideo( QDC_OBJ_INFO
* pQdcObjInfo, BITMAPINFO
* pBmpInfo_input, BYTE
* pInput )
说明:解码函数,(很少用)
4. extern "C" int
__declspec( dllexport )
qdcDecompressVideoRun(
QDC_OBJ_INFO * pQdcObjInfo
)
说明:解码函数,进入一循环,每循环都读取压缩包,然后输出解压缩图像。
5.CMySmplBitstreamReader,压缩流输入对象
CMySmplBitstreamReader::ReadNextFrame_func:
//
nBytesRead
= pBS->MaxLength -
pBS->DataLength;
unsigned
int uiSampleTimeInMs = 0;
if
(
pQdcObjInfo->cfg.v.dec.pf_smplBitstreamReader_ReadNextFrame_func( pQdcObjInfo,
&m_var.old_lPktId,
uiToInMs, ( char
* )( pBS->Data
+ pBS->DataLength ),
&nBytesRead,
&uiSampleTimeInMs ) ) {
return
MFX_ERR_UNKNOWN;
}
pBS->DataLength += nBytesRead;
通过调用pf_smplBitstreamReader_ReadNextFrame_func来获取输入数据。
6. CMySmplYUVWriter,解压缩图像输出对象
mfxStatus CMySmplYUVWriter::WriteNextFrame0(mfxFrameSurface1 *pSurface)
通过调用 if (
pQdcObjInfo->cfg.v.dec.pf_smplYUVWriter_WriteNextFrame0( pQdcObjInfo,
&pObj->common,
iFourcc, &m_var, pSurface,
pInfo->CropW, pInfo->CropH, pData->Pitch, pf_img_to_yuv, dFrameRate,
_T( "" ) ) );
将解压缩输出图像输出
7.注意:使用qdcDecompressVideoRun,是异步执行的压缩,所以需要用函数指针来读取数据和输出数据。
8.其他的模块,不需要采用CMySmplYUVWriter和CMySmplBitstreamReader,但是异步的输入输出函数是需要使用的。