ffmpeg之yuv2rgb_c_24_rgb
YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, )
LOADCHROMA();
PUTRGB24(dst_1, py_1, );
PUTRGB24(dst_2, py_2, ); LOADCHROMA();
PUTRGB24(dst_2, py_2, );
PUTRGB24(dst_1, py_1, ); LOADCHROMA();
PUTRGB24(dst_1, py_1, );
PUTRGB24(dst_2, py_2, ); LOADCHROMA();
PUTRGB24(dst_2, py_2, );
PUTRGB24(dst_1, py_1, );
ENDYUV2RGBLINE(, )
LOADCHROMA();
PUTRGB24(dst_1, py_1, );
PUTRGB24(dst_2, py_2, ); LOADCHROMA();
PUTRGB24(dst_2, py_2, );
PUTRGB24(dst_1, py_1, );
ENDYUV2RGBLINE(, )
LOADCHROMA();
PUTRGB24(dst_1, py_1, );
PUTRGB24(dst_2, py_2, );
ENDYUV2RGBFUNC()
#define PUTRGB24(dst, src, i) \
Y = src[ * i]; \
dst[ * i + ] = r[Y]; \
dst[ * i + ] = g[Y]; \
dst[ * i + ] = b[Y]; \
Y = src[ * i + ]; \
dst[ * i + ] = r[Y]; \
dst[ * i + ] = g[Y]; \
dst[ * i + ] = b[Y];
#define LOADCHROMA(i) \
U = pu[i]; \
V = pv[i]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];
#define ENDYUV2RGBLINE(dst_delta, ss) \
pu += >> ss; \
pv += >> ss; \
py_1 += >> ss; \
py_2 += >> ss; \
dst_1 += dst_delta >> ss; \
dst_2 += dst_delta >> ss; \
} \
if (c->dstW & ( >> ss)) { \
int av_unused Y, U, V; \
#define ENDYUV2RGBFUNC() \
} \
} \
return srcSliceH; \
}
#define YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0) \
static int yuv2rgb_c_24_rgb(SwsContext *c, const uint8_t *src[], \
int srcStride[], int srcSliceY, int srcSliceH, \
uint8_t *dst[], int dstStride[]) \
{ \
int y; \
\
if (! && c->srcFormat == AV_PIX_FMT_YUV422P) \
{ \
srcStride[] *= ; \
srcStride[] *= ; \
} \
for (y = ; y < srcSliceH; y += )
{ \
uint8_t *dst_1 = \
(uint8_t *)(dst[] + (y + srcSliceY) * dstStride[]); \
uint8_t *dst_2 = \
(uint8_t *)(dst[] + (y + srcSliceY + ) * dstStride[]); \
uint8_t av_unused *r, *g, *b; \
const uint8_t *py_1 = src[] + y * srcStride[]; \
const uint8_t *py_2 = py_1 + srcStride[]; \
const uint8_t *pu = src[] + (y >> ) * srcStride[]; \
const uint8_t *pv = src[] + (y >> ) * srcStride[]; \
const uint8_t av_unused *pa_1, *pa_2; \
unsigned int h_size = c->dstW >> ; \
if () \
{ \
pa_1 = src[] + y * srcStride[]; \
pa_2 = pa_1 + srcStride[]; \
} \
while (h_size--) \
{ \
int av_unused U, V, Y; \
U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; pu += >> ; \
pv += >> ; \
py_1 += >> ; \
py_2 += >> ; \
dst_1 += >> ; \
dst_2 += >> ; \
} \
if (c->dstW & ( >> )) \
{ \
int av_unused Y, U, V; \ U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; pu += >> ; \
pv += >> ; \
py_1 += >> ; \
py_2 += >> ; \
dst_1 += >> ; \
dst_2 += >> ; \
} \
if (c->dstW & ( >> ss)) \
{ \
int av_unused Y, U, V; \ U = pu[]; \
V = pv[]; \
r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \
g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \
b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; \ Y = py_1[ * ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; \
Y = py_1[ * + ]; \
dst_1[ * + ] = r[Y]; \
dst_1[ * + ] = g[Y]; \
dst_1[ * + ] = b[Y]; Y = py_2[ * ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y]; \
Y = py_2[ * + ]; \
dst_2[ * + ] = r[Y]; \
dst_2[ * + ] = g[Y]; \
dst_2[ * + ] = b[Y];
} \
} \
return srcSliceH; \
}
ffmpeg之yuv2rgb_c_24_rgb的更多相关文章
- FFmpeg学习6:视音频同步
在上一篇文章中,视频和音频是各自独立播放的,并不同步.本文主要描述了如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放的.主要有以下几个方面的内容 视音频同步的简单介绍 DTS 和 ...
- FFmpeg 中AVPacket的使用
AVPacket保存的是解码前的数据,也就是压缩后的数据.该结构本身不直接包含数据,其有一个指向数据域的指针,FFmpeg中很多的数据结构都使用这种方法来管理数据. AVPacket的使用通常离不开下 ...
- FFmpeg + SoundTouch实现音频的变调变速
本文使用FFmpeg + SoundTouch实现将音频解码后,进行变调变速处理,并将处理后的结果保存为WAV文件. 主要有以下内容: 实现一个FFmpeg的工具类,保存多媒体文件所需的解码信息 将解 ...
- 用ffmpeg快速剪切和合并视频
如果直接找视频剪切和合并视频的软件,通常出来的都是大的视频编辑软件或者是有图形界面的剪切软件,大型一点的功能太多安装麻烦,小型一点的功能可能不齐全. 只是简单的剪切或者一下合并一下,还是ffmpeg这 ...
- ffmpeg用法及如何使用fluent-ffmpeg
http://ffmpeg.org/ 官网 ffmpeg(命令行工具) 是一个快速的音视频转换工具. 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an o ...
- FFmpeg学习4:音频格式转换
前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式 ...
- FFmpeg学习5:多线程播放视音频
在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了 如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习 ...
- FFmpeg数据结构:AVPacket解析
本文主要从以下几个方面对AVPacket做解析: AVPacket在FFmpeg中的作用 字段说明 AVPacket中的内存管理 AVPacket相关函数的说明 结合AVPacket队列说明下AVPa ...
- FFmpeg学习3:播放音频
参考dranger tutorial,本文将介绍如何使用FFmpeg解码音频数据,并使用SDL将解码后的数据输出. 本文主要包含以下几方面的内容: 关于播放音频的需要的一些基础知识介绍 使用SDL2播 ...
随机推荐
- mysql shell 备份脚本
使用 mysqldump 备份数据库,通过 FTP 上传到备份服务器,同时在本地保留备份文件. 新建一个 Shell 脚本文件 vi /home/work/backup.sh 添加如下内容: #! / ...
- 不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime
不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime 前一段时间图片处理服务一直报“System.Format ...
- js循环array,json,map
var str = '[{"uname":"王强","day":"2010/06/17"},{"uname&q ...
- SSO单点登录解决方案[转载]
1 什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互 ...
- tcxtreelist 控制单元格变颜色,或者行变颜色
如果控制单元格变颜色,只需要把注释的放开就可以了, 也就是判断当前列,是否是你想让变颜色的列. 如果想整行变颜色, 则只需要注释下面的就可以了. procedure TfrmwpOrderSendin ...
- [codevs3295]落单的数
题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...
- 【JS】Beginner3 & 4 & 5 & 6:Maths & Logic & Conditonal & Looping
1.number operator () * / + - 2.logic make decisions in code compare values to produce a boolean valu ...
- SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)
--SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP WITH CUBE GROUPING SET(..) /*********************** ...
- 查看目标文件是否是以-fPIC编译的, ar 打包命令将多个静态库打包到一个里面
readelf --relocs foo.o | egrep '(GOT|PLT|JU?MP_SLOT)' 上句大多数时候(和平台有关)可以正确判断是否是以fPIC选项编译的,如果输出为空,基本可以表 ...
- J2EE开发常用开源框架技术(转)
主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库 1持久层:1)Hiber ...