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