[FFmpeg-cvslog] lavc: add HEVC Multiview Main profile

Anton Khirnov git at videolan.org
Fri Sep 6 15:25:31 EEST 2024


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Tue May 28 14:29:19 2024 +0200| [c35a51f4bb1b143a24d38e09967da0ecb0b58231] | committer: Anton Khirnov

lavc: add HEVC Multiview Main profile

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c35a51f4bb1b143a24d38e09967da0ecb0b58231
---

 doc/APIchanges        |  3 +++
 libavcodec/defs.h     |  1 +
 libavcodec/hevc/ps.c  | 24 ++++++++++++------------
 libavcodec/profiles.c |  1 +
 libavcodec/version.h  |  2 +-
 5 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 9c3eeffff5..06cad83d64 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07
 
 API changes, most recent first:
 
+2024-xx-xx - xxxxxxx - lavc 61.12.100 - defs.h
+  Add AV_PROFILE_HEVC_MULTIVIEW_MAIN
+
 2024-09-xx - xxxxxxxxx - lavu 59.36.100 - opt.h
   Add av_opt_set_array() and AV_OPT_ARRAY_REPLACE.
 
diff --git a/libavcodec/defs.h b/libavcodec/defs.h
index 7ddfdcad0b..24250f8af5 100644
--- a/libavcodec/defs.h
+++ b/libavcodec/defs.h
@@ -160,6 +160,7 @@
 #define AV_PROFILE_HEVC_MAIN_10                     2
 #define AV_PROFILE_HEVC_MAIN_STILL_PICTURE          3
 #define AV_PROFILE_HEVC_REXT                        4
+#define AV_PROFILE_HEVC_MULTIVIEW_MAIN              6
 #define AV_PROFILE_HEVC_SCC                         9
 
 #define AV_PROFILE_VVC_MAIN_10                      1
diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c
index 22042d3e62..ac177c4c65 100644
--- a/libavcodec/hevc/ps.c
+++ b/libavcodec/hevc/ps.c
@@ -29,6 +29,7 @@
 #include "h2645_vui.h"
 #include "data.h"
 #include "ps.h"
+#include "profiles.h"
 #include "refstruct.h"
 
 static const uint8_t default_scaling_list_intra[] = {
@@ -244,6 +245,7 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx,
 static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx,
                                       PTLCommon *ptl)
 {
+    const char *profile_name = NULL;
     int i;
 
     if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 43 + 1)
@@ -252,18 +254,16 @@ static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx,
     ptl->profile_space = get_bits(gb, 2);
     ptl->tier_flag     = get_bits1(gb);
     ptl->profile_idc   = get_bits(gb, 5);
-    if (ptl->profile_idc == AV_PROFILE_HEVC_MAIN)
-        av_log(avctx, AV_LOG_DEBUG, "Main profile bitstream\n");
-    else if (ptl->profile_idc == AV_PROFILE_HEVC_MAIN_10)
-        av_log(avctx, AV_LOG_DEBUG, "Main 10 profile bitstream\n");
-    else if (ptl->profile_idc == AV_PROFILE_HEVC_MAIN_STILL_PICTURE)
-        av_log(avctx, AV_LOG_DEBUG, "Main Still Picture profile bitstream\n");
-    else if (ptl->profile_idc == AV_PROFILE_HEVC_REXT)
-        av_log(avctx, AV_LOG_DEBUG, "Range Extension profile bitstream\n");
-    else if (ptl->profile_idc == AV_PROFILE_HEVC_SCC)
-        av_log(avctx, AV_LOG_DEBUG, "Screen Content Coding Extension profile bitstream\n");
-    else
-        av_log(avctx, AV_LOG_WARNING, "Unknown HEVC profile: %d\n", ptl->profile_idc);
+
+#if !CONFIG_SMALL
+    for (int i = 0; ff_hevc_profiles[i].profile != AV_PROFILE_UNKNOWN; i++)
+        if (ff_hevc_profiles[i].profile == ptl->profile_idc) {
+            profile_name = ff_hevc_profiles[i].name;
+            break;
+        }
+#endif
+    av_log(avctx, profile_name ? AV_LOG_DEBUG : AV_LOG_WARNING,
+           "%s profile bitstream\n", profile_name ? profile_name : "Unknown");
 
     for (i = 0; i < 32; i++) {
         ptl->profile_compatibility_flag[i] = get_bits1(gb);
diff --git a/libavcodec/profiles.c b/libavcodec/profiles.c
index 44bdf6f85b..3cef82be3b 100644
--- a/libavcodec/profiles.c
+++ b/libavcodec/profiles.c
@@ -99,6 +99,7 @@ const AVProfile ff_hevc_profiles[] = {
     { AV_PROFILE_HEVC_MAIN_10,              "Main 10"             },
     { AV_PROFILE_HEVC_MAIN_STILL_PICTURE,   "Main Still Picture"  },
     { AV_PROFILE_HEVC_REXT,                 "Rext"                },
+    { AV_PROFILE_HEVC_MULTIVIEW_MAIN,       "Multiview Main"      },
     { AV_PROFILE_HEVC_SCC,                  "Scc"                 },
     { AV_PROFILE_UNKNOWN },
 };
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 8b53586be1..da2264a097 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
 
 #include "version_major.h"
 
-#define LIBAVCODEC_VERSION_MINOR  11
+#define LIBAVCODEC_VERSION_MINOR  12
 #define LIBAVCODEC_VERSION_MICRO 100
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \



More information about the ffmpeg-cvslog mailing list