PR #24499 opened by Jamaika1 URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24499 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24499.patch
https://github.com/AcademySoftwareFoundation/openapv/pull/281 >From 26b87f88bba9e4960b81b4743ec6e18190c83db0 Mon Sep 17 00:00:00 2001 From: Jamaika1 <[email protected]> Date: Tue, 15 Sep 2026 06:19:31 +0000 Subject: [PATCH] libavcodec/liboapvenc: Support APV RAW encoding and decoding https://github.com/AcademySoftwareFoundation/openapv/pull/281 --- libavcodec/defs.h | 2 ++ libavcodec/liboapvenc.c | 45 +++++++++++++++++++++++++++++++++++++---- libavcodec/profiles.c | 2 ++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/libavcodec/defs.h b/libavcodec/defs.h index f7495497a2..653c87f3b1 100644 --- a/libavcodec/defs.h +++ b/libavcodec/defs.h @@ -210,8 +210,10 @@ #define AV_PROFILE_APV_422_12 44 #define AV_PROFILE_APV_444_10 55 #define AV_PROFILE_APV_444_12 66 +#define AV_PROFILE_APV_444_16C12 140 #define AV_PROFILE_APV_4444_10 77 #define AV_PROFILE_APV_4444_12 88 +#define AV_PROFILE_APV_4444_16C12 144 #define AV_PROFILE_APV_400_10 99 diff --git a/libavcodec/liboapvenc.c b/libavcodec/liboapvenc.c index 22a8ac4890..f1e82cdee4 100644 --- a/libavcodec/liboapvenc.c +++ b/libavcodec/liboapvenc.c @@ -63,6 +63,9 @@ typedef struct ApvEncContext { oapve_t id; // APV instance identifier oapvm_t mid; oapve_cdesc_t cdsc; // coding parameters i.e profile, width & height of input frame, num of therads, frame rate ... +#if OAPV_VER_MAJOR >= 1 && OAPV_VER_MINOR >= 1 + oapvm_cdesc_t mdesc; +#endif oapv_bitb_t bitb; // bitstream buffer (output) oapve_stat_t stat; // encoding status (output) @@ -117,16 +120,16 @@ static inline int get_color_format(enum AVPixelFormat pix_fmt) case AV_PIX_FMT_GRAY10: return OAPV_CF_YCBCR400; case AV_PIX_FMT_YUV422P10: - return OAPV_CF_YCBCR422; case AV_PIX_FMT_YUV422P12: + case AV_PIX_FMT_YUV422P16: return OAPV_CF_YCBCR422; case AV_PIX_FMT_YUV444P10: - return OAPV_CF_YCBCR444; case AV_PIX_FMT_YUV444P12: + case AV_PIX_FMT_YUV444P16: return OAPV_CF_YCBCR444; case AV_PIX_FMT_YUVA444P10: - return OAPV_CF_YCBCR4444; case AV_PIX_FMT_YUVA444P12: + case AV_PIX_FMT_YUVA444P16: return OAPV_CF_YCBCR4444; } } @@ -140,12 +143,15 @@ static inline int get_chroma_format_idc(enum AVPixelFormat pix_fmt) return APV_CHROMA_FORMAT_400; case AV_PIX_FMT_YUV422P10: case AV_PIX_FMT_YUV422P12: + case AV_PIX_FMT_YUV422P16: return APV_CHROMA_FORMAT_422; case AV_PIX_FMT_YUV444P10: case AV_PIX_FMT_YUV444P12: + case AV_PIX_FMT_YUV444P16: return APV_CHROMA_FORMAT_444; case AV_PIX_FMT_YUVA444P10: case AV_PIX_FMT_YUVA444P12: + case AV_PIX_FMT_YUVA444P16: return APV_CHROMA_FORMAT_4444; } } @@ -165,10 +171,18 @@ static inline int get_min_profile(enum AVPixelFormat pix_fmt) return AV_PROFILE_APV_444_10; case AV_PIX_FMT_YUV444P12: return AV_PROFILE_APV_444_12; +#if OAPV_VER_MAJOR >= 1 && OAPV_VER_MINOR >= 1 + case AV_PIX_FMT_YUV444P16: + return AV_PROFILE_APV_444_16C12; +#endif case AV_PIX_FMT_YUVA444P10: return AV_PROFILE_APV_4444_10; case AV_PIX_FMT_YUVA444P12: return AV_PROFILE_APV_4444_12; +#if OAPV_VER_MAJOR >= 1 && OAPV_VER_MINOR >= 1 + case AV_PIX_FMT_YUVA444P16: + return AV_PROFILE_APV_4444_16C12; +#endif } } @@ -202,7 +216,16 @@ static int profile_is_compatible(enum AVPixelFormat pix_fmt, int profile) return chroma_format_idc >= APV_CHROMA_FORMAT_422 && chroma_format_idc <= APV_CHROMA_FORMAT_4444 && bit_depth >= 10 && bit_depth <= 12; - case AV_PROFILE_APV_400_10: +#if OAPV_VER_MAJOR >= 1 && OAPV_VER_MINOR >= 1 + case AV_PROFILE_APV_444_16C12: + return chroma_format_idc == APV_CHROMA_FORMAT_444 && + bit_depth == 16; + case AV_PROFILE_APV_4444_16C12: + return chroma_format_idc >= APV_CHROMA_FORMAT_444 && + chroma_format_idc <= APV_CHROMA_FORMAT_4444 && + bit_depth == 16; +#endif + case AV_PROFILE_APV_400_10: return chroma_format_idc == APV_CHROMA_FORMAT_400 && bit_depth == 10; default: return 0; @@ -509,7 +532,12 @@ static av_cold int liboapve_init(AVCodecContext *avctx) } /* create metadata handler */ +#if OAPV_VER_MAJOR >= 1 && OAPV_VER_MINOR >= 1 + memset(&apv->mdesc, 0, sizeof(oapvm_cdesc_t)); + apv->mid = oapvm_create(&apv->mdesc, &ret); +#else apv->mid = oapvm_create(&ret); +#endif if (apv->mid == NULL || OAPV_FAILED(ret)) { av_log(avctx, AV_LOG_ERROR, "cannot create OAPV metadata handler\n"); return AVERROR_EXTERNAL; @@ -702,8 +730,17 @@ const FFCodec ff_liboapv_encoder = { .p.wrapper_name = "liboapv", .p.profiles = NULL_IF_CONFIG_SMALL(ff_apv_profiles), .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_NOT_INIT_THREADSAFE, +#if OAPV_VER_MAJOR >= 1 && OAPV_VER_MINOR >= 1 + CODEC_PIXFMTS(AV_PIX_FMT_GRAY10, + AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, + AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, + AV_PIX_FMT_YUV444P16, + AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12, + AV_PIX_FMT_YUVA444P16), +#else CODEC_PIXFMTS(AV_PIX_FMT_GRAY10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12), +#endif }; diff --git a/libavcodec/profiles.c b/libavcodec/profiles.c index 0e572e758f..3b6bdda2ac 100644 --- a/libavcodec/profiles.c +++ b/libavcodec/profiles.c @@ -214,8 +214,10 @@ const AVProfile ff_apv_profiles[] = { { AV_PROFILE_APV_422_12, "422-12" }, { AV_PROFILE_APV_444_10, "444-10" }, { AV_PROFILE_APV_444_12, "444-12" }, + { AV_PROFILE_APV_444_16C12, "444-16C12" }, { AV_PROFILE_APV_4444_10, "4444-10" }, { AV_PROFILE_APV_4444_12, "4444-12" }, + { AV_PROFILE_APV_4444_16C12, "4444-16C12" }, { AV_PROFILE_APV_400_10, "400-10" }, { AV_PROFILE_UNKNOWN }, }; -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
