1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_BASE_VIDEO_TYPES_H_
6 #define MEDIA_BASE_VIDEO_TYPES_H_
10 #include "build/build_config.h"
11 #include "media/base/media_export.h"
15 // Pixel formats roughly based on FOURCC labels, see:
16 // http://www.fourcc.org/rgb.php and http://www.fourcc.org/yuv.php
17 // Logged to UMA, so never reuse values. Leave gaps if necessary.
18 // Ordered as planar, semi-planar, YUV-packed, and RGB formats.
19 enum VideoPixelFormat
{
20 PIXEL_FORMAT_UNKNOWN
= 0, // Unknown or unspecified format value.
22 1, // 12bpp YUV planar 1x1 Y, 2x2 UV samples, a.k.a. YU12.
23 PIXEL_FORMAT_YV12
= 2, // 12bpp YVU planar 1x1 Y, 2x2 VU samples.
24 PIXEL_FORMAT_YV16
= 3, // 16bpp YVU planar 1x1 Y, 2x1 VU samples.
25 PIXEL_FORMAT_YV12A
= 4, // 20bpp YUVA planar 1x1 Y, 2x2 VU, 1x1 A samples.
26 PIXEL_FORMAT_YV24
= 5, // 24bpp YUV planar, no subsampling.
28 6, // 12bpp with Y plane followed by a 2x2 interleaved UV plane.
30 7, // 12bpp with Y plane followed by a 2x2 interleaved VU plane.
32 8, // 16bpp interleaved 2x1 U, 1x1 Y, 2x1 V, 1x1 Y samples.
34 9, // 16bpp interleaved 1x1 Y, 2x1 U, 1x1 Y, 2x1 V samples.
35 PIXEL_FORMAT_ARGB
= 10, // 32bpp ARGB, 1 plane.
36 PIXEL_FORMAT_XRGB
= 11, // 24bpp XRGB, 1 plane.
37 PIXEL_FORMAT_RGB24
= 12, // 24bpp BGR, 1 plane.
38 PIXEL_FORMAT_RGB32
= 13, // 32bpp BGRA, 1 plane.
39 PIXEL_FORMAT_MJPEG
= 14, // MJPEG compressed.
40 // MediaTek proprietary format. MT21 is similar to NV21 except the memory
41 // layout and pixel layout (swizzles). 12bpp with Y plane followed by a 2x2
42 // interleaved VU plane. Each image contains two buffers -- Y plane and VU
43 // plane. Two planes can be non-contiguous in memory. The starting addresses
44 // of Y plane and VU plane are 4KB alignment.
45 // Suppose image dimension is (width, height). For both Y plane and VU plane:
46 // Row pitch = ((width+15)/16) * 16.
47 // Plane size = Row pitch * (((height+31)/32)*32)
48 PIXEL_FORMAT_MT21
= 15,
49 // Please update UMA histogram enumeration when adding new formats here.
51 PIXEL_FORMAT_MT21
, // Must always be equal to largest entry logged.
54 // Color space or color range used for the pixels.
55 // Logged to UMA, so never reuse values. Leave gaps if necessary.
57 COLOR_SPACE_UNSPECIFIED
= 0, // In general this is Rec601.
58 // The JPEG color space is the combination of Rec.601 and full range colors
59 // (aka pc range colors).
61 COLOR_SPACE_HD_REC709
= 2, // Rec709 "HD" color space.
62 COLOR_SPACE_SD_REC601
= 3, // Rec601 "SD" color space.
63 COLOR_SPACE_MAX
= COLOR_SPACE_SD_REC601
,
66 // Returns the name of a Format as a string.
67 MEDIA_EXPORT
std::string
VideoPixelFormatToString(VideoPixelFormat format
);
69 // Returns true if |format| is a YUV format with multiple planes.
70 MEDIA_EXPORT
bool IsYuvPlanar(VideoPixelFormat format
);
74 #endif // MEDIA_BASE_VIDEO_TYPES_H_