mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-23 00:47:31 +09:00
Issue #2118 - Part 2: Add support for Identity YUVColorSpace
https://hg.mozilla.org/mozilla-central/rev/be342c90755d11551623362f2058c0326f63bbb3
This commit is contained in:
parent
beef437602
commit
3e62b1fc9f
6 changed files with 97 additions and 7 deletions
|
|
@ -232,6 +232,21 @@ AOMDecoder::DoDecode(MediaRawData* aSample)
|
|||
RESULT_DETAIL("AOM Unknown image format"));
|
||||
}
|
||||
|
||||
switch (img->mc) {
|
||||
case AOM_CICP_MC_BT_601:
|
||||
b.mYUVColorSpace = YUVColorSpace::BT601;
|
||||
break;
|
||||
case AOM_CICP_MC_BT_709:
|
||||
b.mYUVColorSpace = YUVColorSpace::BT709;
|
||||
break;
|
||||
case AOM_CICP_MC_IDENTITY:
|
||||
b.mYUVColorSpace = YUVColorSpace::IDENTITY;
|
||||
break;
|
||||
default:
|
||||
LOG("Unhandled colorspace %d", img->mc);
|
||||
break;
|
||||
}
|
||||
|
||||
RefPtr<VideoData> v =
|
||||
VideoData::CreateAndCopyData(mInfo,
|
||||
mImageContainer,
|
||||
|
|
|
|||
|
|
@ -158,6 +158,22 @@ VPXDecoder::DoDecode(MediaRawData* aSample)
|
|||
RESULT_DETAIL("VPX Unknown image format"));
|
||||
}
|
||||
|
||||
b.mYUVColorSpace = [&]() {
|
||||
switch (img->cs) {
|
||||
case VPX_CS_BT_601:
|
||||
case VPX_CS_SMPTE_170:
|
||||
case VPX_CS_SMPTE_240:
|
||||
return YUVColorSpace::BT601;
|
||||
case VPX_CS_BT_709:
|
||||
return YUVColorSpace::BT709;
|
||||
case VPX_CS_SRGB:
|
||||
return YUVColorSpace::IDENTITY;
|
||||
default:
|
||||
LOG("Unhandled colorspace %d", img->cs);
|
||||
return YUVColorSpace::BT601;
|
||||
}
|
||||
}();
|
||||
|
||||
RefPtr<VideoData> v =
|
||||
VideoData::CreateAndCopyData(mInfo,
|
||||
mImageContainer,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#define AV_PIX_FMT_YUV420P PIX_FMT_YUV420P
|
||||
#define AV_PIX_FMT_YUVJ420P PIX_FMT_YUVJ420P
|
||||
#define AV_PIX_FMT_YUV444P PIX_FMT_YUV444P
|
||||
#define AV_PIX_FMT_GBRP PIX_FMT_GBRP
|
||||
#define AV_PIX_FMT_NONE PIX_FMT_NONE
|
||||
#endif
|
||||
|
||||
|
|
@ -54,6 +55,9 @@ ChoosePixelFormat(AVCodecContext* aCodecContext, const AVPixelFormat* aFormats)
|
|||
case AV_PIX_FMT_YUVJ420P:
|
||||
FFMPEG_LOG("Requesting pixel format YUVJ420P.");
|
||||
return AV_PIX_FMT_YUVJ420P;
|
||||
case AV_PIX_FMT_GBRP:
|
||||
FFMPEG_LOG("Requesting pixel format GBRP.");
|
||||
return AV_PIX_FMT_GBRP;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -353,7 +357,8 @@ FFmpegVideoDecoder<LIBAV_VER>::CreateImage(int64_t aOffset, int64_t aPts,
|
|||
|
||||
b.mPlanes[0].mWidth = mFrame->width;
|
||||
b.mPlanes[0].mHeight = mFrame->height;
|
||||
if (mCodecContext->pix_fmt == AV_PIX_FMT_YUV444P) {
|
||||
if (mCodecContext->pix_fmt == AV_PIX_FMT_YUV444P ||
|
||||
mCodecContext->pix_fmt == AV_PIX_FMT_GBRP) {
|
||||
b.mPlanes[1].mWidth = b.mPlanes[2].mWidth = mFrame->width;
|
||||
b.mPlanes[1].mHeight = b.mPlanes[2].mHeight = mFrame->height;
|
||||
} else {
|
||||
|
|
@ -369,6 +374,9 @@ FFmpegVideoDecoder<LIBAV_VER>::CreateImage(int64_t aOffset, int64_t aPts,
|
|||
case AVCOL_SPC_BT470BG:
|
||||
b.mYUVColorSpace = YUVColorSpace::BT601;
|
||||
break;
|
||||
case AVCOL_SPC_RGB:
|
||||
b.mYUVColorSpace = YUVColorSpace::IDENTITY;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue