24,853
社区成员
发帖
与我相关
我的任务
分享
int CMainDisplayDlg::Resample(int iSrcW,int iSrcH, DEC_DATA_TYPE eSrcType, byte*byData, int iDstW,\
int iDstH, DEC_DATA_TYPE eDstType, byte * byOut, int iBufLen)
{
SwsContext *img_convert_ctx = NULL;
int informat;//实际是ffmpeg中的PixelFormat格式,但是gdiplus中有同名定义
AVPicture srcpicture, dstpicture;
byte *pTempInBuf = NULL;
int i=0;
int iPos = 0;
if(byOut == NULL)
{
return false;
}
switch(eSrcType)
{
case DEC_TYPE_YV12:
informat = PIX_FMT_YUV420P;
// pTempInBuf = new byte[iSrcW*iSrcH/2];
// for (i=0;i<iSrcW*iSrcH/2;++i)
// {
// memcpy()
// }
break;
case DEC_TYPE_RGB24://对RGB的内存序列还有待测试,目前不清楚解码库所出RGB24/32是否是打包的,
informat = PIX_FMT_RGB24;
break;
case DEC_TYPE_RGB32:
informat = PIX_FMT_RGB32;
break;
default:
return false;
}
int sizergb = avpicture_get_size(PIX_FMT_RGB24, iDstW, iDstH);
byte* bufrgb = (byte*)av_malloc(sizergb);
avpicture_fill(&srcpicture, byData, informat, iSrcW, iSrcH);
avpicture_fill(&dstpicture, bufrgb, PIX_FMT_RGB24, iDstW, iDstH);
img_convert_ctx = sws_getContext(iSrcW, iSrcH, informat, iDstW, iDstH, PIX_FMT_RGB24, SWS_POINT, NULL, NULL ,NULL);
int a = sws_scale(img_convert_ctx, srcpicture.data, srcpicture.linesize, 0, iSrcH, dstpicture.data, dstpicture.linesize);
memcpy(byOut,dstpicture.data[0],dstpicture.linesize[0]);
av_free(bufrgb);
sws_freeContext(img_convert_ctx);
return true;
}