ffmpeg sws_scale转码问题

老灰狼 2015-07-07 04:44:43
[编辑],貌似找到问题了,,最后memcpy的时候,只拷贝了一行................................................................,来个接分的,做好说点有建设性的东西-_-

代码是yuv420p转rgb24的,
流程是解码库输出yv12,到底是不是标准的420p存储方式不太清楚,可以看一下图片中的现象;
然后送入下面代码中进行重采样;
图片:
左侧是按照yuv planar 4:2:0 格式播放的转码前图像,没什么问题
右侧是按照rgb 交叉存储方式播放的转码后图像,只有最上面的几像素高度能看到点图像

代码如下;
传入参数源尺寸352*288,目标尺寸也是352*288;设置成一样的,只是为了排除重采样因素,只考虑转码
源格式是yv12的,会在switch转成ffmpeg的格式yuv420p;
目标格式会忽略掉,代码中固定成RGB24
有经验的老师帮忙分析下那里写错了
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;
}
...全文
292 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
老灰狼 2015-07-07
  • 打赏
  • 举报
回复
sws_scale返回值为0,除此之外没有其他异常现象
老灰狼 2015-07-07
  • 打赏
  • 举报
回复
哦,忘记说了,yuv和rgb文件,分别是重采样函数调用前后存储的,没有做其他处理

24,853

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧