h264解码后视频翻转,基于SDL overlay.

翻转YUV420:

void TurnPlanar(const unsigned char *srcp_y, unsigned char *dstp_y,
const unsigned char *srcp_u, unsigned char *dstp_u,
const unsigned char *srcp_v, unsigned char *dstp_v,
const int rowsize, const int height,
const int rowsizeUV, const int heightUV,
const int src_pitch_y, const int dst_pitch_y,
const int src_pitch_u, const int dst_pitch_uv,
const int src_pitch_v, const int direction)
{
/*++++++++++++++++++++++++++++++++++++++++++
(0,0)************************>x
*
*
*
*
*
*
>
y
++++++++++++++++++++++++++++++++++++++++++++*/
int y, x, offset;
if (direction == 1) // Right
{
for(y=0; y<height; y++)
{
offset = height-1-y;
for (x=0; x<rowsize; x++)
{
dstp_y[offset] = srcp_y[x];
offset += dst_pitch_y;
}
srcp_y += src_pitch_y;
}
for(y=0; y<heightUV; y++)
{
offset = heightUV-1-y;
for (x=0; x<rowsizeUV; x++)
{
dstp_u[offset] = srcp_u[x];
dstp_v[offset] = srcp_v[x];
offset += dst_pitch_uv;
}
srcp_u += src_pitch_u;
srcp_v += src_pitch_v;
}
}
else if (direction == -1) // Left
{
srcp_y += rowsize-1;
for(y=0; y<height; y++)
{
offset = y;
for (x=0; x<rowsize; x++)
{
dstp_y[offset] = srcp_y[-x];
offset += dst_pitch_y;
}
srcp_y += src_pitch_y;
}
srcp_u += rowsizeUV-1;
srcp_v += rowsizeUV-1;
for(y=0; y<heightUV; y++)
{
offset = y;
for (x=0; x<rowsizeUV; x++)
{
dstp_u[offset] = srcp_u[-x];
dstp_v[offset] = srcp_v[-x];
offset += dst_pitch_uv;
}
srcp_u += src_pitch_u;
srcp_v += src_pitch_v;
}
}
else // 180
{
dstp_y += (height-1)*dst_pitch_y + (rowsize-1);
for (y = 0; y<height; y++) {
for (x = 0; x<rowsize; x++) {
dstp_y[-x] = srcp_y[x];
}
dstp_y -= dst_pitch_y;
srcp_y += src_pitch_y;
}
dstp_u += (heightUV-1)*dst_pitch_uv + (rowsizeUV-1);
dstp_v += (heightUV-1)*dst_pitch_uv + (rowsizeUV-1);
for (y = 0; y<heightUV; y++) {
for (x = 0; x<rowsizeUV; x++) {
dstp_u[-x] = srcp_u[x];
dstp_v[-x] = srcp_v[x];
}
dstp_u -= dst_pitch_uv;
dstp_v -= dst_pitch_uv;
srcp_u += src_pitch_u;
srcp_v += src_pitch_v;
}
}
}

应用部分:

在设置编码参数时。如果侧翻,需要将width 和 height互换

pImg_convert_ctx = sws_getContext(FrameData.width,FrameData.height, FrameData.pix_fmt ,\
FrameData.height, FrameData.width, PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL);
AVPicture *pict = new AVPicture;
pict->data[0] = bmp->pixels[0];
pict->data[1] = bmp->pixels[2];
pict->data[2] = bmp->pixels[1];
pict->linesize[0] = bmp->pitches[0];
pict->linesize[1] = bmp->pitches[2];
pict->linesize[2] = bmp->pitches[1];
// Convert the image into YUV format that SDL uses
int nScale = sws_scale(pImg_convert_ctx, ((AVPicture *)FrameData.pFrame)->data, ((AVPicture *)FrameData.pFrame)->linesize,\
0, FrameData.height, picttmp->data, picttmp->linesize);
int pitch, pitchUV, align;
align = screen->format->BitsPerPixel;
pitch = (FrameData.width + align - 1)/align*align;
pitchUV = (pitch+1)>>1;
TurnPlanar(picttmp->data[0], pict->data[0], picttmp->data[1], pict->data[1], picttmp->data[2], pict->data[2],\
FrameData.height, FrameData.width, FrameData.height/2, FrameData.width/2,\
pitch, pitch, pitchUV, pitchUV, pitchUV, 1);//侧翻

效果如下:

H264 YUV420视频翻转相关推荐

  1. 流媒体播放器播放h264编码视频与h265编码视频哪个更清晰?

    h265编码是h264编码的升级版,h265目前在视频点播方面使用的更加普遍,而在视频直播方面,由于难以达到h265编码的解码速度,运用起来还是有些难度的,还需要看未来我们的流媒体技术的发展.那么既然 ...

  2. 实现H264格式视频的流媒体播放

    http://bbs.chinavideo.org/forum.php?mod=viewthread&tid=7575&extra=&page=1 相信有不少人和我一样,希望实 ...

  3. 视频图像数据处理三:将yuv420视频图像转换为灰度图像

    文章目录 函数代码 测试用例 下载 本文介绍了将yuv420视频图像转换为灰度图像的方法,附有详细的代码和图像示例.文中yuv420文件需要使用yuv/rgb播放器才能查看,参考播放器可选择雷神推荐的 ...

  4. 视频图像数据处理五:对yuv420视频图像加边框

    文章目录 函数代码 测试用例 下载 本文介绍了对yuv420视频图像加边框的方法,附有详细的代码和图像示例.文中yuv420文件需要使用yuv/rgb播放器才能查看,参考播放器可选择雷神推荐的修改了一 ...

  5. 视频图像数据处理一:分离yuv420视频图像的y、u、v分量

    文章目录 函数代码 测试用例 下载 本文介绍了分离yuv420视频图像y.u.v分量的方法,附有详细的代码和图像示例.文中yuv420文件需要使用yuv/rgb播放器才能查看,参考播放器可选择雷神推荐 ...

  6. 前端|3D立体视频翻转动画

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 欢迎加入团队圈子!与作者面对面!直接点击! 基本介绍 HTML ...

  7. 利用libswscale转换yuyv422到yuv422p或rgb之间的转换, 视频翻转

    2019独角兽企业重金招聘Python工程师标准>>> yuyv422的数据来自ffdshow raw filter输出的yuv2, 其实就是yuv422p的packed模式, 要转 ...

  8. ffmpeg的H264编码 视频逐渐模糊

    万能的互联网,又一次在临危之时解决了我的问题 最近在看ffmpeg里的H264编码,然后试着去做了一下.但是目前发现一个问题,就是编码写入的.264文件,用播放器(VLC,暴风都试过)播放后,发现编码 ...

  9. iOS H264,H265视频编码(Video encode)

    本例需求:使用H264, H265实现视频数据的编码并录制开始200帧存为文件. 原理:比如做直播功能,需要将客户端的视频数据传给服务器,如果分辨率过大如2K,4K则传输压力太大,所以需要对视频数据进 ...

  10. YUV420视频上面添加字幕

    1.source_code main.c中实现了函数draw_Font_Func(),这个函数可以直接移植到C程序中使用. zimo.h里面放的是字模转码后的数据. 2.data_yuv 测试用的yu ...

最新文章

  1. linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程
  2. 大数——二进制转换(hdu2051)
  3. HashMap面试指南
  4. [Simulink]非线性系统模型建立及相轨迹
  5. PyQt4--QPushButton(click)类的信号
  6. 股东控股关系图谱简化版
  7. CQI原理及CQI指标优化
  8. dockerMySQL数据库主从一主一从
  9. iPad 3发布在即,各平板优势大比拼
  10. 厘米与像素的单位转换
  11. 执法部门的“新助手” 扫二维码进群反映问题
  12. FastDB 很难得的一篇分析
  13. 我们眼中的互联网和认识以及我自身的看法
  14. 混合云是什么,主要有什么优缺点
  15. 超融合基础架构超融合一体机
  16. iphone相册储存空间已满_苹果手机存储空间满了怎么办?
  17. 笨鸟先飞学编程系列之二 基础代码的编写1(转)
  18. 2020A证(安全员)考试及A证(安全员)模拟考试软件
  19. Docker部署LNMP环境
  20. [Android]第一个Android软件/demo

热门文章

  1. linux设置合上电脑,CentOS7设置笔记本合盖不休眠
  2. python做一个qq聊天窗口_python实现qq聊天(带界面)
  3. 彼得林奇的成功投资一——作为消费者来选股
  4. (转)文件名后缀大全
  5. Windows 最全CMD命令,带死机修复系统命令
  6. arcgis 发布服务
  7. 计算机桌面的图片要点开才可以看,在桌面上的图片文件都不显示具体图片了 只能打开这个图片才能看到是哪张图片 请问怎么处理?...
  8. 蒟蒻打CF#729div 2
  9. python编写简易木马程序_中国骇客云教你使用Python编写木马程序
  10. 7 tips for using UIWebView