[FFmpeg-cvslog] avformat/hevc: add a log context to ff_isom_write_{hvcc,lhvc}

James Almer git at videolan.org
Mon Dec 9 00:14:36 EET 2024


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Sun Dec  8 19:06:56 2024 -0300| [68ee3faf48a740a9b87933107d58cb82fe74a40c] | committer: James Almer

avformat/hevc: add a log context to ff_isom_write_{hvcc,lhvc}

Signed-off-by: James Almer <jamrial at gmail.com>

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

 libavformat/flvenc.c      |  2 +-
 libavformat/hevc.c        | 64 +++++++++++++++++++++++------------------------
 libavformat/hevc.h        |  6 +++--
 libavformat/matroskaenc.c |  2 +-
 libavformat/movenc.c      | 16 ++++++------
 libavformat/sdp.c         |  7 +++---
 6 files changed, 50 insertions(+), 47 deletions(-)

diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
index f34df61c0e..1c7ba61776 100644
--- a/libavformat/flvenc.c
+++ b/libavformat/flvenc.c
@@ -695,7 +695,7 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i
             }
 
             if (par->codec_id == AV_CODEC_ID_HEVC)
-                ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0);
+                ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0, s);
             else if (par->codec_id == AV_CODEC_ID_AV1)
                 ff_isom_write_av1c(pb, par->extradata, par->extradata_size, 1);
             else if (par->codec_id == AV_CODEC_ID_VP9)
diff --git a/libavformat/hevc.c b/libavformat/hevc.c
index 7cf0b0ffb2..23ebbc5bff 100644
--- a/libavformat/hevc.c
+++ b/libavformat/hevc.c
@@ -838,8 +838,8 @@ static void hvcc_close(HEVCDecoderConfigurationRecord *hvcc)
     }
 }
 
-static int hvcc_write(AVIOContext *pb, HEVCDecoderConfigurationRecord *hvcc,
-                      int flags)
+static int hvcc_write(void *logctx, AVIOContext *pb,
+                      HEVCDecoderConfigurationRecord *hvcc, int flags)
 {
     uint16_t numNalus[NB_ARRAYS] = { 0 };
     int is_lhvc = !!(flags & FLAG_IS_LHVC);
@@ -891,46 +891,46 @@ static int hvcc_write(AVIOContext *pb, HEVCDecoderConfigurationRecord *hvcc,
         numOfArrays += (numNalus[i] > 0);
     }
 
-    av_log(NULL, AV_LOG_TRACE,  "%s\n", is_lhvc ? "lhvC" : "hvcC");
-    av_log(NULL, AV_LOG_TRACE,  "configurationVersion:                %"PRIu8"\n",
+    av_log(logctx, AV_LOG_TRACE,  "%s\n", is_lhvc ? "lhvC" : "hvcC");
+    av_log(logctx, AV_LOG_TRACE,  "configurationVersion:              %"PRIu8"\n",
             hvcc->configurationVersion);
     if (!is_lhvc) {
-        av_log(NULL, AV_LOG_TRACE,  "general_profile_space:               %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "general_profile_space:             %"PRIu8"\n",
                 hvcc->general_profile_space);
-        av_log(NULL, AV_LOG_TRACE,  "general_tier_flag:                   %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "general_tier_flag:                 %"PRIu8"\n",
                 hvcc->general_tier_flag);
-        av_log(NULL, AV_LOG_TRACE,  "general_profile_idc:                 %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "general_profile_idc:               %"PRIu8"\n",
                 hvcc->general_profile_idc);
-        av_log(NULL, AV_LOG_TRACE, "general_profile_compatibility_flags: 0x%08"PRIx32"\n",
+        av_log(logctx, AV_LOG_TRACE, "general_profile_compatibility_flags: 0x%08"PRIx32"\n",
                 hvcc->general_profile_compatibility_flags);
-        av_log(NULL, AV_LOG_TRACE, "general_constraint_indicator_flags:  0x%012"PRIx64"\n",
+        av_log(logctx, AV_LOG_TRACE, "general_constraint_indicator_flags:  0x%012"PRIx64"\n",
                 hvcc->general_constraint_indicator_flags);
-        av_log(NULL, AV_LOG_TRACE,  "general_level_idc:                   %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "general_level_idc:                 %"PRIu8"\n",
                 hvcc->general_level_idc);
     }
-    av_log(NULL, AV_LOG_TRACE,  "min_spatial_segmentation_idc:        %"PRIu16"\n",
+    av_log(logctx, AV_LOG_TRACE,  "min_spatial_segmentation_idc:      %"PRIu16"\n",
             hvcc->min_spatial_segmentation_idc);
-    av_log(NULL, AV_LOG_TRACE,  "parallelismType:                     %"PRIu8"\n",
+    av_log(logctx, AV_LOG_TRACE,  "parallelismType:                   %"PRIu8"\n",
             hvcc->parallelismType);
     if (!is_lhvc) {
-        av_log(NULL, AV_LOG_TRACE,  "chromaFormat:                        %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "chromaFormat:                      %"PRIu8"\n",
                 hvcc->chromaFormat);
-        av_log(NULL, AV_LOG_TRACE,  "bitDepthLumaMinus8:                  %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "bitDepthLumaMinus8:                %"PRIu8"\n",
                 hvcc->bitDepthLumaMinus8);
-        av_log(NULL, AV_LOG_TRACE,  "bitDepthChromaMinus8:                %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "bitDepthChromaMinus8:              %"PRIu8"\n",
                 hvcc->bitDepthChromaMinus8);
-        av_log(NULL, AV_LOG_TRACE,  "avgFrameRate:                        %"PRIu16"\n",
+        av_log(logctx, AV_LOG_TRACE,  "avgFrameRate:                      %"PRIu16"\n",
                 hvcc->avgFrameRate);
-        av_log(NULL, AV_LOG_TRACE,  "constantFrameRate:                   %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE,  "constantFrameRate:                 %"PRIu8"\n",
                 hvcc->constantFrameRate);
     }
-    av_log(NULL, AV_LOG_TRACE,  "numTemporalLayers:                   %"PRIu8"\n",
+    av_log(logctx, AV_LOG_TRACE,  "numTemporalLayers:                 %"PRIu8"\n",
             hvcc->numTemporalLayers);
-    av_log(NULL, AV_LOG_TRACE,  "temporalIdNested:                    %"PRIu8"\n",
+    av_log(logctx, AV_LOG_TRACE,  "temporalIdNested:                  %"PRIu8"\n",
             hvcc->temporalIdNested);
-    av_log(NULL, AV_LOG_TRACE,  "lengthSizeMinusOne:                  %"PRIu8"\n",
+    av_log(logctx, AV_LOG_TRACE,  "lengthSizeMinusOne:                %"PRIu8"\n",
             hvcc->lengthSizeMinusOne);
-    av_log(NULL, AV_LOG_TRACE,  "numOfArrays:                         %"PRIu8"\n",
+    av_log(logctx, AV_LOG_TRACE,  "numOfArrays:                       %"PRIu8"\n",
             numOfArrays);
     for (unsigned i = 0, j = 0; i < FF_ARRAY_ELEMS(hvcc->arrays); i++) {
         const HVCCNALUnitArray *const array = &hvcc->arrays[i];
@@ -938,17 +938,17 @@ static int hvcc_write(AVIOContext *pb, HEVCDecoderConfigurationRecord *hvcc,
         if (numNalus[i] == 0)
             continue;
 
-        av_log(NULL, AV_LOG_TRACE, "array_completeness[%u]:               %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE, "array_completeness[%u]:             %"PRIu8"\n",
                j, array->array_completeness);
-        av_log(NULL, AV_LOG_TRACE, "NAL_unit_type[%u]:                    %"PRIu8"\n",
+        av_log(logctx, AV_LOG_TRACE, "NAL_unit_type[%u]:                  %"PRIu8"\n",
                j, array->NAL_unit_type);
-        av_log(NULL, AV_LOG_TRACE, "numNalus[%u]:                         %"PRIu16"\n",
+        av_log(logctx, AV_LOG_TRACE, "numNalus[%u]:                       %"PRIu16"\n",
                j, numNalus[i]);
         for (unsigned k = 0; k < array->numNalus; k++) {
             if (is_lhvc && array->nal[k].nuh_layer_id == 0)
                 continue;
 
-            av_log(NULL, AV_LOG_TRACE,
+            av_log(logctx, AV_LOG_TRACE,
                     "nalUnitLength[%u][%u]:                 %"PRIu16"\n",
                    j, k, array->nal[k].nalUnitLength);
         }
@@ -1164,7 +1164,7 @@ static int hvcc_parse_nal_unit(const uint8_t *buf, uint32_t len, int type,
     return 0;
 }
 
-static int write_configuration_record(AVIOContext *pb, const uint8_t *data,
+static int write_configuration_record(void *logctx, AVIOContext *pb, const uint8_t *data,
                                       int size, int flags)
 {
     HEVCDecoderConfigurationRecord hvcc;
@@ -1235,7 +1235,7 @@ static int write_configuration_record(AVIOContext *pb, const uint8_t *data,
             }
         }
 
-        ret = hvcc_write(pb, &hvcc, flags);
+        ret = hvcc_write(logctx, pb, &hvcc, flags);
         goto end;
     } else if (!(AV_RB24(data) == 1 || AV_RB32(data) == 1)) {
         /* Not a valid Annex B start code prefix */
@@ -1264,7 +1264,7 @@ static int write_configuration_record(AVIOContext *pb, const uint8_t *data,
         buf += len;
     }
 
-    ret = hvcc_write(pb, &hvcc, flags);
+    ret = hvcc_write(logctx, pb, &hvcc, flags);
 
 end:
     hvcc_close(&hvcc);
@@ -1273,15 +1273,15 @@ end:
 }
 
 int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data,
-                       int size, int ps_array_completeness)
+                       int size, int ps_array_completeness, void *logctx)
 {
-    return write_configuration_record(pb, data, size,
+    return write_configuration_record(logctx, pb, data, size,
                                       !!ps_array_completeness * FLAG_ARRAY_COMPLETENESS);
 }
 
 int ff_isom_write_lhvc(AVIOContext *pb, const uint8_t *data,
-                       int size, int ps_array_completeness)
+                       int size, int ps_array_completeness, void *logctx)
 {
-    return write_configuration_record(pb, data, size,
+    return write_configuration_record(logctx, pb, data, size,
                                       (!!ps_array_completeness * FLAG_ARRAY_COMPLETENESS) | FLAG_IS_LHVC);
 }
diff --git a/libavformat/hevc.h b/libavformat/hevc.h
index 12000b25a5..5bb68fdd8a 100644
--- a/libavformat/hevc.h
+++ b/libavformat/hevc.h
@@ -91,11 +91,12 @@ int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out,
  * @param size size (in bytes) of the data buffer
  * @param ps_array_completeness whether all parameter sets are in the hvcC (1)
  *        or there may be additional parameter sets in the bitstream (0)
+ * @param logctx opaque struct starting with an AVClass element, used for logging
  * @return >=0 in case of success, a negative value corresponding to an AVERROR
  *         code in case of failure
  */
 int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data,
-                       int size, int ps_array_completeness);
+                       int size, int ps_array_completeness, void *logctx);
 
 /**
  * Writes L-HEVC extradata (parameter sets with nuh_layer_id > 0, as a
@@ -109,9 +110,10 @@ int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data,
  * @param size size (in bytes) of the data buffer
  * @param ps_array_completeness whether all parameter sets are in the lhvC (1)
  *        or there may be additional parameter sets in the bitstream (0)
+ * @param logctx opaque struct starting with an AVClass element, used for logging
  * @return >=0 in case of success, a negative value corresponding to an AVERROR
  *         code in case of failure
  */
 int ff_isom_write_lhvc(AVIOContext *pb, const uint8_t *data,
-                       int size, int ps_array_completeness);
+                       int size, int ps_array_completeness, void *logctx);
 #endif /* AVFORMAT_HEVC_H */
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 60c896e964..16f48e7864 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1140,7 +1140,7 @@ static int mkv_assemble_native_codecprivate(AVFormatContext *s, AVIOContext *dyn
                                   extradata_size);
     case AV_CODEC_ID_HEVC:
         return ff_isom_write_hvcc(dyn_cp, extradata,
-                                  extradata_size, 0);
+                                  extradata_size, 0, s);
     case AV_CODEC_ID_ALAC:
         if (extradata_size < 36) {
             av_log(s, AV_LOG_ERROR,
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index a4967d5480..76dce9e6e5 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1550,20 +1550,20 @@ static int mov_write_vpcc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *tra
     return update_size(pb, pos);
 }
 
-static int mov_write_hvcc_tag(AVIOContext *pb, MOVTrack *track)
+static int mov_write_hvcc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track)
 {
     int64_t pos = avio_tell(pb);
 
     avio_wb32(pb, 0);
     ffio_wfourcc(pb, "hvcC");
     if (track->tag == MKTAG('h','v','c','1'))
-        ff_isom_write_hvcc(pb, track->vos_data, track->vos_len, 1);
+        ff_isom_write_hvcc(pb, track->vos_data, track->vos_len, 1, s);
     else
-        ff_isom_write_hvcc(pb, track->vos_data, track->vos_len, 0);
+        ff_isom_write_hvcc(pb, track->vos_data, track->vos_len, 0, s);
     return update_size(pb, pos);
 }
 
-static int mov_write_lhvc_tag(AVIOContext *pb, MOVTrack *track)
+static int mov_write_lhvc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track)
 {
     int64_t pos = avio_tell(pb);
     int ret;
@@ -1571,9 +1571,9 @@ static int mov_write_lhvc_tag(AVIOContext *pb, MOVTrack *track)
     avio_wb32(pb, 0);
     ffio_wfourcc(pb, "lhvC");
     if (track->tag == MKTAG('h','v','c','1'))
-        ret = ff_isom_write_lhvc(pb, track->vos_data, track->vos_len, 1);
+        ret = ff_isom_write_lhvc(pb, track->vos_data, track->vos_len, 1, s);
     else
-        ret = ff_isom_write_lhvc(pb, track->vos_data, track->vos_len, 0);
+        ret = ff_isom_write_lhvc(pb, track->vos_data, track->vos_len, 0, s);
 
     if (ret < 0) {
         avio_seek(pb, pos, SEEK_SET);
@@ -2710,9 +2710,9 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
         mov_write_avid_tag(pb, track);
         avid = 1;
     } else if (track->par->codec_id == AV_CODEC_ID_HEVC) {
-        mov_write_hvcc_tag(pb, track);
+        mov_write_hvcc_tag(mov->fc, pb, track);
         if (track->st->disposition & AV_DISPOSITION_MULTILAYER) {
-            ret = mov_write_lhvc_tag(pb, track);
+            ret = mov_write_lhvc_tag(mov->fc, pb, track);
             if (ret < 0)
                 av_log(mov->fc, AV_LOG_WARNING, "Not writing 'lhvC' atom for multilayer stream.\n");
         }
diff --git a/libavformat/sdp.c b/libavformat/sdp.c
index a9e964bae1..28490d77f3 100644
--- a/libavformat/sdp.c
+++ b/libavformat/sdp.c
@@ -236,7 +236,8 @@ fail_in_loop:
     return 0;
 }
 
-static int extradata2psets_hevc(const AVCodecParameters *par, char **out)
+static int extradata2psets_hevc(AVFormatContext *fmt, const AVCodecParameters *par,
+                                char **out)
 {
     char *psets;
     uint8_t *extradata = par->extradata;
@@ -260,7 +261,7 @@ static int extradata2psets_hevc(const AVCodecParameters *par, char **out)
         if (ret < 0)
             return ret;
 
-        ret = ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0);
+        ret = ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0, fmt);
         if (ret < 0) {
             avio_close_dyn_buf(pb, &tmpbuf);
             goto err;
@@ -571,7 +572,7 @@ static int sdp_write_media_attributes(char *buff, int size, const AVStream *st,
         break;
     case AV_CODEC_ID_HEVC:
         if (p->extradata_size) {
-            ret = extradata2psets_hevc(p, &config);
+            ret = extradata2psets_hevc(fmt, p, &config);
             if (ret < 0)
                 return ret;
         }



More information about the ffmpeg-cvslog mailing list