mplayer中的fourcc
来源:互联网 发布:剑三女王捏脸数据 编辑:程序博客网 时间:2024/06/07 18:10
今天再看mplayer的代码时,其中有这么一段代码:
这个函数的作用是将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
/*******************************/
先记录下来,等以后看代码多了,我想就能够理解这个东西到底使用来做什么得了。。。
/*
** 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;
}
** 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;
}
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
/*******************************/
先记录下来,等以后看代码多了,我想就能够理解这个东西到底使用来做什么得了。。。
- mplayer中的fourcc
- FourCC
- fourcc
- FOURCC
- fourcc
- fourcc
- fourcc的涵义以及在C++编程中的实现
- fourcc的涵义以及在C++编程中的实现
- 什么是FOURCC
- FOURCC介绍
- 什么是FOURCC
- Mplayer
- MPlayer
- MPlayer
- mplayer
- mplayer
- Mplayer
- mplayer
- asp.net 中使用datagrid编辑数据,比较两列的大小
- asp.net客户端传参的小结
- web2.0神话没有破灭,这一切才刚刚开始
- linux 下取得网络地址和掩码的代码
- 面向对象数据库db4o,值得关注一下
- mplayer中的fourcc
- 深圳ADSL的VCI/VPI
- 如何用javascript控制上传文件的大小
- 水晶报表分页并自动插入空白行
- 函数练习题
- [SQL]得到一年中所有为星期二的日期语句
- MISTP/MSTP
- SQL Server安装文件挂起错误解决办法!
- 关于jBPM中scheduler的迷惑