H264 YUV420视频翻转
来源:互联网 发布:淘宝网首页秋季女装 编辑:程序博客网 时间:2024/05/16 06:25
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 usesint 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视频翻转
- yuv420转h264
- capture(yuv422) -> h264 encode(yuv420) -> h264 -> h264 decode(yuv420)
- FFmpeg解码H264为YUV420
- YUV420格式视频下载
- YUV420视频序列文件研究
- 视频解码->yuv420 数据保存
- YUV420格式转换为H264 2D格式
- FFMPEG3.2SDK解码H264保存为YUV420文件
- ffmpeg简化方案---只支持h264解码,输出为yuv420
- Live555接收h264使用ffmpeg解码为YUV420
- Live555接收h264使用ffmpeg解码为YUV420 .
- Live555接收h264使用ffmpeg解码为YUV420 .
- Live555接收h264使用ffmpeg解码为YUV420 .
- Live555接收h264使用ffmpeg解码为YUV420
- 利用ffmpeg解码h264裸流并存储成YUV420
- h264视频编解码
- Symbian H264视频解码
- py2exe
- C#目录相关操作
- web 工程下的MANIFEST.MF文件的作用
- 选择文件夹代码的封装
- 看看这个StringBuffer的问题
- H264 YUV420视频翻转
- 香港中文大学推荐的87本书,本本经典
- jquery 延迟加载(浏览器滚动加载)
- 使用手机注意防辐射
- 第一篇文章
- linux下配置ip
- Javascript 高效率http页面优化法则之DOM操作
- LDD3源码分析之llseek分析
- SQLite与SQL差异