Four Character Code
Four Character Code
Four Character Code简称FourCC,是由4个单字节字符构成的代码。
常被用于定义一些音频格式、图像或像素格式。
Apple 平台
在MacTypes.h头文件中,有以下typedef:
1 | |
可以看到,OSType、FourCharCode、UInt32三个类型是相同的。
在CoreAudio中,有这样一个typedef:
1 | |
很明显,AudioFormatID与FourCharCode是等同的。
另外,也定义了一些类型为AudioFormatID的枚举值,比如:
kAudioFormatLinearPCM = 'lpcm'kAudioFormatMPEG4AAC = 'aac 'kAudioFormatMPEGLayer3 = '.mp3'
可以看出,它们的类型也就是FourCharCode。
在CoreVideo中,有一些以kCVPixelFormatType_开头的枚举值,比如:
kCVPixelFormatType_32BGRA = 'BGRA'kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v'kCVPixelFormatType_420YpCbCr8BiPlanarFullRange = '420f'
它们的类型为OSType,也即FourCharCode。
为了将这些FourCC转换为C字符串('BGRA'转换为"BGRA"),可以使用这样的宏:
1 | |
Linux 平台
在V4L2中,具体是在videodev2.h头文件中,定义了一些以V4L2_PIX_FMT_开头的宏,比如:
V4L2_PIX_FMT_BGR32V4L2_PIX_FMT_YUV420V4L2_PIX_FMT_NV12
这些宏都使用了v4l2_fourcc这个宏,其定义如下:
1 | |

这些FourCC的形式,与Apple中的形式,是不相同的:一种是((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)),而另一种是'abcd'。
为了将V4L2中的FourCC转换为C字符串(v4l2_fourcc('B', 'G', 'R', 'A')转换为"BGRA"),可以使用这样的宏:
1 | |
Four Character Code
https://daniate.github.io/2018/06/22/Four Character Code/