Commit fcb6eb75 authored by Sasha McIntosh's avatar Sasha McIntosh Committed by Commit Bot

gpu/mac,win: Partial revert "Deprecate PIXEL_FORMAT_UYVY and remove its dependencies."

This partially reverts commit 8af6f946.

Relands PIXEL_FORMAT_UYVY and resets the optimal pixel format in
AVFoundation to UYVY.

This fixes the link bug in which camera capture with resolution lower
than 720p appears to have a dropped framerate on Mac.

Verified fix by visiting
https://webrtc.github.io/samples/src/content/devices/input-output/ and
selecting an attached usb camera.

Bug: 1035077,1027325
Change-Id: I7c3810c3382b4f4f8290210eec3ca5f8c9c4343a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2068819Reviewed-by: default avatarEmily Stark <estark@chromium.org>
Reviewed-by: default avatarChrome Cunningham <chcunningham@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarMiguel Casas <mcasas@chromium.org>
Reviewed-by: default avatarDaniele Castagna <dcastagna@chromium.org>
Commit-Queue: Sasha McIntosh <sashamcintosh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#751129}
parent 1fb4cc85
......@@ -131,6 +131,7 @@ gfx::Size VideoFrame::SampleSize(VideoPixelFormat format, size_t plane) {
case PIXEL_FORMAT_P016LE:
return gfx::Size(2, 2);
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_UNKNOWN:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_ARGB:
......@@ -193,6 +194,7 @@ static bool RequiresEvenSizeAllocation(VideoPixelFormat format) {
case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12:
case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_P016LE:
return true;
case PIXEL_FORMAT_UNKNOWN:
......@@ -863,6 +865,7 @@ int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) {
case PIXEL_FORMAT_RGB24:
return 3;
case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_YUV420P9:
case PIXEL_FORMAT_YUV422P9:
......
......@@ -43,6 +43,7 @@ std::vector<ColorPlaneLayout> PlanesFromStrides(
// static
size_t VideoFrameLayout::NumPlanes(VideoPixelFormat format) {
switch (format) {
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_BGRA:
......
......@@ -603,6 +603,7 @@ TEST(VideoFrame, AllocationSize_OddSize) {
EXPECT_EQ(72u, VideoFrame::AllocationSize(format, size))
<< VideoPixelFormatToString(format);
break;
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_I422:
EXPECT_EQ(48u, VideoFrame::AllocationSize(format, size))
......
......@@ -27,6 +27,8 @@ std::string VideoPixelFormatToString(VideoPixelFormat format) {
return "PIXEL_FORMAT_NV12";
case PIXEL_FORMAT_NV21:
return "PIXEL_FORMAT_NV21";
case PIXEL_FORMAT_UYVY:
return "PIXEL_FORMAT_UYVY";
case PIXEL_FORMAT_YUY2:
return "PIXEL_FORMAT_YUY2";
case PIXEL_FORMAT_ARGB:
......@@ -112,6 +114,7 @@ bool IsYuvPlanar(VideoPixelFormat format) {
return true;
case PIXEL_FORMAT_UNKNOWN:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_XRGB:
......@@ -138,6 +141,7 @@ bool IsOpaque(VideoPixelFormat format) {
case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_RGB24:
case PIXEL_FORMAT_MJPEG:
......@@ -178,6 +182,7 @@ size_t BitDepth(VideoPixelFormat format) {
case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_RGB24:
......
......@@ -37,7 +37,8 @@ enum VideoPixelFormat {
6, // 12bpp with Y plane followed by a 2x2 interleaved UV plane.
PIXEL_FORMAT_NV21 =
7, // 12bpp with Y plane followed by a 2x2 interleaved VU plane.
/* PIXEL_FORMAT_UYVY = 8, Deprecated */
PIXEL_FORMAT_UYVY =
8, // 16bpp interleaved 2x1 U, 1x1 Y, 2x1 V, 1x1 Y samples.
PIXEL_FORMAT_YUY2 =
9, // 16bpp interleaved 1x1 Y, 2x1 U, 1x1 Y, 2x1 V samples.
PIXEL_FORMAT_ARGB = 10, // 32bpp BGRA (byte-order), 1 plane.
......
......@@ -21,6 +21,7 @@ enum VideoCapturePixelFormat {
I444,
NV12,
NV21,
UYVY,
YUY2,
ARGB,
XRGB,
......
......@@ -103,6 +103,8 @@ EnumTraits<media::mojom::VideoCapturePixelFormat,
return media::mojom::VideoCapturePixelFormat::NV12;
case media::VideoPixelFormat::PIXEL_FORMAT_NV21:
return media::mojom::VideoCapturePixelFormat::NV21;
case media::VideoPixelFormat::PIXEL_FORMAT_UYVY:
return media::mojom::VideoCapturePixelFormat::UYVY;
case media::VideoPixelFormat::PIXEL_FORMAT_YUY2:
return media::mojom::VideoCapturePixelFormat::YUY2;
case media::VideoPixelFormat::PIXEL_FORMAT_ARGB:
......@@ -180,6 +182,9 @@ bool EnumTraits<media::mojom::VideoCapturePixelFormat,
case media::mojom::VideoCapturePixelFormat::NV21:
*output = media::PIXEL_FORMAT_NV21;
return true;
case media::mojom::VideoCapturePixelFormat::UYVY:
*output = media::PIXEL_FORMAT_UYVY;
return true;
case media::mojom::VideoCapturePixelFormat::YUY2:
*output = media::PIXEL_FORMAT_YUY2;
return true;
......
......@@ -132,6 +132,7 @@ VideoCaptureFormat FindClosestSupportedFormat(
gfx::ColorSpace GetDefaultColorSpace(VideoPixelFormat format) {
switch (format) {
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YV12:
case PIXEL_FORMAT_I420:
case PIXEL_FORMAT_I422:
......
......@@ -152,6 +152,8 @@ void MaybeWriteUma(int number_of_devices, int number_of_suspended_devices) {
// formats.
media::VideoPixelFormat FourCCToChromiumPixelFormat(FourCharCode code) {
switch (code) {
case kCVPixelFormatType_422YpCbCr8:
return media::PIXEL_FORMAT_UYVY;
case kCMPixelFormat_422YpCbCr8_yuvs:
return media::PIXEL_FORMAT_YUY2;
case kCMVideoCodecType_JPEG_OpenDML:
......@@ -348,7 +350,7 @@ void ExtractBaseAddressAndLength(char** base_address,
_frameHeight = height;
_frameRate = frameRate;
FourCharCode best_fourcc = kCMPixelFormat_422YpCbCr8_yuvs;
FourCharCode best_fourcc = kCMPixelFormat_422YpCbCr8;
const bool prefer_mjpeg =
width > kMjpegWidthThreshold || height > kMjpegHeightThreshold;
for (AVCaptureDeviceFormat* format in [_captureDevice formats]) {
......
......@@ -260,6 +260,9 @@ HRESULT DeckLinkCaptureDelegate::VideoInputFrameArrived(
media::VideoPixelFormat pixel_format =
media::PIXEL_FORMAT_UNKNOWN;
switch (video_frame->GetPixelFormat()) {
case bmdFormat8BitYUV: // A.k.a. '2vuy';
pixel_format = media::PIXEL_FORMAT_UYVY;
break;
case bmdFormat8BitARGB:
pixel_format = media::PIXEL_FORMAT_ARGB;
break;
......
......@@ -292,6 +292,10 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
DCHECK(!chopped_width && !chopped_height);
fourcc_format = libyuv::FOURCC_YUY2;
break;
case PIXEL_FORMAT_UYVY:
DCHECK(!chopped_width && !chopped_height);
fourcc_format = libyuv::FOURCC_UYVY;
break;
case PIXEL_FORMAT_RGB24:
// Linux RGB24 defines red at lowest byte address,
// see http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html.
......
......@@ -225,6 +225,7 @@ TEST_F(VideoCaptureDeviceClientTest, DataCaptureGoodPixelFormats) {
PIXEL_FORMAT_NV12,
PIXEL_FORMAT_NV21,
PIXEL_FORMAT_YUY2,
PIXEL_FORMAT_UYVY,
#if defined(OS_WIN) || defined(OS_LINUX)
PIXEL_FORMAT_RGB24,
#endif
......
......@@ -77,6 +77,12 @@ bool SinkInputPin::IsMediaTypeValid(const AM_MEDIA_TYPE* media_type) {
resulting_format_.pixel_format = PIXEL_FORMAT_YUY2;
return true;
}
// This format is added after http:/crbug.com/508413.
if (sub_type == MEDIASUBTYPE_UYVY &&
pvi->bmiHeader.biCompression == MAKEFOURCC('U', 'Y', 'V', 'Y')) {
resulting_format_.pixel_format = PIXEL_FORMAT_UYVY;
return true;
}
if (sub_type == MEDIASUBTYPE_MJPG &&
pvi->bmiHeader.biCompression == MAKEFOURCC('M', 'J', 'P', 'G')) {
resulting_format_.pixel_format = PIXEL_FORMAT_MJPEG;
......
......@@ -340,7 +340,9 @@ VideoPixelFormat VideoCaptureDeviceWin::TranslateMediaSubtypeToPixelFormat(
{MEDIASUBTYPE_RGB32, PIXEL_FORMAT_ARGB},
{MEDIASUBTYPE_YUY2, PIXEL_FORMAT_YUY2},
{MEDIASUBTYPE_MJPG, PIXEL_FORMAT_MJPEG},
{MEDIASUBTYPE_UYVY, PIXEL_FORMAT_UYVY},
{MEDIASUBTYPE_ARGB32, PIXEL_FORMAT_ARGB},
{kMediaSubTypeHDYC, PIXEL_FORMAT_UYVY},
{kMediaSubTypeY16, PIXEL_FORMAT_Y16},
{kMediaSubTypeZ16, PIXEL_FORMAT_Y16},
{kMediaSubTypeINVZ, PIXEL_FORMAT_Y16},
......
......@@ -14,9 +14,9 @@ namespace media {
// This list is ordered by precedence of use.
static VideoPixelFormat const kSupportedCapturePixelFormats[] = {
PIXEL_FORMAT_I420, PIXEL_FORMAT_YV12, PIXEL_FORMAT_NV12,
PIXEL_FORMAT_NV21, PIXEL_FORMAT_YUY2, PIXEL_FORMAT_RGB24,
PIXEL_FORMAT_ARGB, PIXEL_FORMAT_MJPEG,
PIXEL_FORMAT_I420, PIXEL_FORMAT_YV12, PIXEL_FORMAT_NV12,
PIXEL_FORMAT_NV21, PIXEL_FORMAT_UYVY, PIXEL_FORMAT_YUY2,
PIXEL_FORMAT_RGB24, PIXEL_FORMAT_ARGB, PIXEL_FORMAT_MJPEG,
};
VideoCaptureFormat::VideoCaptureFormat()
......
......@@ -74,6 +74,9 @@ base::Optional<Fourcc> Fourcc::FromVideoPixelFormat(
return Fourcc(NV12);
case PIXEL_FORMAT_NV21:
return Fourcc(NV21);
case PIXEL_FORMAT_UYVY:
NOTREACHED();
FALLTHROUGH;
case PIXEL_FORMAT_I422:
case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_I444:
......@@ -107,6 +110,9 @@ base::Optional<Fourcc> Fourcc::FromVideoPixelFormat(
return Fourcc(YM16);
case PIXEL_FORMAT_NV21:
return Fourcc(NM21);
case PIXEL_FORMAT_UYVY:
NOTREACHED();
FALLTHROUGH;
case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_I444:
case PIXEL_FORMAT_YUY2:
......
......@@ -668,6 +668,7 @@ void ConvertVideoFrameToRGBPixelsTask(const VideoFrame* video_frame,
NOTREACHED();
}
break;
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUV420P9:
case PIXEL_FORMAT_YUV422P9:
case PIXEL_FORMAT_YUV444P9:
......
......@@ -121,6 +121,9 @@ VideoFrameResourceType ExternalResourceTypeForHardwarePlanes(
buffer_formats[1] = gfx::BufferFormat::RG_88;
return VideoFrameResourceType::YUV;
case PIXEL_FORMAT_UYVY:
NOTREACHED();
FALLTHROUGH;
case PIXEL_FORMAT_YV12:
case PIXEL_FORMAT_I422:
case PIXEL_FORMAT_I444:
......
......@@ -597,6 +597,7 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHardwareFrame(
case PIXEL_FORMAT_I444:
case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_BGRA:
......
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