浅谈颜色模式
浅谈颜色模式 你有没有这种感觉,一幅色彩生动亮丽的图象通过彩色喷墨打印机打印出来,颜色变得灰暗难看,尽管打印机是高质量输出?不过在你责备你的打印机之前,我想问一问,你的图象是什么颜色格式?“颜色就是颜色,还有什么格式?”是的,颜色也存在着各种格式。打开你的Photoshop,看看Image菜单下的Mode项,里面有一长串的名字,那些都是什么?让我们慢慢道来。RGB颜色模式我们每天面对的显示器便是根据这种特性,由RGB组成颜色。这就是RGB颜色模式的基础。显示器是通过发射三种不同强度的光束,使屏幕内侧上覆盖的红、绿、蓝磷光材
视频与图像RGB/YUV格式详解
根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成。F = r [ R ] + g [ G ] + b [ B ]其中,r、g、b分别为三基色参与混合的系数。当三基色分量都为0(最弱)时混合为黑色光;而当三基色分量都为k(最强)时混合为白色光。调整r、g、b三个系数的值,可以混合出介于黑色光和白色光之间的各种各样的色光。那么YUV又从何而来呢?在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即
轻松使用 ffmpeg sdk 实现各种格式的rgb以及yuv raw
有些时候大家需要一些yuv或者rgb 的 raw data的文件。ffmpeg项目中的libavcodec支持很多格式的raw相互转换,在早期的版本中,使用 img_convert,在新版本中,使用 sws_scale 完成。各种不同的格式在ffmpeg里面被称为 pixel formats,下面贴出来的就是:PIX_FMT_YUV420P, < Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)n"PIX_FMT_YUV422, < Packed pixel, Y0 Cb Y1 Cr n"PIX_FMT_RGB24, < Packed pixel, 3 bytes per pixel, RGBRGB...n"PIX_FMT_BGR24, < Packed pixel, 3 bytes
Using libavformat and libavcodec(中文版)
来源:http://ffmpeg.sourceforge.net/ ffmpeg开发指南(使用 libavformat 和 libavcodec)Ffmpeg 中的Libavformat 和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验
shmget() -- 建立共享内存
shmget() -- 建立共享内存版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/19564086.html #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg);key_t key----------------------------------------------- key标识共享内存的键值: 0/IPC_PRIVATE。 当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中设置了IPC_PRIVATE这个标志,则同样将创建一块新的共享内存。 在
IP组播网络编程
IP组播网络编程 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/19625232.html5.2 组播应用程序接口与编程 RFC1112推荐了一些支持组播的应用程序接口: ●加入一个组播组; ●离开一个组播组; ●为调整范围对一个组播数据的IP TTL值进行设定; ●为组播传输和接收设定本地的接口; ●禁止输出的组播数据回送。 现在,许多TCP/IP实现都支持RFC1112所提到的要求,下面简要介绍UNIX(Berkeley Socket)和Windows(Winsock) API。 5.2.1 Berkeley Socket组播API 所有Berkeley Socket API都采
FFMPEG 编码分析流程图
FFMPEG 编码分析流程图 - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/18974499.html读代码,自己画画图,可惜显示效果差啊图2.4 write_video_frame.jpg图2.4.1 avcodec_encode_video.jpg图2.4.1.1 encode_picture.jpg图2.4.2 av_write_frame.jpg [@more@]
FFMpeg框架代码阅读 - [3DTV]
FFMpeg框架代码阅读 - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/15774588.html简介FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.TCPMP, VLC, MPlayer等开源播放器都用到了FFmpeg。FFmpeg主目录下主要有libavcodec、libavformat和libavutil等子目录。其中libav
FFMpeg SDK 开发手册(3)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084644.html14. void av_free(void *ptr) usage: free the stream. Free memory which has been allocated with av_malloc(z)() or av_realloc(). av_free(oc); /****************************************************************** ****************************************************************** add_video_stream() AVCodecContext *c AVStream *st ******************************************************************/
FFMpeg SDK 开发手册(2)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084488.htmlIV. AVCodecContext 此结构在Ffmpeg SDK中的注释是:main external api structure其重要性可见一斑。而且在avcodec它的定义处,对其每个成员变量,都给出了十分详细的介绍。应该说AVCodecContext的初始化是Codec使用中最重要的一环。虽然在前面的AVStream中已经有所提及,但是这里还是要在说一遍。AVCodecContext作为Avstream的一个成员结构,必须要在Avstream初始化後(30)再对其初始化(AVStream的初始化用到AVFormatConte
FFMpeg SDK 开发手册 1
FFMpeg SDK 开发手册(1)[转载] - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084170.htmlFFMpeg SDK 开发手册 FFMpeg 中比较重要的函数以及数据结构如下: 1. 数据结构: (1) AVFormatContext (2) AVOutputFormat (3) AVInputFormat (4) AVCodecContext (5) AVCodec (6) AVFrame (7) AVPacket (8) AVPicture (9) AVStream 2. 初始化函数: (1) av_register_all() (2) avcodec_open() (3) avcodec_close() (4) av_open_input_file() (5) av_find_input_format() (6) av_f
ffmpeg分析系列之七(打开输入的流)
ffmpeg分析系列之七(打开输入的流)err = av_open_input_stream(ic_ptr, pb, filename, fmt, ap);int av_open_input_stream(AVFormatContext **ic_ptr, // 输出参数: 格式上下文ByteIOContext *pb, // 字节IO上下文const char *filename, // 文件名AVInputFormat *fmt, // 输入的格式AVFormatParameters *ap) // 格式参数, 调用时为NULL{int err;AVFormatContext *ic;AVFormatParameters default_ap;// 使用缺省的格式参数if(!ap){ap=&default_ap;memset(ap, 0, sizeof(default_ap));}if(!ap->prealloced_context)ic = avformat_all
视频播放的基本原理
视频播放的基本原理一、知识点ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流.PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流.TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PA
ffmpeg分析系列之五(打开输入的文件)
ffmpeg分析系列之五(打开输入的文件)1. 打开文件:if (!fmt || !(fmt->flags & AVFMT_NOFILE)) { 因 fmt == NULL, 上面成立, 再看下面的代码: ByteIOContext *pb = NULL; // 字节IO上下文 if ((err=url_fopen(&pb, filename, URL_RDONLY)) < 0) { // 只读方式打开输入的文件 goto fail; } if (buf_size > 0) { // 因 buf_size == 0, 不成立 url_setbufsize(pb, buf_size); }进入url_fopen函数:int url_fopen(ByteIOContext **s, // 输出参数: 字节IO上下文
ffmpeg分析系列之四(探测输入的格式)
ffmpeg分析系列之四(探测输入的格式)调用av_open_input_file(&pFormatCtx, is->filename, NULL, 0, NULL)函数打开输入的文件.1. 分析一下函数原型:int av_open_input_file(AVFormatContext **ic_ptr, // 输出参数: 格式上下文 const char *filename, // 文件名 AVInputFormat *fmt, // 输入的格式, 为NULL, 即未知 int buf_size, // 缓冲的大小, 为0 AVFormatParameters *ap); // 格式的参数, 为NULL2. 初始化探测数据: AVProbeData
ffmpeg分析系列之六(再次探测输入的格式)
ffmpeg分析系列之六(再次探测输入的格式)void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL; // 因为 ap == NULL, 所以 logctx 也 == NULL. if (!fmt && (err = ff_probe_input_buffer(&pb, &fmt, filename, logctx, 0, logctx ? (*ic_ptr)->probesize : 0)) < 0) { goto fail; } // fmt == NULL 时才执行 ff_probe_input_buffer 函数, 因为 fmt 就等于NULL, 成立.ff_probe_input_buffer函数的原型:int ff_probe_input_buffer(ByteIOContext **pb, // 字节IO上下文,
ffmpeg分析系列之三(输入输出格式)
ffmpeg分析系列之三(输入输出格式)探测数据结构:/** This structure contains the data a format has to probe a file. */typedef struct AVProbeData { const char *filename; unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ int buf_size; /**< Size of buf except extra allocated bytes */} AVProbeData;h264的探测函数:static int h264_probe(AVProbeData *p){ uint32_t code= -1; int sps=0, pps=0, idr=0, res=0, sli=0; int i; for(
ffmpeg分析系列之二(文件协议)
ffmpeg分析系列之二(文件协议)URL协议结构:typedef struct URLProtocol { const char *name; int (*url_open)(URLContext *h, const char *url, int flags); int (*url_read)(URLContext *h, unsigned char *buf, int size); int (*url_write)(URLContext *h, unsigned char *buf, int size); int64_t (*url_seek)(URLContext *h, int64_t pos, int whence); int (*url_close)(URLContext *h); struct URLProtocol *next; int (*url_read_pause)(URLContext *h, int pause); int64_t (*url_read_seek)(URLCont
ffmpeg分析系列之一(注册该注册的)
ffmpeg分析系列之一(注册该注册的)hello,各位好,本人是一名嵌入式软件工程师,目前正使用ffmpeg开发一款嵌入式多媒体播放器,《ffmpeg分析》系列博文是本人在阅读ffmpeg源代码时所做的笔记,希望对各位有点帮助。分析过程结合下面的例程:http://dranger.com/ffmpeg/tutorial05.c一. 调用av_register_all函数注册所有的格式和编码解码器.1.1 先调用avcodec_register_all函数注册所有的编码解码器.1. 下面列出与H264相关的注册:// 注册硬件加速器REGISTER_HWACCEL (H264_DXVA2, h264_dxva2);REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);/
YUV / RGB 格式及快速转换算法
YUV / RGB 格式及快速转换算法1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等。 对于数字电子多媒体领域来说,我们经常接触到的色彩空间的概念,主要是RGB , YUV这两种(实际上,这两种体系包含了许多种具体的颜色表达方式和模型