DM365的encode 视频数据在编码之前可进行 resize,可将videoStd 为VideoStd_D1_PAL,ColorSpace为ColorSpace_UYVY的
视频图片resize成为videoStd 为VideoStd_VGA,ColorSpace为ColorSpace_YUV420PSEMI的图片。
测试了一下,当前DM365的resize有:
/*ColorSpace_UYVY VideoStd_D1_PAL --------> ColorSpace_UYVY VideoStd_VGA (YES)*/
/*ColorSpace_UYVY VideoStd_D1_PAL --------> ColorSpace_YUV420PSEMI VideoStd_VGA (YES)*/
/*ColorSpace_YUV420PSEMI VideoStd_D1_PAL ---------> ColorSpace_YUV420PSEMI VideoStd_VGA (NO)*/
/*ColorSpace_YUV422PSEMI VideoStd_D1_PAL ---------> ColorSpace_YUV420PSEMI VideoStd_VGA (NO)*/
注意在启动时将模式改为signal shot mod模式,即启动模式改为1,而不是0.
代码实现如下:
//+++++++++++++++++++++++++++++++++++++++++//
static Buffer_Handle GfxBufCreate( VideoStd_Type videoStd, ColorSpace_Type colorSpace, int useRound );
//+++++++++++++++++++++++++++++++++++++++++//
Resize_Handle hResize;
Resize_Attrs resizeAttrs = Resize_Attrs_DEFAULT;
VideoStd_Type srcVideoStd = VideoStd_D1_PAL;
VideoStd_Type destVideoStd = VideoStd_VGA;
ColorSpace_Type colorInSpace = ColorSpace_UYVY;
ColorSpace_Type colorOutSpace = ColorSpace_YUV420PSEMI;
Buffer_Handle hOutResizeBuf, hInResizeBuf;
Int32 ret;
......
/*create resize handle*/
hResize = Resize_create(&resizeAttrs);
/*config resize in buffer and out buffer*/
if ( NULL == ( hInResizeBuf = GfxBufCreate( srcVideoStd, colorSpace, 1 ) ) )
{
ERR("create resize in buffer failed!\n");
cleanup(THREAD_FAILURE);
}
if ( NULL == ( hOutResizeBuf = GfxBufCreate( destVideoStd, colorSpace, 1 ) ) )
{
ERR("create resize in buffer failed!\n");
cleanup(THREAD_FAILURE);
}
ret = Resize_config ( hResize, hInResizeBuf, hOutResizeBuf );
if ( 0 != ret )
{
ERR("resize config failed ! \n");
cleanup(THREAD_FAILURE);
}
//+++++++++++++++++++++++++++++++++++++++++//
static Buffer_Handle GfxBufCreate( VideoStd_Type videoStd, ColorSpace_Type colorSpace, int useRound )
{
int bufSize = 0;
BufferGfx_Attrs bufGfxAttr = BufferGfx_Attrs_DEFAULT;
/*create resize in buffer*/
bufSize = BufferGfx_calcSize ( videoStd, colorSpace );
BufferGfx_calcDimensions ( videoStd, colorSpace, &bufGfxAttr.dim );
bufGfxAttr.colorSpace = colorSpace;
if ( useRound )
{
bufGfxAttr.dim.lineLength = Dmai_roundUp ( BufferGfx_calcLineLength( bufGfxAttr.dim.width, colorSpace ), ROUNDUPSIZE );
}
return Buffer_create ( bufSize, BufferGfx_getBufferAttrs ( &bufGfxAttr ) );
}
//+++++++++++++++++++++++++++++++++++++++++//