今天再看mplayer的代码时,其中有这么一段代码:
/*
** Translate a mplayer fourcc to a video4linux2 pixel format.
*/
static int fcc_mp2vl(int fcc)
{
switch (fcc) {
case IMGFMT_RGB8: return V4L2_PIX_FMT_RGB332;
case IMGFMT_BGR15: return V4L2_PIX_FMT_RGB555;
case IMGFMT_BGR16: return V4L2_PIX_FMT_RGB565;
case IMGFMT_RGB24: return V4L2_PIX_FMT_RGB24;
case IMGFMT_RGB32: return V4L2_PIX_FMT_RGB32;
case IMGFMT_BGR24: return V4L2_PIX_FMT_BGR24;
case IMGFMT_BGR32: return V4L2_PIX_FMT_BGR32;
case IMGFMT_Y800: return V4L2_PIX_FMT_GREY;
case IMGFMT_IF09: return V4L2_PIX_FMT_YUV410;
case IMGFMT_I420: return V4L2_PIX_FMT_YUV420;
case IMGFMT_YUY2: return V4L2_PIX_FMT_YUYV;
case IMGFMT_YV12: return V4L2_PIX_FMT_YVU420;
case IMGFMT_UYVY: return V4L2_PIX_FMT_UYVY;
}
return fcc;
}
这个函数的作用是将mplayer的fourcc格式转换成v4l2的象素格式,至于什么事fourcc,以前没有接触过,所以,到网上grep了一下,找到这篇文章:
http://htm.winsteps.net/program/6546.htm
其中说到:
FOURCC全称Four-Character Codes,是在编程中非常常用的东西,一般用作标示符。比如wav、avi等RIFF文件的标签头标示,Quake 3的模型文件.md3中也大量存在等于“IDP3”的FOURCC。它是一个32位的标示符,其实就是
typedef unsigned long FOURCC
用宏生成FOURCC
FOURCC是由四个字符拼接而成的。生成FOURCC的传统方法是:
// 来自mmsystem.h#define MAKEFOURCC(ch0, ch1, ch2, ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
这种方法很简单直观,而且以下代码:
switch (val){case MAKEFOURCC('f', 'm', 't', ' '): ... break;case MAKEFOURCC('d', 'a', 't', 'a'): ... break; ...}
能顺利通过编译,因为宏能在编译期生成常量,符合case的条件。
/*******************************/
FourCC
FourCC代表四字符代码(four character code),是一种独立标示视频数据流格式的四字符代码。视频播放软件通过查询FourCC代码并且寻找与FourCC代码相关联的视频解码器来播放特定的视频流。比如: DIV3 = DivX Low-Motion, DIV4 = DivX Fast-Motion, DIVX = DivX4.
http://bbs4.xilu.com/cgi-bin/bbs/view?forum=fbrmfbrm&message=1270
/*******************************/
先记录下来,等以后看代码多了,我想就能够理解这个东西到底使用来做什么得了。。。






















http://htm.winsteps.net/program/6546.htm
其中说到:
FOURCC全称Four-Character Codes,是在编程中非常常用的东西,一般用作标示符。比如wav、avi等RIFF文件的标签头标示,Quake 3的模型文件.md3中也大量存在等于“IDP3”的FOURCC。它是一个32位的标示符,其实就是
typedef unsigned long FOURCC
用宏生成FOURCC
FOURCC是由四个字符拼接而成的。生成FOURCC的传统方法是:
// 来自mmsystem.h#define MAKEFOURCC(ch0, ch1, ch2, ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
这种方法很简单直观,而且以下代码:
switch (val){case MAKEFOURCC('f', 'm', 't', ' '): ... break;case MAKEFOURCC('d', 'a', 't', 'a'): ... break; ...}
能顺利通过编译,因为宏能在编译期生成常量,符合case的条件。
/*******************************/
FourCC
FourCC代表四字符代码(four character code),是一种独立标示视频数据流格式的四字符代码。视频播放软件通过查询FourCC代码并且寻找与FourCC代码相关联的视频解码器来播放特定的视频流。比如: DIV3 = DivX Low-Motion, DIV4 = DivX Fast-Motion, DIVX = DivX4.
http://bbs4.xilu.com/cgi-bin/bbs/view?forum=fbrmfbrm&message=1270
/*******************************/
先记录下来,等以后看代码多了,我想就能够理解这个东西到底使用来做什么得了。。。