Commit abf4f9a5 authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/base/VideoPixelFormat: Add XBGR and ABGR

VideoPixelFormat doesn't have values for XBGR and ABGR, even though it has ones
for ARGB, XRGB, RGB and RGBA. This adds XBGR and ABGR so that all sorts of RGBA
formats are in VideoPixelFormat.
They are not used on Chrome stack. On the other hand, in ARC++, Android
container can pass XBGR and ABGR formatted buffer. Those values are thus needed.

BUG=894381
TEST=./media_unittests on Linux

Change-Id: I03fda9a9afa9ae1d5dfa7af873898665f9ac2d9d
Reviewed-on: https://chromium-review.googlesource.com/c/1302933Reviewed-by: default avatarFredrik Hubinette <hubbe@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#603414}
parent 89cabcfa
...@@ -114,6 +114,8 @@ bool RequiresEvenSizeAllocation(VideoPixelFormat format) { ...@@ -114,6 +114,8 @@ bool RequiresEvenSizeAllocation(VideoPixelFormat format) {
case PIXEL_FORMAT_RGB24: case PIXEL_FORMAT_RGB24:
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
return false; return false;
case PIXEL_FORMAT_NV12: case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21: case PIXEL_FORMAT_NV21:
...@@ -169,7 +171,7 @@ bool VideoFrame::IsValidConfig(VideoPixelFormat format, ...@@ -169,7 +171,7 @@ bool VideoFrame::IsValidConfig(VideoPixelFormat format,
return true; return true;
// Make sure new formats are properly accounted for in the method. // Make sure new formats are properly accounted for in the method.
static_assert(PIXEL_FORMAT_MAX == 26, static_assert(PIXEL_FORMAT_MAX == 28,
"Added pixel format, please review IsValidConfig()"); "Added pixel format, please review IsValidConfig()");
if (format == PIXEL_FORMAT_UNKNOWN) { if (format == PIXEL_FORMAT_UNKNOWN) {
...@@ -667,6 +669,8 @@ int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { ...@@ -667,6 +669,8 @@ int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) {
case PIXEL_FORMAT_ARGB: case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_XRGB: case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
return 4; return 4;
case PIXEL_FORMAT_RGB24: case PIXEL_FORMAT_RGB24:
return 3; return 3;
...@@ -1187,6 +1191,8 @@ gfx::Size VideoFrame::SampleSize(VideoPixelFormat format, size_t plane) { ...@@ -1187,6 +1191,8 @@ gfx::Size VideoFrame::SampleSize(VideoPixelFormat format, size_t plane) {
case PIXEL_FORMAT_RGB24: case PIXEL_FORMAT_RGB24:
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
break; break;
} }
} }
......
...@@ -50,6 +50,8 @@ size_t VideoFrameLayout::NumPlanes(VideoPixelFormat format) { ...@@ -50,6 +50,8 @@ size_t VideoFrameLayout::NumPlanes(VideoPixelFormat format) {
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
return 1; return 1;
case PIXEL_FORMAT_NV12: case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21: case PIXEL_FORMAT_NV21:
......
...@@ -627,6 +627,8 @@ TEST(VideoFrame, AllocationSize_OddSize) { ...@@ -627,6 +627,8 @@ TEST(VideoFrame, AllocationSize_OddSize) {
case PIXEL_FORMAT_XRGB: case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_I420A: case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
EXPECT_EQ(60u, VideoFrame::AllocationSize(format, size)) EXPECT_EQ(60u, VideoFrame::AllocationSize(format, size))
<< VideoPixelFormatToString(format); << VideoPixelFormatToString(format);
break; break;
......
...@@ -63,6 +63,10 @@ std::string VideoPixelFormatToString(VideoPixelFormat format) { ...@@ -63,6 +63,10 @@ std::string VideoPixelFormatToString(VideoPixelFormat format) {
return "PIXEL_FORMAT_YUV444P12"; return "PIXEL_FORMAT_YUV444P12";
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
return "PIXEL_FORMAT_Y16"; return "PIXEL_FORMAT_Y16";
case PIXEL_FORMAT_ABGR:
return "PIXEL_FORMAT_ABGR";
case PIXEL_FORMAT_XBGR:
return "PIXEL_FORMAT_XBGR";
} }
NOTREACHED() << "Invalid VideoPixelFormat provided: " << format; NOTREACHED() << "Invalid VideoPixelFormat provided: " << format;
return ""; return "";
...@@ -114,6 +118,8 @@ bool IsYuvPlanar(VideoPixelFormat format) { ...@@ -114,6 +118,8 @@ bool IsYuvPlanar(VideoPixelFormat format) {
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
return false; return false;
} }
return false; return false;
...@@ -144,10 +150,12 @@ bool IsOpaque(VideoPixelFormat format) { ...@@ -144,10 +150,12 @@ bool IsOpaque(VideoPixelFormat format) {
case PIXEL_FORMAT_YUV422P12: case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12: case PIXEL_FORMAT_YUV444P12:
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_XBGR:
return true; return true;
case PIXEL_FORMAT_I420A: case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_ARGB: case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_ABGR:
break; break;
} }
return false; return false;
...@@ -173,6 +181,8 @@ size_t BitDepth(VideoPixelFormat format) { ...@@ -173,6 +181,8 @@ size_t BitDepth(VideoPixelFormat format) {
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_MT21: case PIXEL_FORMAT_MT21:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
return 8; return 8;
case PIXEL_FORMAT_YUV420P9: case PIXEL_FORMAT_YUV420P9:
case PIXEL_FORMAT_YUV422P9: case PIXEL_FORMAT_YUV422P9:
......
...@@ -68,9 +68,12 @@ enum VideoPixelFormat { ...@@ -68,9 +68,12 @@ enum VideoPixelFormat {
/* PIXEL_FORMAT_Y8 = 25, Deprecated */ /* PIXEL_FORMAT_Y8 = 25, Deprecated */
PIXEL_FORMAT_Y16 = 26, // single 16bpp plane. PIXEL_FORMAT_Y16 = 26, // single 16bpp plane.
PIXEL_FORMAT_ABGR = 27, // 32bpp RGBA, 1 plane.
PIXEL_FORMAT_XBGR = 28, // 24bpp RGB, 1 plane.
// Please update UMA histogram enumeration when adding new formats here. // Please update UMA histogram enumeration when adding new formats here.
PIXEL_FORMAT_MAX = PIXEL_FORMAT_MAX =
PIXEL_FORMAT_Y16, // Must always be equal to largest entry logged. PIXEL_FORMAT_XBGR, // Must always be equal to largest entry logged.
}; };
// Color space or color range used for the pixels. // Color space or color range used for the pixels.
......
...@@ -37,7 +37,9 @@ enum VideoCapturePixelFormat { ...@@ -37,7 +37,9 @@ enum VideoCapturePixelFormat {
YUV420P12, YUV420P12,
YUV422P12, YUV422P12,
YUV444P12, YUV444P12,
Y16 Y16,
ABGR,
XBGR,
}; };
enum ResolutionChangePolicy { enum ResolutionChangePolicy {
...@@ -305,4 +307,3 @@ union VideoBufferHandle { ...@@ -305,4 +307,3 @@ union VideoBufferHandle {
SharedMemoryViaRawFileDescriptor shared_memory_via_raw_file_descriptor; SharedMemoryViaRawFileDescriptor shared_memory_via_raw_file_descriptor;
MailboxBufferHandleSet mailbox_handles; MailboxBufferHandleSet mailbox_handles;
}; };
...@@ -139,6 +139,10 @@ EnumTraits<media::mojom::VideoCapturePixelFormat, ...@@ -139,6 +139,10 @@ EnumTraits<media::mojom::VideoCapturePixelFormat,
return media::mojom::VideoCapturePixelFormat::YUV444P12; return media::mojom::VideoCapturePixelFormat::YUV444P12;
case media::VideoPixelFormat::PIXEL_FORMAT_Y16: case media::VideoPixelFormat::PIXEL_FORMAT_Y16:
return media::mojom::VideoCapturePixelFormat::Y16; return media::mojom::VideoCapturePixelFormat::Y16;
case media::VideoPixelFormat::PIXEL_FORMAT_ABGR:
return media::mojom::VideoCapturePixelFormat::ABGR;
case media::VideoPixelFormat::PIXEL_FORMAT_XBGR:
return media::mojom::VideoCapturePixelFormat::XBGR;
} }
NOTREACHED(); NOTREACHED();
return media::mojom::VideoCapturePixelFormat::I420; return media::mojom::VideoCapturePixelFormat::I420;
...@@ -228,6 +232,12 @@ bool EnumTraits<media::mojom::VideoCapturePixelFormat, ...@@ -228,6 +232,12 @@ bool EnumTraits<media::mojom::VideoCapturePixelFormat,
case media::mojom::VideoCapturePixelFormat::Y16: case media::mojom::VideoCapturePixelFormat::Y16:
*output = media::PIXEL_FORMAT_Y16; *output = media::PIXEL_FORMAT_Y16;
return true; return true;
case media::mojom::VideoCapturePixelFormat::ABGR:
*output = media::PIXEL_FORMAT_ABGR;
return true;
case media::mojom::VideoCapturePixelFormat::XBGR:
*output = media::PIXEL_FORMAT_XBGR;
return true;
} }
NOTREACHED(); NOTREACHED();
return false; return false;
......
...@@ -221,6 +221,8 @@ message VideoDecoderConfig { ...@@ -221,6 +221,8 @@ message VideoDecoderConfig {
PIXEL_FORMAT_YUV444P12 = 24; PIXEL_FORMAT_YUV444P12 = 24;
PIXEL_FORMAT_Y8 = 25 [deprecated = true]; PIXEL_FORMAT_Y8 = 25 [deprecated = true];
PIXEL_FORMAT_Y16 = 26; PIXEL_FORMAT_Y16 = 26;
PIXEL_FORMAT_ABGR = 27;
PIXEL_FORMAT_XBGR = 28;
}; };
// Proto version of media::ColorSpace. // Proto version of media::ColorSpace.
......
...@@ -362,7 +362,9 @@ base::Optional<VideoPixelFormat> ToMediaVideoPixelFormat( ...@@ -362,7 +362,9 @@ base::Optional<VideoPixelFormat> ToMediaVideoPixelFormat(
// PIXEL_FORMAT_Y8 is deprecated . // PIXEL_FORMAT_Y8 is deprecated .
case pb::VideoDecoderConfig_Format_PIXEL_FORMAT_Y8: case pb::VideoDecoderConfig_Format_PIXEL_FORMAT_Y8:
return base::nullopt; return base::nullopt;
CASE_RETURN_OTHER(PIXEL_FORMAT_Y16); CASE_RETURN_OTHER(PIXEL_FORMAT_Y16);
CASE_RETURN_OTHER(PIXEL_FORMAT_ABGR);
CASE_RETURN_OTHER(PIXEL_FORMAT_XBGR);
} }
return base::nullopt; // Not a 'default' to ensure compile-time checks. return base::nullopt; // Not a 'default' to ensure compile-time checks.
} }
...@@ -398,6 +400,8 @@ base::Optional<pb::VideoDecoderConfig::Format> ToProtoVideoDecoderConfigFormat( ...@@ -398,6 +400,8 @@ base::Optional<pb::VideoDecoderConfig::Format> ToProtoVideoDecoderConfigFormat(
CASE_RETURN_OTHER(PIXEL_FORMAT_YUV422P12); CASE_RETURN_OTHER(PIXEL_FORMAT_YUV422P12);
CASE_RETURN_OTHER(PIXEL_FORMAT_YUV444P12); CASE_RETURN_OTHER(PIXEL_FORMAT_YUV444P12);
CASE_RETURN_OTHER(PIXEL_FORMAT_Y16); CASE_RETURN_OTHER(PIXEL_FORMAT_Y16);
CASE_RETURN_OTHER(PIXEL_FORMAT_ABGR);
CASE_RETURN_OTHER(PIXEL_FORMAT_XBGR);
} }
return base::nullopt; // Not a 'default' to ensure compile-time checks. return base::nullopt; // Not a 'default' to ensure compile-time checks.
} }
......
...@@ -908,6 +908,8 @@ void PaintCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( ...@@ -908,6 +908,8 @@ void PaintCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(
case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_RGB32:
case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_MT21: case PIXEL_FORMAT_MT21:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
case PIXEL_FORMAT_UNKNOWN: case PIXEL_FORMAT_UNKNOWN:
NOTREACHED() << "Only YUV formats and Y16 are supported, got: " NOTREACHED() << "Only YUV formats and Y16 are supported, got: "
<< media::VideoPixelFormatToString(video_frame->format()); << media::VideoPixelFormatToString(video_frame->format());
......
...@@ -112,6 +112,8 @@ VideoFrameResourceType ExternalResourceTypeForHardwarePlanes( ...@@ -112,6 +112,8 @@ VideoFrameResourceType ExternalResourceTypeForHardwarePlanes(
case PIXEL_FORMAT_YUV422P12: case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12: case PIXEL_FORMAT_YUV444P12:
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
case PIXEL_FORMAT_UNKNOWN: case PIXEL_FORMAT_UNKNOWN:
break; break;
} }
......
...@@ -680,6 +680,8 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHardwareFrame( ...@@ -680,6 +680,8 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHardwareFrame(
case PIXEL_FORMAT_YUV422P12: case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12: case PIXEL_FORMAT_YUV444P12:
case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
case PIXEL_FORMAT_UNKNOWN: case PIXEL_FORMAT_UNKNOWN:
if (is_software_backed_video_frame) { if (is_software_backed_video_frame) {
UMA_HISTOGRAM_ENUMERATION( UMA_HISTOGRAM_ENUMERATION(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment