From c4fadc1abf360b429a5d75180fd48aaa6a24e5b4 Mon Sep 17 00:00:00 2001 From: aplefull Date: Sat, 31 May 2025 14:53:49 +0200 Subject: [PATCH] LibMedia: Add support for YUVJ pixel formats in FFmpegVideoDecoder --- .../LibMedia/FFmpeg/FFmpegVideoDecoder.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Libraries/LibMedia/FFmpeg/FFmpegVideoDecoder.cpp b/Libraries/LibMedia/FFmpeg/FFmpegVideoDecoder.cpp index 6b6396cb891..a855130579d 100644 --- a/Libraries/LibMedia/FFmpeg/FFmpegVideoDecoder.cpp +++ b/Libraries/LibMedia/FFmpeg/FFmpegVideoDecoder.cpp @@ -25,6 +25,9 @@ static AVPixelFormat negotiate_output_format(AVCodecContext*, AVPixelFormat cons case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P10: case AV_PIX_FMT_YUV444P12: + case AV_PIX_FMT_YUVJ420P: + case AV_PIX_FMT_YUVJ422P: + case AV_PIX_FMT_YUVJ444P: return *formats; default: break; @@ -137,6 +140,15 @@ DecoderErrorOr> FFmpegVideoDecoder::get_decoded_frame( auto transfer_characteristics = static_cast(m_frame->color_trc); auto matrix_coefficients = static_cast(m_frame->colorspace); auto color_range = [&] { + switch (m_frame->format) { + case AV_PIX_FMT_YUVJ420P: + case AV_PIX_FMT_YUVJ422P: + case AV_PIX_FMT_YUVJ444P: + return VideoFullRangeFlag::Full; + default: + break; + } + switch (m_frame->color_range) { case AVColorRange::AVCOL_RANGE_MPEG: return VideoFullRangeFlag::Studio; @@ -153,6 +165,9 @@ DecoderErrorOr> FFmpegVideoDecoder::get_decoded_frame( case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUV422P: case AV_PIX_FMT_YUV444P: + case AV_PIX_FMT_YUVJ420P: + case AV_PIX_FMT_YUVJ422P: + case AV_PIX_FMT_YUVJ444P: return 8; case AV_PIX_FMT_YUV420P10: case AV_PIX_FMT_YUV422P10: @@ -172,14 +187,17 @@ DecoderErrorOr> FFmpegVideoDecoder::get_decoded_frame( case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUV420P10: case AV_PIX_FMT_YUV420P12: + case AV_PIX_FMT_YUVJ420P: return { true, true }; case AV_PIX_FMT_YUV422P: case AV_PIX_FMT_YUV422P10: case AV_PIX_FMT_YUV422P12: + case AV_PIX_FMT_YUVJ422P: return { true, false }; case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P10: case AV_PIX_FMT_YUV444P12: + case AV_PIX_FMT_YUVJ444P: return { false, false }; default: