Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6378532
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16634
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: 嵌入式

2014-11-21 11:18:35

YV12和I420的区别
一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。
在采集到RGB24数据后,需要对这个格式的数据进行第一次压缩。即将图像的颜色空间由RGB2YUV。因为,X264在进行编码的时候需要标准的YUV(4:2:0)。但是这里需要注意的是,虽然YV12也是(4:2:0),但是YV12和I420的却是不同的,在存储空间上面有些区别。如下:
YV12 : 亮度(行×列) + V(行×列/4) + U(行×列/4)
I420 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
可以看出,YV12和I420基本上是一样的,就是UV的顺序不同。

yuv420p就是I420格式,使用极其广泛,它的示意图:



点击(此处)折叠或打开

  1. #ifndef AVUTIL_PIXFMT_H
  2. #define AVUTIL_PIXFMT_H
  3.   
  4. /**
  5.  * @file
  6.  * pixel format definitions
  7.  *
  8.  */
  9.   
  10. #include "libavutil/avconfig.h"
  11.   
  12. /**
  13.  * Pixel format.
  14.  *
  15.  * @note
  16.  * PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA
  17.  * color is put together as:
  18.  * (A << 24) | (R << 16) | (G << 8) | B
  19.  * This is stored as BGRA on little-endian CPU architectures and ARGB on
  20.  * big-endian CPUs.
  21.  *
  22.  * @par
  23.  * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized
  24.  * image data is stored in AVFrame.data[0]. The palette is transported in
  25.  * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is
  26.  * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is
  27.  * also endian-specific). Note also that the individual RGB palette
  28.  * components stored in AVFrame.data[1] should be in the range 0..255.
  29.  * This is important as many custom PAL8 video codecs that were designed
  30.  * to run on the IBM VGA graphics adapter use 6-bit palette components.
  31.  *
  32.  * @par
  33.  * For all the 8bit per pixel formats, an RGB32 palette is in data[1] like
  34.  * for pal8. This palette is filled in automatically by the function
  35.  * allocating the picture.
  36.  *
  37.  * @note
  38.  * make sure that all newly added big endian formats have pix_fmt&1==1
  39.  * and that all newly added little endian formats have pix_fmt&1==0
  40.  * this allows simpler detection of big vs little endian.
  41.  */
  42. enum PixelFormat {
  43.     PIX_FMT_NONE= -1,
  44.     PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  45.     PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
  46.     PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB...
  47.     PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
  48.     PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
  49.     PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
  50.     PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
  51.     PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
  52.     PIX_FMT_GRAY8, ///< Y , 8bpp
  53.     PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
  54.     PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
  55.     PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette
  56.     PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range
  57.     PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range
  58.     PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range
  59.     PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing
  60.     PIX_FMT_XVMC_MPEG2_IDCT,
  61.     PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
  62.     PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
  63.     PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
  64.     PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
  65.     PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
  66.     PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
  67.     PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
  68.     PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
  69.     PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
  70.     PIX_FMT_NV21, ///< as above, but U and V bytes are swapped
  71.   
  72.     PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
  73.     PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
  74.     PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
  75.     PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
  76.   
  77.     PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian
  78.     PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian
  79.     PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
  80.     PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range
  81.     PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
  82.     PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  83.     PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  84.     PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  85.     PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  86.     PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  87.     PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
  88.     PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
  89.   
  90.     PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
  91.     PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
  92.     PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0
  93.     PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0
  94.   
  95.     PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
  96.     PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
  97.     PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1
  98.     PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1
  99.   
  100.     PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers
  101.     PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers
  102.     PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  103.   
  104.     PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
  105.     PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
  106.     PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
  107.     PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
  108.     PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
  109.     PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
  110.     PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
  111.     PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
  112.   
  113.     PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
  114.     PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
  115.     PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1
  116.     PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1
  117.     PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha
  118.     PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
  119.     PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
  120.   
  121.     //the following 10 formats have the disadvantage of needing 1 format for each bit depth, thus
  122.     //If you want to support multiple bit depths, then using PIX_FMT_YUV420P16* with the bpp stored seperately
  123.     //is better
  124.     PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
  125.     PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
  126.     PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
  127.     PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
  128.     PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
  129.     PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
  130.     PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
  131.     PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
  132.     PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
  133.     PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
  134.     PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
  135.     PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
  136.     PIX_FMT_VDA_VLD, ///< hardware decoding through VDA
  137.   
  138. #ifdef AV_PIX_FMT_ABI_GIT_MASTER
  139.     PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
  140.     PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
  141.     PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
  142.     PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
  143. #endif
  144.     PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp
  145.     PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big endian
  146.     PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little endian
  147.     PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big endian
  148.     PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little endian
  149.     PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big endian
  150.     PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little endian
  151.   
  152. #ifndef AV_PIX_FMT_ABI_GIT_MASTER
  153.     PIX_FMT_RGBA64BE=0x123, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
  154.     PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
  155.     PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
  156.     PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
  157. #endif
  158.     PIX_FMT_0RGB=0x123+4, ///< packed RGB 8:8:8, 32bpp, 0RGB0RGB...
  159.     PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0...
  160.     PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR...
  161.     PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0...
  162.     PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
  163.   
  164.     PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
  165. };
  166.   
  167. #define PIX_FMT_Y400A PIX_FMT_GRAY8A
  168. #define PIX_FMT_GBR24P PIX_FMT_GBRP
  169.   
  170. #if AV_HAVE_BIGENDIAN
  171. # define PIX_FMT_NE(be, le) PIX_FMT_##be
  172. #else
  173. # define PIX_FMT_NE(be, le) PIX_FMT_##le
  174. #endif
  175.   
  176. #define PIX_FMT_RGB32 PIX_FMT_NE(ARGB, BGRA)
  177. #define PIX_FMT_RGB32_1 PIX_FMT_NE(RGBA, ABGR)
  178. #define PIX_FMT_BGR32 PIX_FMT_NE(ABGR, RGBA)
  179. #define PIX_FMT_BGR32_1 PIX_FMT_NE(BGRA, ARGB)
  180. #define PIX_FMT_0RGB32 PIX_FMT_NE(0RGB, BGR0)
  181. #define PIX_FMT_0BGR32 PIX_FMT_NE(0BGR, RGB0)
  182.   
  183. #define PIX_FMT_GRAY16 PIX_FMT_NE(GRAY16BE, GRAY16LE)
  184. #define PIX_FMT_RGB48 PIX_FMT_NE(RGB48BE, RGB48LE)
  185. #define PIX_FMT_RGB565 PIX_FMT_NE(RGB565BE, RGB565LE)
  186. #define PIX_FMT_RGB555 PIX_FMT_NE(RGB555BE, RGB555LE)
  187. #define PIX_FMT_RGB444 PIX_FMT_NE(RGB444BE, RGB444LE)
  188. #define PIX_FMT_BGR48 PIX_FMT_NE(BGR48BE, BGR48LE)
  189. #define PIX_FMT_BGR565 PIX_FMT_NE(BGR565BE, BGR565LE)
  190. #define PIX_FMT_BGR555 PIX_FMT_NE(BGR555BE, BGR555LE)
  191. #define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE)
  192.   
  193. #define PIX_FMT_YUV420P9 PIX_FMT_NE(YUV420P9BE , YUV420P9LE)
  194. #define PIX_FMT_YUV422P9 PIX_FMT_NE(YUV422P9BE , YUV422P9LE)
  195. #define PIX_FMT_YUV444P9 PIX_FMT_NE(YUV444P9BE , YUV444P9LE)
  196. #define PIX_FMT_YUV420P10 PIX_FMT_NE(YUV420P10BE, YUV420P10LE)
  197. #define PIX_FMT_YUV422P10 PIX_FMT_NE(YUV422P10BE, YUV422P10LE)
  198. #define PIX_FMT_YUV444P10 PIX_FMT_NE(YUV444P10BE, YUV444P10LE)
  199. #define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
  200. #define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE)
  201. #define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE)
  202.   
  203. #define PIX_FMT_RGBA64 PIX_FMT_NE(RGBA64BE, RGBA64LE)
  204. #define PIX_FMT_BGRA64 PIX_FMT_NE(BGRA64BE, BGRA64LE)
  205. #define PIX_FMT_GBRP9 PIX_FMT_NE(GBRP9BE , GBRP9LE)
  206. #define PIX_FMT_GBRP10 PIX_FMT_NE(GBRP10BE, GBRP10LE)
  207. #define PIX_FMT_GBRP16 PIX_FMT_NE(GBRP16BE, GBRP16LE)
  208.   
  209. #endif /* AVUTIL_PIXFMT_H */


参考:
1,http://blog.csdn.net/leixiaohua1020/article/details/12234821
2,http://blog.csdn.net/leixiaohua1020/article/details/14215391

阅读(29424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~