[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