From ae94c35152ead04852c47cfca1400337169b5e39 Mon Sep 17 00:00:00 2001 From: mvji <33432858+mvji@users.noreply.github.com> Date: Tue, 19 Apr 2022 19:38:28 +0200 Subject: [PATCH] obs-ffmpeg: Add support for YUV422P10LE, YUV444P12LE, YUVA444P12LE This commit also modifies deps/media-playback --- .../media-playback/media-playback/closest-format.h | 14 +++++++++++--- deps/media-playback/media-playback/media.c | 8 ++++++++ plugins/obs-ffmpeg/obs-ffmpeg-formats.h | 10 ++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/deps/media-playback/media-playback/closest-format.h b/deps/media-playback/media-playback/closest-format.h index ab257597d..5690619d8 100644 --- a/deps/media-playback/media-playback/closest-format.h +++ b/deps/media-playback/media-playback/closest-format.h @@ -22,6 +22,9 @@ static enum AVPixelFormat closest_format(enum AVPixelFormat fmt) case AV_PIX_FMT_YUYV422: return AV_PIX_FMT_YUYV422; + case AV_PIX_FMT_YUV444P12LE: + return AV_PIX_FMT_YUV444P12LE; + case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUV444P16LE: case AV_PIX_FMT_YUV444P16BE: @@ -30,7 +33,6 @@ static enum AVPixelFormat closest_format(enum AVPixelFormat fmt) case AV_PIX_FMT_YUV444P10BE: case AV_PIX_FMT_YUV444P10LE: case AV_PIX_FMT_YUV444P12BE: - case AV_PIX_FMT_YUV444P12LE: case AV_PIX_FMT_YUV444P14BE: case AV_PIX_FMT_YUV444P14LE: return AV_PIX_FMT_YUV444P; @@ -38,12 +40,14 @@ static enum AVPixelFormat closest_format(enum AVPixelFormat fmt) case AV_PIX_FMT_YUV422P: return AV_PIX_FMT_YUV422P; + case AV_PIX_FMT_YUV422P10LE: + return AV_PIX_FMT_YUV422P10LE; + case AV_PIX_FMT_YUVJ422P: case AV_PIX_FMT_UYVY422: case AV_PIX_FMT_YUV422P16LE: case AV_PIX_FMT_YUV422P16BE: case AV_PIX_FMT_YUV422P10BE: - case AV_PIX_FMT_YUV422P10LE: case AV_PIX_FMT_YUV422P9BE: case AV_PIX_FMT_YUV422P9LE: case AV_PIX_FMT_YVYU422: @@ -91,10 +95,14 @@ static enum AVPixelFormat closest_format(enum AVPixelFormat fmt) case AV_PIX_FMT_YUVA444P16LE: #if LIBAVUTIL_BUILD >= AV_VERSION_INT(56, 31, 100) case AV_PIX_FMT_YUVA444P12BE: - case AV_PIX_FMT_YUVA444P12LE: #endif return AV_PIX_FMT_YUVA444P; +#if LIBAVUTIL_BUILD >= AV_VERSION_INT(56, 31, 100) + case AV_PIX_FMT_YUVA444P12LE: + return AV_PIX_FMT_YUVA444P12LE; +#endif + case AV_PIX_FMT_P010LE: return AV_PIX_FMT_P010LE; diff --git a/deps/media-playback/media-playback/media.c b/deps/media-playback/media-playback/media.c index 07bb44fb6..f159004cd 100644 --- a/deps/media-playback/media-playback/media.c +++ b/deps/media-playback/media-playback/media.c @@ -38,8 +38,12 @@ static inline enum video_format convert_pixel_format(int f) return VIDEO_FORMAT_YUY2; case AV_PIX_FMT_YUV422P: return VIDEO_FORMAT_I422; + case AV_PIX_FMT_YUV422P10LE: + return VIDEO_FORMAT_I210; case AV_PIX_FMT_YUV444P: return VIDEO_FORMAT_I444; + case AV_PIX_FMT_YUV444P12LE: + return VIDEO_FORMAT_I412; case AV_PIX_FMT_UYVY422: return VIDEO_FORMAT_UYVY; case AV_PIX_FMT_NV12: @@ -56,6 +60,10 @@ static inline enum video_format convert_pixel_format(int f) return VIDEO_FORMAT_I42A; case AV_PIX_FMT_YUVA444P: return VIDEO_FORMAT_YUVA; +#if LIBAVUTIL_BUILD >= AV_VERSION_INT(56, 31, 100) + case AV_PIX_FMT_YUVA444P12LE: + return VIDEO_FORMAT_YA2L; +#endif case AV_PIX_FMT_BGR0: return VIDEO_FORMAT_BGRX; case AV_PIX_FMT_P010LE: diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h index dd4143f14..f6995ac0d 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h @@ -15,6 +15,8 @@ obs_to_ffmpeg_video_format(enum video_format format) switch (format) { case VIDEO_FORMAT_I444: return AV_PIX_FMT_YUV444P; + case VIDEO_FORMAT_I412: + return AV_PIX_FMT_YUV444P12LE; case VIDEO_FORMAT_I420: return AV_PIX_FMT_YUV420P; case VIDEO_FORMAT_NV12: @@ -35,12 +37,20 @@ obs_to_ffmpeg_video_format(enum video_format format) return AV_PIX_FMT_BGR24; case VIDEO_FORMAT_I422: return AV_PIX_FMT_YUV422P; + case VIDEO_FORMAT_I210: + return AV_PIX_FMT_YUV422P10LE; case VIDEO_FORMAT_I40A: return AV_PIX_FMT_YUVA420P; case VIDEO_FORMAT_I42A: return AV_PIX_FMT_YUVA422P; case VIDEO_FORMAT_YUVA: return AV_PIX_FMT_YUVA444P; + case VIDEO_FORMAT_YA2L: +#if LIBAVUTIL_BUILD >= AV_VERSION_INT(56, 31, 100) + return AV_PIX_FMT_YUVA444P12LE; +#else + return AV_PIX_FMT_NONE; +#endif case VIDEO_FORMAT_I010: return AV_PIX_FMT_YUV420P10LE; case VIDEO_FORMAT_P010: