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]

Reply via email to