最简单的基于FFmpeg的libswscale的示例
来源:互联网 发布:mac怎么关闭访客模式 编辑:程序博客网 时间:2024/05/05 20:48
本文记录一个基于FFmpeg的libswscale的示例。Libswscale里面实现了各种图像像素格式的转换,以及图像大小缩放功能。而且libswscale还做了相应指令集的优化,因此它的转换效率比自己写的C语言的转换效率高很多。
流程
简单的初始化方法
Libswscale使用起来很方便,最主要的函数只有3个:
(1) sws_getContext():使用参数初始化SwsContext结构体。
(2) sws_scale():转换一帧图像。
(3) sws_freeContext():释放SwsContext结构体。
其中sws_getContext()也可以用另一个接口函数sws_getCachedContext()取代。
复杂但是更灵活的初始化方法
初始化SwsContext除了调用sws_getContext()之外还有另一种方法,更加灵活,可以配置更多的参数。该方法调用的函数如下所示。
(1) sws_alloc_context():为SwsContext结构体分配内存。
(2) av_opt_set_XXX():通过av_opt_set_int(),av_opt_set()…等等一系列方法设置SwsContext结构体的值。在这里需要注意,SwsContext结构体的定义看不到,所以不能对其中的成员变量直接进行赋值,必须通过av_opt_set()这类的API才能对其进行赋值。
(3) sws_init_context():初始化SwsContext结构体。
这种复杂的方法可以配置一些sws_getContext()配置不了的参数。比如说设置图像的YUV像素的取值范围是JPEG标准(Y、U、V取值范围都是0-255)还是MPEG标准(Y取值范围是16-235,U、V的取值范围是16-240)。
几个知识点
像素格式
像素格式的知识此前已经记录过,不再重复。在这里记录一下FFmpeg支持的像素格式。有几点注意事项:
(1) 所有的像素格式的名称都是以“AV_PIX_FMT_”开头
(2) 像素格式名称后面有“P”的,代表是planar格式,否则就是packed格式。Planar格式不同的分量分别存储在不同的数组中,例如AV_PIX_FMT_YUV420P存储方式如下:
data[0]: Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8……
data[1]: U1, U2, U3, U4……
data[2]: V1, V2, V3, V4……
Packed格式的数据都存储在同一个数组中,例如AV_PIX_FMT_RGB24存储方式如下:
data[0]: R1, G1, B1, R2, G2, B2, R3, G3, B3, R4, G4, B4……
(3) 像素格式名称后面有“BE”的,代表是Big Endian格式;名称后面有“LE”的,代表是Little Endian格式。
FFmpeg支持的像素格式的定义位于libavutil\pixfmt.h,是一个名称为AVPixelFormat的枚举类型,如下所示。
swscale-0.lib
链接: http://www.tuicool.com/articles/UzIBbai
http://blog.csdn.net/leixiaohua1020/article/details/42134965
lib-png官方源代码与标准文档,供需要编写PNG图像压缩的朋友参考
http://download.csdn.net/detail/John_Zheng/1281600
- 最简单的基于FFmpeg的libswscale的示例
- 最简单的基于FFmpeg的libswscale的示例
- 最简单的基于FFmpeg的libswscale的示例
- 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
- 最简单的基于FFmpeg的libswscale的示例附件:测试图片生成工具
- 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
- 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
- 最简单的基于FFmpeg的libswscale的示例附件:测试图片生成工具
- 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
- 颜色格式转换: 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
- 最简单的基于FFmpeg的libswscale实例
- FFmpeg源代码简单分析:libswscale的sws_getContext()
- FFmpeg源代码简单分析:libswscale的sws_scale()
- FFmpeg源代码简单分析:libswscale的sws_getContext()
- FFmpeg源代码简单分析:libswscale的sws_getContext()
- 颜色格式转换: FFmpeg源代码简单分析:libswscale的sws_getContext()
- 颜色格式转换:FFmpeg源代码简单分析:libswscale的sws_scale()
- FFmpeg源代码分析:libswscale的sws_getContext()
- systemtap 在Ubuntu上安装
- Linux 从虚拟地址到物理地址
- java + typeahead 使用
- 怀念毛泽东——赋长诗一首
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
- 最简单的基于FFmpeg的libswscale的示例
- WINDOWS下kill进程的命令
- java web监听器配置
- 正确理解毛泽东评论日本的一句话
- 安卓文本样式-Spannable的使用
- api 和 abi
- Glide转化圆形图片的坑
- android环境搭建
- ImageMagick