* [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element @ 2023-03-21 17:06 James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 2/7] avformat/matroskadec: set the default value for BlockAddIDType James Almer ` (5 more replies) 0 siblings, 6 replies; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/matroskadec.c | 60 ++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 3a888e3ada..60f9a78fe8 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -349,13 +349,17 @@ typedef struct MatroskaLevel { uint64_t length; } MatroskaLevel; +typedef struct MatroskaBlockMore { + uint64_t additional_id; + EbmlBin additional; +} MatroskaBlockMore; + typedef struct MatroskaBlock { uint64_t duration; CountedElement reference; uint64_t non_simple; EbmlBin bin; - uint64_t additional_id; - EbmlBin additional; + EbmlList blockmore; int64_t discard_padding; } MatroskaBlock; @@ -759,13 +763,13 @@ static EbmlSyntax matroska_segments[] = { }; static EbmlSyntax matroska_blockmore[] = { - { MATROSKA_ID_BLOCKADDID, EBML_UINT, 0, 0, offsetof(MatroskaBlock,additional_id), { .u = 1 } }, - { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN, 0, 0, offsetof(MatroskaBlock,additional) }, + { MATROSKA_ID_BLOCKADDID, EBML_UINT, 0, 0, offsetof(MatroskaBlockMore,additional_id), { .u = 1 } }, + { MATROSKA_ID_BLOCKADDITIONAL, EBML_BIN, 0, 0, offsetof(MatroskaBlockMore,additional) }, CHILD_OF(matroska_blockadditions) }; static EbmlSyntax matroska_blockadditions[] = { - { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, 0, 0, {.n = matroska_blockmore} }, + { MATROSKA_ID_BLOCKMORE, EBML_NEST, 0, sizeof(MatroskaBlockMore), offsetof(MatroskaBlock, blockmore), { .n = matroska_blockmore } }, CHILD_OF(matroska_blockgroup) }; @@ -3610,12 +3614,28 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, return 0; } +static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, + AVPacket *pkt, + const uint8_t *data, int size, uint64_t id) +{ + uint8_t *side_data = av_packet_new_side_data(pkt, + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + size + 8); + if (!side_data) + return AVERROR(ENOMEM); + + AV_WB64(side_data, id); + memcpy(side_data + 8, data, size); + + return 0; +} + static int matroska_parse_frame(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, AVBufferRef *buf, uint8_t *data, int pkt_size, uint64_t timecode, uint64_t lace_duration, int64_t pos, int is_keyframe, - uint8_t *additional, uint64_t additional_id, int additional_size, + MatroskaBlockMore *blockmore, int nb_blockmore, int64_t discard_padding) { uint8_t *pkt_data = data; @@ -3647,7 +3667,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, buf = NULL; } - if (!pkt_size && !additional_size) + if (!pkt_size && !nb_blockmore) goto no_output; if (!buf) @@ -3666,16 +3686,18 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, pkt->flags = is_keyframe; pkt->stream_index = st->index; - if (additional_size > 0) { - uint8_t *side_data = av_packet_new_side_data(pkt, - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - additional_size + 8); - if (!side_data) { + for (int i = 0; i < nb_blockmore; i++) { + MatroskaBlockMore *more = &blockmore[i]; + + if (!more->additional.size) + continue; + + res = matroska_parse_block_additional(matroska, pkt, more->additional.data, + more->additional.size, more->additional_id); + if (res < 0) { av_packet_unref(pkt); return AVERROR(ENOMEM); } - AV_WB64(side_data, additional_id); - memcpy(side_data + 8, additional, additional_size); } if (discard_padding) { @@ -3721,7 +3743,7 @@ fail: static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf, uint8_t *data, int size, int64_t pos, uint64_t cluster_time, uint64_t block_duration, int is_keyframe, - uint8_t *additional, uint64_t additional_id, int additional_size, + MatroskaBlockMore *blockmore, int nb_blockmore, int64_t cluster_pos, int64_t discard_padding) { uint64_t timecode = AV_NOPTS_VALUE; @@ -3856,7 +3878,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf res = matroska_parse_frame(matroska, track, st, buf, out_data, out_size, timecode, lace_duration, pos, !n ? is_keyframe : 0, - additional, additional_id, additional_size, + blockmore, nb_blockmore, discard_padding); if (res) return res; @@ -3897,14 +3919,12 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) if (res >= 0 && block->bin.size > 0) { int is_keyframe = block->non_simple ? block->reference.count == 0 : -1; - uint8_t* additional = block->additional.size > 0 ? - block->additional.data : NULL; res = matroska_parse_block(matroska, block->bin.buf, block->bin.data, block->bin.size, block->bin.pos, cluster->timecode, block->duration, - is_keyframe, additional, block->additional_id, - block->additional.size, cluster->pos, + is_keyframe, block->blockmore.elem, + block->blockmore.nb_elem, cluster->pos, block->discard_padding); } -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH 2/7] avformat/matroskadec: set the default value for BlockAddIDType 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer @ 2023-03-21 17:06 ` James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data James Almer ` (4 subsequent siblings) 5 siblings, 0 replies; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/matroskadec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 60f9a78fe8..ef914f92f8 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -591,7 +591,7 @@ static EbmlSyntax matroska_track_operation[] = { static EbmlSyntax matroska_block_addition_mapping[] = { { MATROSKA_ID_BLKADDIDVALUE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) }, { MATROSKA_ID_BLKADDIDNAME, EBML_STR, 0, 0, offsetof(MatroskaBlockAdditionMapping, name) }, - { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) }, + { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type), { .u = 0 } }, { MATROSKA_ID_BLKADDIDEXTRADATA, EBML_BIN, 0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) }, CHILD_OF(matroska_track) }; -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 2/7] avformat/matroskadec: set the default value for BlockAddIDType James Almer @ 2023-03-21 17:06 ` James Almer 2023-03-24 11:18 ` Anton Khirnov 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 4/7] avformat/matroska: add a few more Block Addition ID Type enum values James Almer ` (3 subsequent siblings) 5 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/matroska.h | 5 +++ libavformat/matroskadec.c | 76 +++++++++++++++++++++++++++++++++++---- 2 files changed, 74 insertions(+), 7 deletions(-) diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 45077ed33f..8a9c1b5119 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -358,6 +358,11 @@ typedef enum { MATROSKA_VIDEO_PROJECTION_TYPE_MESH = 3, } MatroskaVideoProjectionType; +typedef enum { + MATROSKA_BLOCK_ADD_ID_TYPE_DEFAULT = 0, + MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35 = 4, +} MatroskaBlockAddIDType; + /* * Matroska Codec IDs, strings */ diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index ef914f92f8..b1d2391840 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -40,6 +40,7 @@ #include "libavutil/dict.h" #include "libavutil/dict_internal.h" #include "libavutil/display.h" +#include "libavutil/hdr_dynamic_metadata.h" #include "libavutil/intfloat.h" #include "libavutil/intreadwrite.h" #include "libavutil/lzo.h" @@ -284,6 +285,7 @@ typedef struct MatroskaTrack { int needs_decoding; uint64_t max_block_additional_id; EbmlList block_addition_mappings; + int blockaddid_itu_t_t35; uint32_t palette[AVPALETTE_COUNT]; int has_palette; @@ -423,6 +425,8 @@ typedef struct MatroskaDemuxContext { MatroskaCluster current_cluster; + int is_webm; + /* WebM DASH Manifest live flag */ int is_live; @@ -2378,7 +2382,7 @@ static int mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaT return ff_isom_parse_dvcc_dvvc(s, st, bin->data, bin->size); } -static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track) +static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, MatroskaTrack *track) { const EbmlList *mappings_list = &track->block_addition_mappings; MatroskaBlockAdditionMapping *mappings = mappings_list->elem; @@ -2388,6 +2392,18 @@ static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, c MatroskaBlockAdditionMapping *mapping = &mappings[i]; switch (mapping->type) { + case MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35: + if (mapping->value != 4) { + int strict = s->strict_std_compliance >= FF_COMPLIANCE_STRICT; + av_log(s, strict ? AV_LOG_ERROR : AV_LOG_WARNING, + "Invalid Block Addition Value 0x%"PRIx64" for Block Addition Mapping Type " + "\"ITU T.35 metadata\"\n", mapping->value); + if (!strict) + break; + return AVERROR_INVALIDDATA; + } + track->blockaddid_itu_t_t35 = 1; + break; case MKBETAG('d','v','c','C'): case MKBETAG('d','v','v','C'): if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) @@ -2814,10 +2830,12 @@ static int matroska_parse_tracks(AVFormatContext *s) AV_WL16(extradata, 0x410); } else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) { fourcc = AV_RL32(track->codec_priv.data); - } else if (codec_id == AV_CODEC_ID_VP9 && track->codec_priv.size) { + } else if (codec_id == AV_CODEC_ID_VP9) { /* we don't need any value stored in CodecPrivate. make sure that it's not exported as extradata. */ track->codec_priv.size = 0; + /* Assume BlockAddID 4 is ITU-T T.35 metadata if WebM */ + track->blockaddid_itu_t_t35 = matroska->is_webm; } else if (codec_id == AV_CODEC_ID_ARIB_CAPTION && track->codec_priv.size == 3) { int component_tag = track->codec_priv.data[0]; int data_component_id = AV_RB16(track->codec_priv.data + 1); @@ -3081,6 +3099,8 @@ static int matroska_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } } + matroska->is_webm = !strcmp(ebml.doctype, "webm"); + ebml_free(ebml_syntax, &ebml); matroska->pkt = si->parse_pkt; @@ -3615,12 +3635,54 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, } static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, - AVPacket *pkt, + MatroskaTrack *track, AVPacket *pkt, const uint8_t *data, int size, uint64_t id) { - uint8_t *side_data = av_packet_new_side_data(pkt, - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - size + 8); + uint8_t *side_data; + int res; + + switch (id) { + case 4: { + int country_code, provider_code; + int provider_oriented_code, application_identifier; + size_t hdrplus_size; + AVDynamicHDRPlus *hdrplus; + + if (!track->blockaddid_itu_t_t35) + break; //ignore + + /* ITU-T T.35 metadata */ + country_code = bytestream_get_byte(&data); + provider_code = bytestream_get_be16(&data); + + if (country_code != 0xB5 || provider_code != 0x3C) + break; // ignore + + provider_oriented_code = bytestream_get_be16(&data); + application_identifier = bytestream_get_byte(&data); + + if (provider_oriented_code != 1 || application_identifier != 4) + break; // ignore + + hdrplus = av_dynamic_hdr_plus_alloc(&hdrplus_size); + if (!hdrplus) + return AVERROR(ENOMEM); + + if ((res = av_dynamic_hdr_plus_from_t35(hdrplus, data, size)) < 0 || + (res = av_packet_add_side_data(pkt, AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + (uint8_t *)hdrplus, hdrplus_size)) < 0) { + av_free(hdrplus); + return res; + } + + return 0; + } + default: + break; + } + + side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + size + 8); if (!side_data) return AVERROR(ENOMEM); @@ -3692,7 +3754,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, if (!more->additional.size) continue; - res = matroska_parse_block_additional(matroska, pkt, more->additional.data, + res = matroska_parse_block_additional(matroska, track, pkt, more->additional.data, more->additional.size, more->additional_id); if (res < 0) { av_packet_unref(pkt); -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data James Almer @ 2023-03-24 11:18 ` Anton Khirnov 2023-03-24 11:28 ` James Almer 0 siblings, 1 reply; 23+ messages in thread From: Anton Khirnov @ 2023-03-24 11:18 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting James Almer (2023-03-21 18:06:33) > @@ -3615,12 +3635,54 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, > } > > static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, > - AVPacket *pkt, > + MatroskaTrack *track, AVPacket *pkt, > const uint8_t *data, int size, uint64_t id) > { > - uint8_t *side_data = av_packet_new_side_data(pkt, > - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, > - size + 8); > + uint8_t *side_data; > + int res; > + > + switch (id) { > + case 4: { > + int country_code, provider_code; > + int provider_oriented_code, application_identifier; > + size_t hdrplus_size; > + AVDynamicHDRPlus *hdrplus; > + > + if (!track->blockaddid_itu_t_t35) > + break; //ignore > + > + /* ITU-T T.35 metadata */ > + country_code = bytestream_get_byte(&data); > + provider_code = bytestream_get_be16(&data); > + > + if (country_code != 0xB5 || provider_code != 0x3C) > + break; // ignore > + > + provider_oriented_code = bytestream_get_be16(&data); > + application_identifier = bytestream_get_byte(&data); Does something guarantee data is large enough for all thse bytestream_*()? -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data 2023-03-24 11:18 ` Anton Khirnov @ 2023-03-24 11:28 ` James Almer 2023-03-24 11:40 ` Anton Khirnov 0 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-24 11:28 UTC (permalink / raw) To: ffmpeg-devel On 3/24/2023 8:18 AM, Anton Khirnov wrote: > Quoting James Almer (2023-03-21 18:06:33) >> @@ -3615,12 +3635,54 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, >> } >> >> static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, >> - AVPacket *pkt, >> + MatroskaTrack *track, AVPacket *pkt, >> const uint8_t *data, int size, uint64_t id) >> { >> - uint8_t *side_data = av_packet_new_side_data(pkt, >> - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, >> - size + 8); >> + uint8_t *side_data; >> + int res; >> + >> + switch (id) { >> + case 4: { >> + int country_code, provider_code; >> + int provider_oriented_code, application_identifier; >> + size_t hdrplus_size; >> + AVDynamicHDRPlus *hdrplus; >> + >> + if (!track->blockaddid_itu_t_t35) >> + break; //ignore >> + >> + /* ITU-T T.35 metadata */ >> + country_code = bytestream_get_byte(&data); >> + provider_code = bytestream_get_be16(&data); >> + >> + if (country_code != 0xB5 || provider_code != 0x3C) >> + break; // ignore >> + >> + provider_oriented_code = bytestream_get_be16(&data); >> + application_identifier = bytestream_get_byte(&data); > > Does something guarantee data is large enough for all thse > bytestream_*()? I can add a check for size >= 6 for them. The rest of the payload will be checked by av_dynamic_hdr_plus_from_t35(). _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data 2023-03-24 11:28 ` James Almer @ 2023-03-24 11:40 ` Anton Khirnov 2023-03-24 12:34 ` James Almer 0 siblings, 1 reply; 23+ messages in thread From: Anton Khirnov @ 2023-03-24 11:40 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting James Almer (2023-03-24 12:28:41) > On 3/24/2023 8:18 AM, Anton Khirnov wrote: > > Quoting James Almer (2023-03-21 18:06:33) > >> @@ -3615,12 +3635,54 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, > >> } > >> > >> static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, > >> - AVPacket *pkt, > >> + MatroskaTrack *track, AVPacket *pkt, > >> const uint8_t *data, int size, uint64_t id) > >> { > >> - uint8_t *side_data = av_packet_new_side_data(pkt, > >> - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, > >> - size + 8); > >> + uint8_t *side_data; > >> + int res; > >> + > >> + switch (id) { > >> + case 4: { > >> + int country_code, provider_code; > >> + int provider_oriented_code, application_identifier; > >> + size_t hdrplus_size; > >> + AVDynamicHDRPlus *hdrplus; > >> + > >> + if (!track->blockaddid_itu_t_t35) > >> + break; //ignore > >> + > >> + /* ITU-T T.35 metadata */ > >> + country_code = bytestream_get_byte(&data); > >> + provider_code = bytestream_get_be16(&data); > >> + > >> + if (country_code != 0xB5 || provider_code != 0x3C) > >> + break; // ignore > >> + > >> + provider_oriented_code = bytestream_get_be16(&data); > >> + application_identifier = bytestream_get_byte(&data); > > > > Does something guarantee data is large enough for all thse > > bytestream_*()? > > I can add a check for size >= 6 for them. The rest of the payload will > be checked by av_dynamic_hdr_plus_from_t35(). My preference is bytestream2 to avoid explicit checks completely, but as you like. -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data 2023-03-24 11:40 ` Anton Khirnov @ 2023-03-24 12:34 ` James Almer 0 siblings, 0 replies; 23+ messages in thread From: James Almer @ 2023-03-24 12:34 UTC (permalink / raw) To: ffmpeg-devel On 3/24/2023 8:40 AM, Anton Khirnov wrote: > Quoting James Almer (2023-03-24 12:28:41) >> On 3/24/2023 8:18 AM, Anton Khirnov wrote: >>> Quoting James Almer (2023-03-21 18:06:33) >>>> @@ -3615,12 +3635,54 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, >>>> } >>>> >>>> static int matroska_parse_block_additional(MatroskaDemuxContext *matroska, >>>> - AVPacket *pkt, >>>> + MatroskaTrack *track, AVPacket *pkt, >>>> const uint8_t *data, int size, uint64_t id) >>>> { >>>> - uint8_t *side_data = av_packet_new_side_data(pkt, >>>> - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, >>>> - size + 8); >>>> + uint8_t *side_data; >>>> + int res; >>>> + >>>> + switch (id) { >>>> + case 4: { >>>> + int country_code, provider_code; >>>> + int provider_oriented_code, application_identifier; >>>> + size_t hdrplus_size; >>>> + AVDynamicHDRPlus *hdrplus; >>>> + >>>> + if (!track->blockaddid_itu_t_t35) >>>> + break; //ignore >>>> + >>>> + /* ITU-T T.35 metadata */ >>>> + country_code = bytestream_get_byte(&data); >>>> + provider_code = bytestream_get_be16(&data); >>>> + >>>> + if (country_code != 0xB5 || provider_code != 0x3C) >>>> + break; // ignore >>>> + >>>> + provider_oriented_code = bytestream_get_be16(&data); >>>> + application_identifier = bytestream_get_byte(&data); >>> >>> Does something guarantee data is large enough for all thse >>> bytestream_*()? >> >> I can add a check for size >= 6 for them. The rest of the payload will >> be checked by av_dynamic_hdr_plus_from_t35(). > > My preference is bytestream2 to avoid explicit checks completely, but as > you like. Ok, will do. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH 4/7] avformat/matroska: add a few more Block Addition ID Type enum values 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 2/7] avformat/matroskadec: set the default value for BlockAddIDType James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data James Almer @ 2023-03-21 17:06 ` James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element James Almer ` (2 subsequent siblings) 5 siblings, 0 replies; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/matroska.h | 3 +++ libavformat/matroskadec.c | 4 ++-- libavformat/matroskaenc.c | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 8a9c1b5119..04719f1d06 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -360,7 +360,10 @@ typedef enum { typedef enum { MATROSKA_BLOCK_ADD_ID_TYPE_DEFAULT = 0, + MATROSKA_BLOCK_ADD_ID_TYPE_OPAQUE_DATA = 1, MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35 = 4, + MATROSKA_BLOCK_ADD_ID_TYPE_DVCC = 0x64766343, + MATROSKA_BLOCK_ADD_ID_TYPE_DVVC = 0x64767643, } MatroskaBlockAddIDType; /* diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index b1d2391840..68f9271e73 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2404,8 +2404,8 @@ static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, M } track->blockaddid_itu_t_t35 = 1; break; - case MKBETAG('d','v','c','C'): - case MKBETAG('d','v','v','C'): + case MATROSKA_BLOCK_ADD_ID_TYPE_DVCC: + case MATROSKA_BLOCK_ADD_ID_TYPE_DVVC: if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) return ret; diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 954b7d828f..46f4331a18 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1612,9 +1612,9 @@ static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) + (2 + 1 + 4) + (2 + 1 + ISOM_DVCC_DVVC_SIZE); if (dovi->dv_profile > 7) { - type = MKBETAG('d', 'v', 'v', 'C'); + type = MATROSKA_BLOCK_ADD_ID_TYPE_DVVC; } else { - type = MKBETAG('d', 'v', 'c', 'C'); + type = MATROSKA_BLOCK_ADD_ID_TYPE_DVCC; } ff_isom_put_dvcc_dvvc(s, buf, dovi); -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer ` (2 preceding siblings ...) 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 4/7] avformat/matroska: add a few more Block Addition ID Type enum values James Almer @ 2023-03-21 17:06 ` James Almer 2023-03-21 17:59 ` [FFmpeg-devel] [PATCH v2 " James Almer 2023-03-24 11:37 ` [FFmpeg-devel] [PATCH " Anton Khirnov 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 7/7] fate/matroska: add HDR10+ muxing tests James Almer 5 siblings, 2 replies; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/matroskaenc.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 46f4331a18..0687d9c32e 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -188,6 +188,8 @@ typedef struct mkv_track { int64_t last_timestamp; int64_t duration; int64_t duration_offset; + uint64_t max_blockaddid; + int64_t blockadditionmapping_offset; int codecpriv_offset; unsigned codecpriv_size; ///< size reserved for CodecPrivate excluding header+length field int64_t ts_offset; @@ -1597,12 +1599,21 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, return 0; } -static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) +static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContext *mkv, + AVIOContext *pb, mkv_track *track, AVStream *st) { #if CONFIG_MATROSKA_MUXER AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); + if (IS_SEEKABLE(s->pb, mkv)) { + track->blockadditionmapping_offset = avio_tell(pb); + // We can't know at this point if there will be a block with BlockAdditions, so + // we either write the default value here, or a void element. Either of them will + // be overwritten when finishing the track. + put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, 0); + } + if (dovi && dovi->dv_profile <= 10) { ebml_master mapping; uint8_t buf[ISOM_DVCC_DVVC_SIZE]; @@ -1846,9 +1857,6 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, if (ret < 0) return ret; - if (!IS_WEBM(mkv)) - mkv_write_dovi(s, pb, st); - break; case AVMEDIA_TYPE_AUDIO: @@ -1924,6 +1932,9 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, return AVERROR(EINVAL); } + if (!IS_WEBM(mkv)) + mkv_write_blockadditionmapping(s, mkv, pb, track, st); + if (!IS_WEBM(mkv) || par->codec_id != AV_CODEC_ID_WEBVTT) { uint8_t *codecpriv; int codecpriv_size, max_payload_size; @@ -2667,6 +2678,7 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, side_data + 8, side_data_size - 8); ebml_writer_close_master(&writer); ebml_writer_close_master(&writer); + track->max_blockaddid = additional_id; } if (!force_blockgroup && writer.nb_elements == 2) { @@ -3070,6 +3082,22 @@ after_cues: if (mkv->track.bc) { // write Tracks master + int64_t end = avio_tell(mkv->track.bc); + + for (int i = 0; i < s->nb_streams; i++) { + const mkv_track *track = &mkv->tracks[i]; + + if (IS_WEBM(mkv)) + break; + if (!track->max_blockaddid) + continue; + + avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); + + put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); + } + + avio_seek(mkv->track.bc, end, SEEK_SET); avio_seek(pb, mkv->track.pos, SEEK_SET); ret = end_ebml_master_crc32(pb, &mkv->track.bc, mkv, MATROSKA_ID_TRACKS, 0, 0, 0); -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH v2 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element James Almer @ 2023-03-21 17:59 ` James Almer 2023-03-24 11:37 ` [FFmpeg-devel] [PATCH " Anton Khirnov 1 sibling, 0 replies; 23+ messages in thread From: James Almer @ 2023-03-21 17:59 UTC (permalink / raw) To: ffmpeg-devel A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. Signed-off-by: James Almer <jamrial@gmail.com> --- Now with updated refs. libavformat/matroskaenc.c | 36 ++++++++++++++++--- tests/ref/fate/aac-autobsf-adtstoasc | 4 +-- tests/ref/fate/matroska-avoid-negative-ts | 4 +-- tests/ref/fate/matroska-dovi-write-config7 | 4 +-- tests/ref/fate/matroska-dovi-write-config8 | 4 +-- tests/ref/fate/matroska-dvbsub-remux | 4 +-- tests/ref/fate/matroska-encoding-delay | 14 ++++---- tests/ref/fate/matroska-flac-extradata-update | 4 +-- tests/ref/fate/matroska-h264-remux | 4 +-- .../fate/matroska-mastering-display-metadata | 4 +-- tests/ref/fate/matroska-move-cues-to-front | 4 +-- tests/ref/fate/matroska-mpegts-remux | 4 +-- tests/ref/fate/matroska-ms-mode | 4 +-- tests/ref/fate/matroska-ogg-opus-remux | 10 +++--- tests/ref/fate/matroska-opus-remux | 10 +++--- tests/ref/fate/matroska-pgs-remux | 4 +-- tests/ref/fate/matroska-pgs-remux-durations | 4 +-- tests/ref/fate/matroska-qt-mode | 4 +-- tests/ref/fate/matroska-spherical-mono-remux | 4 +-- tests/ref/fate/matroska-vp8-alpha-remux | 4 +-- tests/ref/fate/matroska-zero-length-block | 4 +-- tests/ref/fate/rgb24-mkv | 4 +-- tests/ref/fate/shortest-sub | 4 +-- tests/ref/lavf-fate/av1.mkv | 4 +-- tests/ref/lavf/mka | 4 +-- tests/ref/lavf/mkv | 4 +-- tests/ref/lavf/mkv_attachment | 4 +-- 27 files changed, 95 insertions(+), 67 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 46f4331a18..0687d9c32e 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -188,6 +188,8 @@ typedef struct mkv_track { int64_t last_timestamp; int64_t duration; int64_t duration_offset; + uint64_t max_blockaddid; + int64_t blockadditionmapping_offset; int codecpriv_offset; unsigned codecpriv_size; ///< size reserved for CodecPrivate excluding header+length field int64_t ts_offset; @@ -1597,12 +1599,21 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, return 0; } -static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) +static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContext *mkv, + AVIOContext *pb, mkv_track *track, AVStream *st) { #if CONFIG_MATROSKA_MUXER AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); + if (IS_SEEKABLE(s->pb, mkv)) { + track->blockadditionmapping_offset = avio_tell(pb); + // We can't know at this point if there will be a block with BlockAdditions, so + // we either write the default value here, or a void element. Either of them will + // be overwritten when finishing the track. + put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, 0); + } + if (dovi && dovi->dv_profile <= 10) { ebml_master mapping; uint8_t buf[ISOM_DVCC_DVVC_SIZE]; @@ -1846,9 +1857,6 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, if (ret < 0) return ret; - if (!IS_WEBM(mkv)) - mkv_write_dovi(s, pb, st); - break; case AVMEDIA_TYPE_AUDIO: @@ -1924,6 +1932,9 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, return AVERROR(EINVAL); } + if (!IS_WEBM(mkv)) + mkv_write_blockadditionmapping(s, mkv, pb, track, st); + if (!IS_WEBM(mkv) || par->codec_id != AV_CODEC_ID_WEBVTT) { uint8_t *codecpriv; int codecpriv_size, max_payload_size; @@ -2667,6 +2678,7 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, side_data + 8, side_data_size - 8); ebml_writer_close_master(&writer); ebml_writer_close_master(&writer); + track->max_blockaddid = additional_id; } if (!force_blockgroup && writer.nb_elements == 2) { @@ -3070,6 +3082,22 @@ after_cues: if (mkv->track.bc) { // write Tracks master + int64_t end = avio_tell(mkv->track.bc); + + for (int i = 0; i < s->nb_streams; i++) { + const mkv_track *track = &mkv->tracks[i]; + + if (IS_WEBM(mkv)) + break; + if (!track->max_blockaddid) + continue; + + avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); + + put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); + } + + avio_seek(mkv->track.bc, end, SEEK_SET); avio_seek(pb, mkv->track.pos, SEEK_SET); ret = end_ebml_master_crc32(pb, &mkv->track.bc, mkv, MATROSKA_ID_TRACKS, 0, 0, 0); diff --git a/tests/ref/fate/aac-autobsf-adtstoasc b/tests/ref/fate/aac-autobsf-adtstoasc index 57bfcae18b..76125083b6 100644 --- a/tests/ref/fate/aac-autobsf-adtstoasc +++ b/tests/ref/fate/aac-autobsf-adtstoasc @@ -1,5 +1,5 @@ -4342e4f3f93b16514bda511b3b7fd93a *tests/data/fate/aac-autobsf-adtstoasc.matroska -6642 tests/data/fate/aac-autobsf-adtstoasc.matroska +3d4465a7ea2cfba31af737e288c892fe *tests/data/fate/aac-autobsf-adtstoasc.matroska +6646 tests/data/fate/aac-autobsf-adtstoasc.matroska #extradata 0: 2, 0x0030001c #tb 0: 1/1000 #media_type 0: audio diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts index 129ea1be66..73616cbc5a 100644 --- a/tests/ref/fate/matroska-avoid-negative-ts +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -1,5 +1,5 @@ -fbe66be73d379073e0705891f290a6b2 *tests/data/fate/matroska-avoid-negative-ts.matroska -973055 tests/data/fate/matroska-avoid-negative-ts.matroska +ff83530bf89f9ab1df0d181bb848c475 *tests/data/fate/matroska-avoid-negative-ts.matroska +973063 tests/data/fate/matroska-avoid-negative-ts.matroska #extradata 0: 22, 0x2885037c #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7 index 9207b14b5c..8b40848f4a 100644 --- a/tests/ref/fate/matroska-dovi-write-config7 +++ b/tests/ref/fate/matroska-dovi-write-config7 @@ -1,5 +1,5 @@ -d23b8b0d0613a82ba36fdc27acf3ef5d *tests/data/fate/matroska-dovi-write-config7.matroska -72672 tests/data/fate/matroska-dovi-write-config7.matroska +b4db571fe6304f159a0383a38c9c0cee *tests/data/fate/matroska-dovi-write-config7.matroska +72680 tests/data/fate/matroska-dovi-write-config7.matroska #extradata 0: 116, 0x2b8d1669 #extradata 1: 116, 0x2b8d1669 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-dovi-write-config8 b/tests/ref/fate/matroska-dovi-write-config8 index 5feb7b8065..c36d3a8a07 100644 --- a/tests/ref/fate/matroska-dovi-write-config8 +++ b/tests/ref/fate/matroska-dovi-write-config8 @@ -1,5 +1,5 @@ -0047ca43aa8ab2948752e367f184dc1f *tests/data/fate/matroska-dovi-write-config8.matroska -3600576 tests/data/fate/matroska-dovi-write-config8.matroska +8c77c1d18ee58a8923c411d3ba006a46 *tests/data/fate/matroska-dovi-write-config8.matroska +3600584 tests/data/fate/matroska-dovi-write-config8.matroska #extradata 0: 551, 0xa18acf66 #extradata 1: 2, 0x00340022 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-dvbsub-remux b/tests/ref/fate/matroska-dvbsub-remux index b7346b8f55..03341d9668 100644 --- a/tests/ref/fate/matroska-dvbsub-remux +++ b/tests/ref/fate/matroska-dvbsub-remux @@ -1,5 +1,5 @@ -77d210dc36d7a01988d159b3c902524c *tests/data/fate/matroska-dvbsub-remux.matroska -39010 tests/data/fate/matroska-dvbsub-remux.matroska +5d1591e9abd7e1373d43bc776572aaf7 *tests/data/fate/matroska-dvbsub-remux.matroska +39018 tests/data/fate/matroska-dvbsub-remux.matroska #extradata 0: 5, 0x00bb0064 #extradata 1: 5, 0x00bb0064 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-encoding-delay b/tests/ref/fate/matroska-encoding-delay index e6cf4790f5..401de4facf 100644 --- a/tests/ref/fate/matroska-encoding-delay +++ b/tests/ref/fate/matroska-encoding-delay @@ -1,5 +1,5 @@ -b933b7b94de55ae029369312d48d8649 *tests/data/fate/matroska-encoding-delay.matroska -961221 tests/data/fate/matroska-encoding-delay.matroska +1f6f9c0fbaba0f128acbea296cec1887 *tests/data/fate/matroska-encoding-delay.matroska +961229 tests/data/fate/matroska-encoding-delay.matroska #extradata 0: 22, 0x32ea0490 #tb 0: 1/1000 #media_type 0: video @@ -32,7 +32,7 @@ dts_time=-0.010000 duration=24 duration_time=0.024000 size=1152 -pos=1238 +pos=1246 flags=K__ [/PACKET] [PACKET] @@ -45,7 +45,7 @@ dts_time=0.000000 duration=40 duration_time=0.040000 size=237628 -pos=2398 +pos=2406 flags=K__ [/PACKET] [PACKET] @@ -58,7 +58,7 @@ dts_time=0.014000 duration=24 duration_time=0.024000 size=1152 -pos=240033 +pos=240041 flags=K__ [/PACKET] [PACKET] @@ -71,7 +71,7 @@ dts_time=0.038000 duration=24 duration_time=0.024000 size=1152 -pos=241208 +pos=241216 flags=K__ [/PACKET] [PACKET] @@ -84,7 +84,7 @@ dts_time=0.040000 duration=40 duration_time=0.040000 size=238066 -pos=242368 +pos=242376 flags=K__ [/PACKET] [STREAM] diff --git a/tests/ref/fate/matroska-flac-extradata-update b/tests/ref/fate/matroska-flac-extradata-update index d5814925f5..d6713aaafa 100644 --- a/tests/ref/fate/matroska-flac-extradata-update +++ b/tests/ref/fate/matroska-flac-extradata-update @@ -1,5 +1,5 @@ -28bc0ded5dc520d955caf29db80d35da *tests/data/fate/matroska-flac-extradata-update.matroska -1795 tests/data/fate/matroska-flac-extradata-update.matroska +fdbfdc51b519fd5e8f425aca1e7b8704 *tests/data/fate/matroska-flac-extradata-update.matroska +1807 tests/data/fate/matroska-flac-extradata-update.matroska #extradata 0: 34, 0x93650c81 #extradata 1: 34, 0x93650c81 #extradata 2: 34, 0x93650c81 diff --git a/tests/ref/fate/matroska-h264-remux b/tests/ref/fate/matroska-h264-remux index 6edd88fba8..9a9a98217c 100644 --- a/tests/ref/fate/matroska-h264-remux +++ b/tests/ref/fate/matroska-h264-remux @@ -1,5 +1,5 @@ -3c00191234d5c4d77151d38a86403101 *tests/data/fate/matroska-h264-remux.matroska -2036033 tests/data/fate/matroska-h264-remux.matroska +fa3352ef6d3abd7d93f8627981a53f6f *tests/data/fate/matroska-h264-remux.matroska +2036049 tests/data/fate/matroska-h264-remux.matroska #tb 0: 1/25 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index 5b23e9506c..95df3594c7 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -1,5 +1,5 @@ -69a904789151abaee46033391a4fce46 *tests/data/fate/matroska-mastering-display-metadata.matroska -1669555 tests/data/fate/matroska-mastering-display-metadata.matroska +e9a5f7314d6ae2ef16713335df2b5903 *tests/data/fate/matroska-mastering-display-metadata.matroska +1669571 tests/data/fate/matroska-mastering-display-metadata.matroska #extradata 0: 4, 0x040901a3 #extradata 3: 200, 0x506463a8 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-move-cues-to-front b/tests/ref/fate/matroska-move-cues-to-front index 78697b2eae..79ccc2fd93 100644 --- a/tests/ref/fate/matroska-move-cues-to-front +++ b/tests/ref/fate/matroska-move-cues-to-front @@ -1,5 +1,5 @@ -8ebfcf15768bbe66611e349383fbf26a *tests/data/fate/matroska-move-cues-to-front.matroska -23210287 tests/data/fate/matroska-move-cues-to-front.matroska +74a5ed3f0b14112322c8bf3e94d6e98b *tests/data/fate/matroska-move-cues-to-front.matroska +23210297 tests/data/fate/matroska-move-cues-to-front.matroska #tb 0: 1/1000 #media_type 0: audio #codec_id 0: pcm_s24be diff --git a/tests/ref/fate/matroska-mpegts-remux b/tests/ref/fate/matroska-mpegts-remux index 2faab0892f..af41b57af1 100644 --- a/tests/ref/fate/matroska-mpegts-remux +++ b/tests/ref/fate/matroska-mpegts-remux @@ -1,5 +1,5 @@ -acaf3ebe07afe9815e0a984921d3ab87 *tests/data/fate/matroska-mpegts-remux.matroska -6494 tests/data/fate/matroska-mpegts-remux.matroska +ca1b91e49b6e238b641007c186d8f424 *tests/data/fate/matroska-mpegts-remux.matroska +6502 tests/data/fate/matroska-mpegts-remux.matroska #tb 0: 1/1000 #media_type 0: audio #codec_id 0: ac3 diff --git a/tests/ref/fate/matroska-ms-mode b/tests/ref/fate/matroska-ms-mode index f90a7e431f..0a42ab0748 100644 --- a/tests/ref/fate/matroska-ms-mode +++ b/tests/ref/fate/matroska-ms-mode @@ -1,5 +1,5 @@ -afb4fc9b2ca6cafc03d8029fdf4da876 *tests/data/fate/matroska-ms-mode.matroska -413086 tests/data/fate/matroska-ms-mode.matroska +7f0b825626a028765098222816ba56b8 *tests/data/fate/matroska-ms-mode.matroska +413094 tests/data/fate/matroska-ms-mode.matroska #extradata 0: 40, 0x54290c93 #extradata 1: 114, 0xb6c80771 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-ogg-opus-remux b/tests/ref/fate/matroska-ogg-opus-remux index 473b9ff00c..cd3eade361 100644 --- a/tests/ref/fate/matroska-ogg-opus-remux +++ b/tests/ref/fate/matroska-ogg-opus-remux @@ -1,5 +1,5 @@ -a3f98769fe55bc5234cf75fb1949749a *tests/data/fate/matroska-ogg-opus-remux.matroska -10200 tests/data/fate/matroska-ogg-opus-remux.matroska +b602a1a4aaa4fbca4b8aaf39b66d7235 *tests/data/fate/matroska-ogg-opus-remux.matroska +10204 tests/data/fate/matroska-ogg-opus-remux.matroska #extradata 0: 19, 0x399c0471 #tb 0: 1/1000 #media_type 0: audio @@ -57,7 +57,7 @@ dts_time=-0.007000 duration=20 duration_time=0.020000 size=402 -pos=540 +pos=544 flags=K__ [/PACKET] [PACKET] @@ -70,7 +70,7 @@ dts_time=0.013000 duration=20 duration_time=0.020000 size=216 -pos=949 +pos=953 flags=K__ [/PACKET] [PACKET] @@ -83,7 +83,7 @@ dts_time=0.033000 duration=20 duration_time=0.020000 size=215 -pos=1172 +pos=1176 flags=K__ [/PACKET] [STREAM] diff --git a/tests/ref/fate/matroska-opus-remux b/tests/ref/fate/matroska-opus-remux index 8ebc80ee36..975510e167 100644 --- a/tests/ref/fate/matroska-opus-remux +++ b/tests/ref/fate/matroska-opus-remux @@ -1,5 +1,5 @@ -551e45142f0989b281e837a3a86f0218 *tests/data/fate/matroska-opus-remux.matroska -9355 tests/data/fate/matroska-opus-remux.matroska +fe0258eb0d4b525203ea240c87a154d3 *tests/data/fate/matroska-opus-remux.matroska +9359 tests/data/fate/matroska-opus-remux.matroska #extradata 0: 19, 0x3a04048f #tb 0: 1/1000 #media_type 0: audio @@ -68,7 +68,7 @@ dts_time=-0.007000 duration=20 duration_time=0.020000 size=320 -pos=496 +pos=500 flags=K__ [/PACKET] [PACKET] @@ -81,7 +81,7 @@ dts_time=0.014000 duration=20 duration_time=0.020000 size=159 -pos=823 +pos=827 flags=K__ [/PACKET] [PACKET] @@ -94,7 +94,7 @@ dts_time=0.034000 duration=20 duration_time=0.020000 size=148 -pos=989 +pos=993 flags=K__ [/PACKET] [STREAM] diff --git a/tests/ref/fate/matroska-pgs-remux b/tests/ref/fate/matroska-pgs-remux index ed5beb7463..a086111495 100644 --- a/tests/ref/fate/matroska-pgs-remux +++ b/tests/ref/fate/matroska-pgs-remux @@ -1,5 +1,5 @@ -6703d4e9a905bc5a1fc529776e8ffb51 *tests/data/fate/matroska-pgs-remux.matroska -49744 tests/data/fate/matroska-pgs-remux.matroska +d39daa393d66ae0b0c153be045897585 *tests/data/fate/matroska-pgs-remux.matroska +49748 tests/data/fate/matroska-pgs-remux.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: hdmv_pgs_subtitle diff --git a/tests/ref/fate/matroska-pgs-remux-durations b/tests/ref/fate/matroska-pgs-remux-durations index a255640fa6..37494cd98f 100644 --- a/tests/ref/fate/matroska-pgs-remux-durations +++ b/tests/ref/fate/matroska-pgs-remux-durations @@ -1,5 +1,5 @@ -a547f8b6463a60e5ef2e9a2b117c4dfa *tests/data/fate/matroska-pgs-remux-durations.matroska -49756 tests/data/fate/matroska-pgs-remux-durations.matroska +27af80eecea4f15f415f22841bc699d5 *tests/data/fate/matroska-pgs-remux-durations.matroska +49760 tests/data/fate/matroska-pgs-remux-durations.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: hdmv_pgs_subtitle diff --git a/tests/ref/fate/matroska-qt-mode b/tests/ref/fate/matroska-qt-mode index 17a8e6619e..d54f5d167c 100644 --- a/tests/ref/fate/matroska-qt-mode +++ b/tests/ref/fate/matroska-qt-mode @@ -1,5 +1,5 @@ -39a3d6faff69892c8a20301560b80b14 *tests/data/fate/matroska-qt-mode.matroska -1884224 tests/data/fate/matroska-qt-mode.matroska +c3483a76cd0bfbaf80a32dad041b6f52 *tests/data/fate/matroska-qt-mode.matroska +1884232 tests/data/fate/matroska-qt-mode.matroska #extradata 0: 90, 0x817d0185 #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux index 6b975c1586..c65d206e91 100644 --- a/tests/ref/fate/matroska-spherical-mono-remux +++ b/tests/ref/fate/matroska-spherical-mono-remux @@ -1,5 +1,5 @@ -31cdace875cb696973d5a493ce776eea *tests/data/fate/matroska-spherical-mono-remux.matroska -161554 tests/data/fate/matroska-spherical-mono-remux.matroska +dfc2e196ca14cce155b1a081a0628fd3 *tests/data/fate/matroska-spherical-mono-remux.matroska +161562 tests/data/fate/matroska-spherical-mono-remux.matroska #extradata 0: 43, 0x2b0e0d7b #extradata 1: 43, 0x2b0e0d7b #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index 17c15ec9df..1fad574edd 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -1,5 +1,5 @@ -fd4f24bf776a2f84e01b0aa7fdfece38 *tests/data/fate/matroska-vp8-alpha-remux.matroska -235011 tests/data/fate/matroska-vp8-alpha-remux.matroska +3339f3fa157bdd63f22f5a579f308c89 *tests/data/fate/matroska-vp8-alpha-remux.matroska +235015 tests/data/fate/matroska-vp8-alpha-remux.matroska #tb 0: 1/1000 #media_type 0: video #codec_id 0: vp8 diff --git a/tests/ref/fate/matroska-zero-length-block b/tests/ref/fate/matroska-zero-length-block index bef887d58b..3987cc14c4 100644 --- a/tests/ref/fate/matroska-zero-length-block +++ b/tests/ref/fate/matroska-zero-length-block @@ -1,5 +1,5 @@ -d9c8efb9d64addce3cac97e6c417d985 *tests/data/fate/matroska-zero-length-block.matroska -630 tests/data/fate/matroska-zero-length-block.matroska +f577fad2fff41d6e055f605281582b8d *tests/data/fate/matroska-zero-length-block.matroska +634 tests/data/fate/matroska-zero-length-block.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: subrip diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index f2cff5ff96..d037c01b32 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,5 +1,5 @@ -a46cb669137f18ac0a42012485e5e863 *tests/data/fate/rgb24-mkv.matroska -58211 tests/data/fate/rgb24-mkv.matroska +69dc9d35fdfadccb28c7baf401776ec3 *tests/data/fate/rgb24-mkv.matroska +58215 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/shortest-sub b/tests/ref/fate/shortest-sub index 53f89925b9..b6571b4f32 100644 --- a/tests/ref/fate/shortest-sub +++ b/tests/ref/fate/shortest-sub @@ -1,5 +1,5 @@ -145b9b48d56f9c966bf41657f7569954 *tests/data/fate/shortest-sub.matroska -139232 tests/data/fate/shortest-sub.matroska +d334a0eee71351ddad0a63011107909f *tests/data/fate/shortest-sub.matroska +139240 tests/data/fate/shortest-sub.matroska #extradata 1: 167, 0xf7272d5f #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/lavf-fate/av1.mkv b/tests/ref/lavf-fate/av1.mkv index 2008e1a932..382e3aeee3 100644 --- a/tests/ref/lavf-fate/av1.mkv +++ b/tests/ref/lavf-fate/av1.mkv @@ -1,3 +1,3 @@ -72a4713f9165c73574d40e8b81c5d70f *tests/data/lavf-fate/lavf.av1.mkv -55642 tests/data/lavf-fate/lavf.av1.mkv +7d2c39dd98d5776425a4015e1eead6c6 *tests/data/lavf-fate/lavf.av1.mkv +55646 tests/data/lavf-fate/lavf.av1.mkv tests/data/lavf-fate/lavf.av1.mkv CRC=0x7c27cc15 diff --git a/tests/ref/lavf/mka b/tests/ref/lavf/mka index 7af63e0779..93a0b8f71a 100644 --- a/tests/ref/lavf/mka +++ b/tests/ref/lavf/mka @@ -1,3 +1,3 @@ -e2d55cd3844fd7237a92181dbbcb08d9 *tests/data/lavf/lavf.mka -43569 tests/data/lavf/lavf.mka +77db16a9fe1c42a230c85124bfb40cad *tests/data/lavf/lavf.mka +43573 tests/data/lavf/lavf.mka tests/data/lavf/lavf.mka CRC=0x3a1da17e diff --git a/tests/ref/lavf/mkv b/tests/ref/lavf/mkv index d54c44a647..fbd40fc1cb 100644 --- a/tests/ref/lavf/mkv +++ b/tests/ref/lavf/mkv @@ -1,3 +1,3 @@ -0934e35639b6735c1e26595e8f47ba70 *tests/data/lavf/lavf.mkv -320409 tests/data/lavf/lavf.mkv +32b87b6adbe76df1008bc074f82fabb0 *tests/data/lavf/lavf.mkv +320417 tests/data/lavf/lavf.mkv tests/data/lavf/lavf.mkv CRC=0xec6c3c68 diff --git a/tests/ref/lavf/mkv_attachment b/tests/ref/lavf/mkv_attachment index ad96424098..2966a827cc 100644 --- a/tests/ref/lavf/mkv_attachment +++ b/tests/ref/lavf/mkv_attachment @@ -1,3 +1,3 @@ -d2708709bdd6817d9cb2b475fdfa903f *tests/data/lavf/lavf.mkv_attachment -472559 tests/data/lavf/lavf.mkv_attachment +41739c51209d94b4763f9dbe4d1e1dc9 *tests/data/lavf/lavf.mkv_attachment +472567 tests/data/lavf/lavf.mkv_attachment tests/data/lavf/lavf.mkv_attachment CRC=0xec6c3c68 -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element James Almer 2023-03-21 17:59 ` [FFmpeg-devel] [PATCH v2 " James Almer @ 2023-03-24 11:37 ` Anton Khirnov 2023-03-24 11:41 ` James Almer 1 sibling, 1 reply; 23+ messages in thread From: Anton Khirnov @ 2023-03-24 11:37 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting James Almer (2023-03-21 18:06:35) > A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. > > Signed-off-by: James Almer <jamrial@gmail.com> > --- > libavformat/matroskaenc.c | 36 ++++++++++++++++++++++++++++++++---- > 1 file changed, 32 insertions(+), 4 deletions(-) > > diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c > index 46f4331a18..0687d9c32e 100644 > --- a/libavformat/matroskaenc.c > +++ b/libavformat/matroskaenc.c > @@ -188,6 +188,8 @@ typedef struct mkv_track { > int64_t last_timestamp; > int64_t duration; > int64_t duration_offset; > + uint64_t max_blockaddid; > + int64_t blockadditionmapping_offset; > int codecpriv_offset; > unsigned codecpriv_size; ///< size reserved for CodecPrivate excluding header+length field > int64_t ts_offset; > @@ -1597,12 +1599,21 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, > return 0; > } > > -static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) > +static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContext *mkv, > + AVIOContext *pb, mkv_track *track, AVStream *st) > { > #if CONFIG_MATROSKA_MUXER > AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) > av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); > > + if (IS_SEEKABLE(s->pb, mkv)) { > + track->blockadditionmapping_offset = avio_tell(pb); > + // We can't know at this point if there will be a block with BlockAdditions, so > + // we either write the default value here, or a void element. Either of them will > + // be overwritten when finishing the track. IIRC matroska uints are variable-size, so the value you write later may have a longer representation than the dummy placeholder you're writing here. Or am I wrong? -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element 2023-03-24 11:37 ` [FFmpeg-devel] [PATCH " Anton Khirnov @ 2023-03-24 11:41 ` James Almer 2023-03-24 11:43 ` Anton Khirnov 0 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-24 11:41 UTC (permalink / raw) To: ffmpeg-devel On 3/24/2023 8:37 AM, Anton Khirnov wrote: > Quoting James Almer (2023-03-21 18:06:35) >> A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. >> >> Signed-off-by: James Almer <jamrial@gmail.com> >> --- >> libavformat/matroskaenc.c | 36 ++++++++++++++++++++++++++++++++---- >> 1 file changed, 32 insertions(+), 4 deletions(-) >> >> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c >> index 46f4331a18..0687d9c32e 100644 >> --- a/libavformat/matroskaenc.c >> +++ b/libavformat/matroskaenc.c >> @@ -188,6 +188,8 @@ typedef struct mkv_track { >> int64_t last_timestamp; >> int64_t duration; >> int64_t duration_offset; >> + uint64_t max_blockaddid; >> + int64_t blockadditionmapping_offset; >> int codecpriv_offset; >> unsigned codecpriv_size; ///< size reserved for CodecPrivate excluding header+length field >> int64_t ts_offset; >> @@ -1597,12 +1599,21 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, >> return 0; >> } >> >> -static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) >> +static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContext *mkv, >> + AVIOContext *pb, mkv_track *track, AVStream *st) >> { >> #if CONFIG_MATROSKA_MUXER >> AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) >> av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); >> >> + if (IS_SEEKABLE(s->pb, mkv)) { >> + track->blockadditionmapping_offset = avio_tell(pb); >> + // We can't know at this point if there will be a block with BlockAdditions, so >> + // we either write the default value here, or a void element. Either of them will >> + // be overwritten when finishing the track. > > IIRC matroska uints are variable-size, so the value you write later may > have a longer representation than the dummy placeholder you're writing > here. > Or am I wrong? It might if we were to write any arbitrary value passed to the muxer in AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL side data, but we will not. We're only going to write 1 (opaque, codec specific, currently used for alpha channel) at this point in the patchset, or 4 (itu-t t35) after patch 6/7, for now. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element 2023-03-24 11:41 ` James Almer @ 2023-03-24 11:43 ` Anton Khirnov 0 siblings, 0 replies; 23+ messages in thread From: Anton Khirnov @ 2023-03-24 11:43 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting James Almer (2023-03-24 12:41:27) > On 3/24/2023 8:37 AM, Anton Khirnov wrote: > > Quoting James Almer (2023-03-21 18:06:35) > >> A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. > >> > >> Signed-off-by: James Almer <jamrial@gmail.com> > >> --- > >> libavformat/matroskaenc.c | 36 ++++++++++++++++++++++++++++++++---- > >> 1 file changed, 32 insertions(+), 4 deletions(-) > >> > >> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c > >> index 46f4331a18..0687d9c32e 100644 > >> --- a/libavformat/matroskaenc.c > >> +++ b/libavformat/matroskaenc.c > >> @@ -188,6 +188,8 @@ typedef struct mkv_track { > >> int64_t last_timestamp; > >> int64_t duration; > >> int64_t duration_offset; > >> + uint64_t max_blockaddid; > >> + int64_t blockadditionmapping_offset; > >> int codecpriv_offset; > >> unsigned codecpriv_size; ///< size reserved for CodecPrivate excluding header+length field > >> int64_t ts_offset; > >> @@ -1597,12 +1599,21 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, > >> return 0; > >> } > >> > >> -static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) > >> +static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContext *mkv, > >> + AVIOContext *pb, mkv_track *track, AVStream *st) > >> { > >> #if CONFIG_MATROSKA_MUXER > >> AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) > >> av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); > >> > >> + if (IS_SEEKABLE(s->pb, mkv)) { > >> + track->blockadditionmapping_offset = avio_tell(pb); > >> + // We can't know at this point if there will be a block with BlockAdditions, so > >> + // we either write the default value here, or a void element. Either of them will > >> + // be overwritten when finishing the track. > > > > IIRC matroska uints are variable-size, so the value you write later may > > have a longer representation than the dummy placeholder you're writing > > here. > > Or am I wrong? > > It might if we were to write any arbitrary value passed to the muxer in > AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL side data, but we will not. We're > only going to write 1 (opaque, codec specific, currently used for alpha > channel) at this point in the patchset, or 4 (itu-t t35) after patch > 6/7, for now. Ok, might still be safer against future changes to check that the updated value is not too large. -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer ` (3 preceding siblings ...) 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element James Almer @ 2023-03-21 17:06 ` James Almer 2023-03-21 18:00 ` [FFmpeg-devel] [PATCH v2 " James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 7/7] fate/matroska: add HDR10+ muxing tests James Almer 5 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- libavformat/matroskaenc.c | 90 +++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 13 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 0687d9c32e..b0d088cef5 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -44,6 +44,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/crc.h" #include "libavutil/dict.h" +#include "libavutil/hdr_dynamic_metadata.h" #include "libavutil/intfloat.h" #include "libavutil/intreadwrite.h" #include "libavutil/lfg.h" @@ -1612,6 +1613,10 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContex // we either write the default value here, or a void element. Either of them will // be overwritten when finishing the track. put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, 0); + // Similarly, reserve space for an eventual HDR10+ ITU T.35 metadata BlockAdditionMapping. + put_ebml_void(pb, 3 /* BlockAdditionMapping */ + + 4 /* BlockAddIDValue */ + + 4 /* BlockAddIDType */); } if (dovi && dovi->dv_profile <= 10) { @@ -2618,17 +2623,34 @@ static int webm_reformat_vtt(MatroskaMuxContext *mkv, AVIOContext *pb, return 0; } +static void mkv_write_blockadditional(EbmlWriter *writer, const uint8_t *buf, + size_t size, enum AVPacketSideDataType type, + uint64_t additional_id) +{ + size_t offset = 0; + + if (type == AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL) + offset = 8; + + ebml_writer_open_master(writer, MATROSKA_ID_BLOCKMORE); + ebml_writer_add_uint(writer, MATROSKA_ID_BLOCKADDID, additional_id); + ebml_writer_add_bin (writer, MATROSKA_ID_BLOCKADDITIONAL, + buf + offset, size - offset); + ebml_writer_close_master(writer); +} + static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, AVIOContext *pb, const AVCodecParameters *par, mkv_track *track, const AVPacket *pkt, int keyframe, int64_t ts, uint64_t duration, int force_blockgroup, int64_t relative_packet_pos) { - uint8_t *side_data; + uint8_t *side_data, *buf = NULL; size_t side_data_size; - uint64_t additional_id; + uint64_t additional_id, max_blockaddid = 0; unsigned track_number = track->track_num; - EBML_WRITER(9); + int ret; + EBML_WRITER(13); mkv->cur_block.track = track; mkv->cur_block.pkt = pkt; @@ -2670,17 +2692,50 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, // Only the Codec-specific BlockMore (id == 1) is currently supported. (additional_id = AV_RB64(side_data)) == 1) { ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); - ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKMORE); - /* Until dbc50f8a our demuxer used a wrong default value - * of BlockAddID, so we write it unconditionally. */ - ebml_writer_add_uint(&writer, MATROSKA_ID_BLOCKADDID, additional_id); - ebml_writer_add_bin (&writer, MATROSKA_ID_BLOCKADDITIONAL, - side_data + 8, side_data_size - 8); - ebml_writer_close_master(&writer); - ebml_writer_close_master(&writer); - track->max_blockaddid = additional_id; + mkv_write_blockadditional(&writer, side_data, side_data_size, + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + additional_id); + max_blockaddid = track->max_blockaddid = FFMAX(track->max_blockaddid, + additional_id); + } + + side_data = av_packet_get_side_data(pkt, + AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + &side_data_size); + if (side_data_size) { + uint8_t *payload; + size_t payload_size, buf_size; + int ret = av_dynamic_hdr_plus_to_t35((AVDynamicHDRPlus *)side_data, &payload, + &payload_size); + if (ret < 0) + return ret; + + buf_size = payload_size + 6; + buf = av_malloc(buf_size); + if (!buf) { + av_free(payload); + return AVERROR(ENOMEM); + } + + AV_WB8 (buf + 0, 0xB5); // country_code + AV_WB16(buf + 1, 0x3C); // provider_code + AV_WB16(buf + 3, 0x01); // provider_oriented_code + AV_WB8 (buf + 5, 0x04); // application_identifier + memcpy(buf + 6, payload, payload_size); + + if (!max_blockaddid) + ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); + mkv_write_blockadditional(&writer, buf, buf_size, + AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + 4); + track->max_blockaddid = FFMAX(track->max_blockaddid, 4); + + av_free(payload); } + if (max_blockaddid) + ebml_writer_close_master(&writer); + if (!force_blockgroup && writer.nb_elements == 2) { /* Nothing except the BlockGroup + Block. Can use a SimpleBlock. */ writer.elements++; // Skip the BlockGroup. @@ -2693,7 +2748,10 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, ebml_writer_add_sint(&writer, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp - ts); - return ebml_writer_write(&writer, pb); + ret = ebml_writer_write(&writer, pb); + av_free(buf); + + return ret; } static int mkv_end_cluster(AVFormatContext *s) @@ -3095,6 +3153,12 @@ after_cues: avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); + if (track->max_blockaddid == 4) { // HDR10+ + ebml_master mapping_master = start_ebml_master(mkv->track.bc, MATROSKA_ID_TRACKBLKADDMAPPING, 8); + put_ebml_uint(mkv->track.bc, MATROSKA_ID_BLKADDIDTYPE, MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35); + put_ebml_uint(mkv->track.bc, MATROSKA_ID_BLKADDIDVALUE, 4); + end_ebml_master(mkv->track.bc, mapping_master); + } } avio_seek(mkv->track.bc, end, SEEK_SET); -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data James Almer @ 2023-03-21 18:00 ` James Almer 2023-03-24 11:45 ` Anton Khirnov 0 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-21 18:00 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- Now with updated refs. libavformat/matroskaenc.c | 90 ++++++++++++++++--- tests/ref/fate/aac-autobsf-adtstoasc | 4 +- tests/ref/fate/matroska-avoid-negative-ts | 4 +- tests/ref/fate/matroska-dovi-write-config7 | 4 +- tests/ref/fate/matroska-dovi-write-config8 | 4 +- tests/ref/fate/matroska-dvbsub-remux | 4 +- tests/ref/fate/matroska-encoding-delay | 14 +-- tests/ref/fate/matroska-flac-extradata-update | 4 +- tests/ref/fate/matroska-h264-remux | 4 +- .../fate/matroska-mastering-display-metadata | 4 +- tests/ref/fate/matroska-move-cues-to-front | 4 +- tests/ref/fate/matroska-mpegts-remux | 4 +- tests/ref/fate/matroska-ms-mode | 4 +- tests/ref/fate/matroska-ogg-opus-remux | 10 +-- tests/ref/fate/matroska-opus-remux | 10 +-- tests/ref/fate/matroska-pgs-remux | 4 +- tests/ref/fate/matroska-pgs-remux-durations | 4 +- tests/ref/fate/matroska-qt-mode | 4 +- tests/ref/fate/matroska-spherical-mono-remux | 4 +- tests/ref/fate/matroska-vp8-alpha-remux | 4 +- tests/ref/fate/matroska-zero-length-block | 4 +- tests/ref/fate/rgb24-mkv | 4 +- tests/ref/fate/shortest-sub | 4 +- tests/ref/lavf-fate/av1.mkv | 4 +- tests/ref/lavf/mka | 4 +- tests/ref/lavf/mkv | 4 +- tests/ref/lavf/mkv_attachment | 4 +- 27 files changed, 140 insertions(+), 76 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 0687d9c32e..b0d088cef5 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -44,6 +44,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/crc.h" #include "libavutil/dict.h" +#include "libavutil/hdr_dynamic_metadata.h" #include "libavutil/intfloat.h" #include "libavutil/intreadwrite.h" #include "libavutil/lfg.h" @@ -1612,6 +1613,10 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, MatroskaMuxContex // we either write the default value here, or a void element. Either of them will // be overwritten when finishing the track. put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, 0); + // Similarly, reserve space for an eventual HDR10+ ITU T.35 metadata BlockAdditionMapping. + put_ebml_void(pb, 3 /* BlockAdditionMapping */ + + 4 /* BlockAddIDValue */ + + 4 /* BlockAddIDType */); } if (dovi && dovi->dv_profile <= 10) { @@ -2618,17 +2623,34 @@ static int webm_reformat_vtt(MatroskaMuxContext *mkv, AVIOContext *pb, return 0; } +static void mkv_write_blockadditional(EbmlWriter *writer, const uint8_t *buf, + size_t size, enum AVPacketSideDataType type, + uint64_t additional_id) +{ + size_t offset = 0; + + if (type == AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL) + offset = 8; + + ebml_writer_open_master(writer, MATROSKA_ID_BLOCKMORE); + ebml_writer_add_uint(writer, MATROSKA_ID_BLOCKADDID, additional_id); + ebml_writer_add_bin (writer, MATROSKA_ID_BLOCKADDITIONAL, + buf + offset, size - offset); + ebml_writer_close_master(writer); +} + static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, AVIOContext *pb, const AVCodecParameters *par, mkv_track *track, const AVPacket *pkt, int keyframe, int64_t ts, uint64_t duration, int force_blockgroup, int64_t relative_packet_pos) { - uint8_t *side_data; + uint8_t *side_data, *buf = NULL; size_t side_data_size; - uint64_t additional_id; + uint64_t additional_id, max_blockaddid = 0; unsigned track_number = track->track_num; - EBML_WRITER(9); + int ret; + EBML_WRITER(13); mkv->cur_block.track = track; mkv->cur_block.pkt = pkt; @@ -2670,17 +2692,50 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, // Only the Codec-specific BlockMore (id == 1) is currently supported. (additional_id = AV_RB64(side_data)) == 1) { ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); - ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKMORE); - /* Until dbc50f8a our demuxer used a wrong default value - * of BlockAddID, so we write it unconditionally. */ - ebml_writer_add_uint(&writer, MATROSKA_ID_BLOCKADDID, additional_id); - ebml_writer_add_bin (&writer, MATROSKA_ID_BLOCKADDITIONAL, - side_data + 8, side_data_size - 8); - ebml_writer_close_master(&writer); - ebml_writer_close_master(&writer); - track->max_blockaddid = additional_id; + mkv_write_blockadditional(&writer, side_data, side_data_size, + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + additional_id); + max_blockaddid = track->max_blockaddid = FFMAX(track->max_blockaddid, + additional_id); + } + + side_data = av_packet_get_side_data(pkt, + AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + &side_data_size); + if (side_data_size) { + uint8_t *payload; + size_t payload_size, buf_size; + int ret = av_dynamic_hdr_plus_to_t35((AVDynamicHDRPlus *)side_data, &payload, + &payload_size); + if (ret < 0) + return ret; + + buf_size = payload_size + 6; + buf = av_malloc(buf_size); + if (!buf) { + av_free(payload); + return AVERROR(ENOMEM); + } + + AV_WB8 (buf + 0, 0xB5); // country_code + AV_WB16(buf + 1, 0x3C); // provider_code + AV_WB16(buf + 3, 0x01); // provider_oriented_code + AV_WB8 (buf + 5, 0x04); // application_identifier + memcpy(buf + 6, payload, payload_size); + + if (!max_blockaddid) + ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); + mkv_write_blockadditional(&writer, buf, buf_size, + AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + 4); + track->max_blockaddid = FFMAX(track->max_blockaddid, 4); + + av_free(payload); } + if (max_blockaddid) + ebml_writer_close_master(&writer); + if (!force_blockgroup && writer.nb_elements == 2) { /* Nothing except the BlockGroup + Block. Can use a SimpleBlock. */ writer.elements++; // Skip the BlockGroup. @@ -2693,7 +2748,10 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, ebml_writer_add_sint(&writer, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp - ts); - return ebml_writer_write(&writer, pb); + ret = ebml_writer_write(&writer, pb); + av_free(buf); + + return ret; } static int mkv_end_cluster(AVFormatContext *s) @@ -3095,6 +3153,12 @@ after_cues: avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); + if (track->max_blockaddid == 4) { // HDR10+ + ebml_master mapping_master = start_ebml_master(mkv->track.bc, MATROSKA_ID_TRACKBLKADDMAPPING, 8); + put_ebml_uint(mkv->track.bc, MATROSKA_ID_BLKADDIDTYPE, MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35); + put_ebml_uint(mkv->track.bc, MATROSKA_ID_BLKADDIDVALUE, 4); + end_ebml_master(mkv->track.bc, mapping_master); + } } avio_seek(mkv->track.bc, end, SEEK_SET); diff --git a/tests/ref/fate/aac-autobsf-adtstoasc b/tests/ref/fate/aac-autobsf-adtstoasc index 76125083b6..12b80ef6bd 100644 --- a/tests/ref/fate/aac-autobsf-adtstoasc +++ b/tests/ref/fate/aac-autobsf-adtstoasc @@ -1,5 +1,5 @@ -3d4465a7ea2cfba31af737e288c892fe *tests/data/fate/aac-autobsf-adtstoasc.matroska -6646 tests/data/fate/aac-autobsf-adtstoasc.matroska +68cb46874ca6029d3ae3a184b4a71b04 *tests/data/fate/aac-autobsf-adtstoasc.matroska +6657 tests/data/fate/aac-autobsf-adtstoasc.matroska #extradata 0: 2, 0x0030001c #tb 0: 1/1000 #media_type 0: audio diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts index 73616cbc5a..dcde937d52 100644 --- a/tests/ref/fate/matroska-avoid-negative-ts +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -1,5 +1,5 @@ -ff83530bf89f9ab1df0d181bb848c475 *tests/data/fate/matroska-avoid-negative-ts.matroska -973063 tests/data/fate/matroska-avoid-negative-ts.matroska +6a1a524a5700de7b94bce5a283bbe8b9 *tests/data/fate/matroska-avoid-negative-ts.matroska +973085 tests/data/fate/matroska-avoid-negative-ts.matroska #extradata 0: 22, 0x2885037c #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7 index 8b40848f4a..ef4c87d885 100644 --- a/tests/ref/fate/matroska-dovi-write-config7 +++ b/tests/ref/fate/matroska-dovi-write-config7 @@ -1,5 +1,5 @@ -b4db571fe6304f159a0383a38c9c0cee *tests/data/fate/matroska-dovi-write-config7.matroska -72680 tests/data/fate/matroska-dovi-write-config7.matroska +82581e39700ff479516c33402e8b1d5d *tests/data/fate/matroska-dovi-write-config7.matroska +72702 tests/data/fate/matroska-dovi-write-config7.matroska #extradata 0: 116, 0x2b8d1669 #extradata 1: 116, 0x2b8d1669 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-dovi-write-config8 b/tests/ref/fate/matroska-dovi-write-config8 index c36d3a8a07..bb22563eee 100644 --- a/tests/ref/fate/matroska-dovi-write-config8 +++ b/tests/ref/fate/matroska-dovi-write-config8 @@ -1,5 +1,5 @@ -8c77c1d18ee58a8923c411d3ba006a46 *tests/data/fate/matroska-dovi-write-config8.matroska -3600584 tests/data/fate/matroska-dovi-write-config8.matroska +09ff3c0a038eec0cdf4773929b24f41a *tests/data/fate/matroska-dovi-write-config8.matroska +3600606 tests/data/fate/matroska-dovi-write-config8.matroska #extradata 0: 551, 0xa18acf66 #extradata 1: 2, 0x00340022 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-dvbsub-remux b/tests/ref/fate/matroska-dvbsub-remux index 03341d9668..b5bb028343 100644 --- a/tests/ref/fate/matroska-dvbsub-remux +++ b/tests/ref/fate/matroska-dvbsub-remux @@ -1,5 +1,5 @@ -5d1591e9abd7e1373d43bc776572aaf7 *tests/data/fate/matroska-dvbsub-remux.matroska -39018 tests/data/fate/matroska-dvbsub-remux.matroska +7154511243fd7edb695c159bb12a0948 *tests/data/fate/matroska-dvbsub-remux.matroska +39041 tests/data/fate/matroska-dvbsub-remux.matroska #extradata 0: 5, 0x00bb0064 #extradata 1: 5, 0x00bb0064 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-encoding-delay b/tests/ref/fate/matroska-encoding-delay index 401de4facf..086fe94e93 100644 --- a/tests/ref/fate/matroska-encoding-delay +++ b/tests/ref/fate/matroska-encoding-delay @@ -1,5 +1,5 @@ -1f6f9c0fbaba0f128acbea296cec1887 *tests/data/fate/matroska-encoding-delay.matroska -961229 tests/data/fate/matroska-encoding-delay.matroska +ce2ab14d45217a043f9f50fe6adfe5ce *tests/data/fate/matroska-encoding-delay.matroska +961251 tests/data/fate/matroska-encoding-delay.matroska #extradata 0: 22, 0x32ea0490 #tb 0: 1/1000 #media_type 0: video @@ -32,7 +32,7 @@ dts_time=-0.010000 duration=24 duration_time=0.024000 size=1152 -pos=1246 +pos=1268 flags=K__ [/PACKET] [PACKET] @@ -45,7 +45,7 @@ dts_time=0.000000 duration=40 duration_time=0.040000 size=237628 -pos=2406 +pos=2428 flags=K__ [/PACKET] [PACKET] @@ -58,7 +58,7 @@ dts_time=0.014000 duration=24 duration_time=0.024000 size=1152 -pos=240041 +pos=240063 flags=K__ [/PACKET] [PACKET] @@ -71,7 +71,7 @@ dts_time=0.038000 duration=24 duration_time=0.024000 size=1152 -pos=241216 +pos=241238 flags=K__ [/PACKET] [PACKET] @@ -84,7 +84,7 @@ dts_time=0.040000 duration=40 duration_time=0.040000 size=238066 -pos=242376 +pos=242398 flags=K__ [/PACKET] [STREAM] diff --git a/tests/ref/fate/matroska-flac-extradata-update b/tests/ref/fate/matroska-flac-extradata-update index d6713aaafa..37e0367297 100644 --- a/tests/ref/fate/matroska-flac-extradata-update +++ b/tests/ref/fate/matroska-flac-extradata-update @@ -1,5 +1,5 @@ -fdbfdc51b519fd5e8f425aca1e7b8704 *tests/data/fate/matroska-flac-extradata-update.matroska -1807 tests/data/fate/matroska-flac-extradata-update.matroska +8a75767c14e63e7d15291c5c4918a661 *tests/data/fate/matroska-flac-extradata-update.matroska +1840 tests/data/fate/matroska-flac-extradata-update.matroska #extradata 0: 34, 0x93650c81 #extradata 1: 34, 0x93650c81 #extradata 2: 34, 0x93650c81 diff --git a/tests/ref/fate/matroska-h264-remux b/tests/ref/fate/matroska-h264-remux index 9a9a98217c..bfc80a273f 100644 --- a/tests/ref/fate/matroska-h264-remux +++ b/tests/ref/fate/matroska-h264-remux @@ -1,5 +1,5 @@ -fa3352ef6d3abd7d93f8627981a53f6f *tests/data/fate/matroska-h264-remux.matroska -2036049 tests/data/fate/matroska-h264-remux.matroska +38ede644af311f443d7446600f25a8e3 *tests/data/fate/matroska-h264-remux.matroska +2036093 tests/data/fate/matroska-h264-remux.matroska #tb 0: 1/25 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index 95df3594c7..c63365c181 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -1,5 +1,5 @@ -e9a5f7314d6ae2ef16713335df2b5903 *tests/data/fate/matroska-mastering-display-metadata.matroska -1669571 tests/data/fate/matroska-mastering-display-metadata.matroska +a4924bfe22ed0c72b0eddc353bbee10c *tests/data/fate/matroska-mastering-display-metadata.matroska +1669615 tests/data/fate/matroska-mastering-display-metadata.matroska #extradata 0: 4, 0x040901a3 #extradata 3: 200, 0x506463a8 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-move-cues-to-front b/tests/ref/fate/matroska-move-cues-to-front index 79ccc2fd93..ce3b9fce92 100644 --- a/tests/ref/fate/matroska-move-cues-to-front +++ b/tests/ref/fate/matroska-move-cues-to-front @@ -1,5 +1,5 @@ -74a5ed3f0b14112322c8bf3e94d6e98b *tests/data/fate/matroska-move-cues-to-front.matroska -23210297 tests/data/fate/matroska-move-cues-to-front.matroska +03ed7fcf99dd993ebb9bc9c6c93ba73e *tests/data/fate/matroska-move-cues-to-front.matroska +23210319 tests/data/fate/matroska-move-cues-to-front.matroska #tb 0: 1/1000 #media_type 0: audio #codec_id 0: pcm_s24be diff --git a/tests/ref/fate/matroska-mpegts-remux b/tests/ref/fate/matroska-mpegts-remux index af41b57af1..1f211dfc29 100644 --- a/tests/ref/fate/matroska-mpegts-remux +++ b/tests/ref/fate/matroska-mpegts-remux @@ -1,5 +1,5 @@ -ca1b91e49b6e238b641007c186d8f424 *tests/data/fate/matroska-mpegts-remux.matroska -6502 tests/data/fate/matroska-mpegts-remux.matroska +53424355db1d78441b62ad114d6ea502 *tests/data/fate/matroska-mpegts-remux.matroska +6524 tests/data/fate/matroska-mpegts-remux.matroska #tb 0: 1/1000 #media_type 0: audio #codec_id 0: ac3 diff --git a/tests/ref/fate/matroska-ms-mode b/tests/ref/fate/matroska-ms-mode index 0a42ab0748..b12e9ac9f2 100644 --- a/tests/ref/fate/matroska-ms-mode +++ b/tests/ref/fate/matroska-ms-mode @@ -1,5 +1,5 @@ -7f0b825626a028765098222816ba56b8 *tests/data/fate/matroska-ms-mode.matroska -413094 tests/data/fate/matroska-ms-mode.matroska +f3b1b804d40d70d012e85ba6d03ea8f1 *tests/data/fate/matroska-ms-mode.matroska +413116 tests/data/fate/matroska-ms-mode.matroska #extradata 0: 40, 0x54290c93 #extradata 1: 114, 0xb6c80771 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-ogg-opus-remux b/tests/ref/fate/matroska-ogg-opus-remux index cd3eade361..c70c58a697 100644 --- a/tests/ref/fate/matroska-ogg-opus-remux +++ b/tests/ref/fate/matroska-ogg-opus-remux @@ -1,5 +1,5 @@ -b602a1a4aaa4fbca4b8aaf39b66d7235 *tests/data/fate/matroska-ogg-opus-remux.matroska -10204 tests/data/fate/matroska-ogg-opus-remux.matroska +d891990279e6ba202448f9fffde52d3f *tests/data/fate/matroska-ogg-opus-remux.matroska +10215 tests/data/fate/matroska-ogg-opus-remux.matroska #extradata 0: 19, 0x399c0471 #tb 0: 1/1000 #media_type 0: audio @@ -57,7 +57,7 @@ dts_time=-0.007000 duration=20 duration_time=0.020000 size=402 -pos=544 +pos=555 flags=K__ [/PACKET] [PACKET] @@ -70,7 +70,7 @@ dts_time=0.013000 duration=20 duration_time=0.020000 size=216 -pos=953 +pos=964 flags=K__ [/PACKET] [PACKET] @@ -83,7 +83,7 @@ dts_time=0.033000 duration=20 duration_time=0.020000 size=215 -pos=1176 +pos=1187 flags=K__ [/PACKET] [STREAM] diff --git a/tests/ref/fate/matroska-opus-remux b/tests/ref/fate/matroska-opus-remux index 975510e167..f5dcbe164e 100644 --- a/tests/ref/fate/matroska-opus-remux +++ b/tests/ref/fate/matroska-opus-remux @@ -1,5 +1,5 @@ -fe0258eb0d4b525203ea240c87a154d3 *tests/data/fate/matroska-opus-remux.matroska -9359 tests/data/fate/matroska-opus-remux.matroska +dc14cd32921d86e03c155bb745edf44b *tests/data/fate/matroska-opus-remux.matroska +9370 tests/data/fate/matroska-opus-remux.matroska #extradata 0: 19, 0x3a04048f #tb 0: 1/1000 #media_type 0: audio @@ -68,7 +68,7 @@ dts_time=-0.007000 duration=20 duration_time=0.020000 size=320 -pos=500 +pos=511 flags=K__ [/PACKET] [PACKET] @@ -81,7 +81,7 @@ dts_time=0.014000 duration=20 duration_time=0.020000 size=159 -pos=827 +pos=838 flags=K__ [/PACKET] [PACKET] @@ -94,7 +94,7 @@ dts_time=0.034000 duration=20 duration_time=0.020000 size=148 -pos=993 +pos=1004 flags=K__ [/PACKET] [STREAM] diff --git a/tests/ref/fate/matroska-pgs-remux b/tests/ref/fate/matroska-pgs-remux index a086111495..482357b899 100644 --- a/tests/ref/fate/matroska-pgs-remux +++ b/tests/ref/fate/matroska-pgs-remux @@ -1,5 +1,5 @@ -d39daa393d66ae0b0c153be045897585 *tests/data/fate/matroska-pgs-remux.matroska -49748 tests/data/fate/matroska-pgs-remux.matroska +60161b7f8af39a8d280cc8b1f8693129 *tests/data/fate/matroska-pgs-remux.matroska +49759 tests/data/fate/matroska-pgs-remux.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: hdmv_pgs_subtitle diff --git a/tests/ref/fate/matroska-pgs-remux-durations b/tests/ref/fate/matroska-pgs-remux-durations index 37494cd98f..6280110948 100644 --- a/tests/ref/fate/matroska-pgs-remux-durations +++ b/tests/ref/fate/matroska-pgs-remux-durations @@ -1,5 +1,5 @@ -27af80eecea4f15f415f22841bc699d5 *tests/data/fate/matroska-pgs-remux-durations.matroska -49760 tests/data/fate/matroska-pgs-remux-durations.matroska +2c78a4337f61f24175a8ffe06087e581 *tests/data/fate/matroska-pgs-remux-durations.matroska +49771 tests/data/fate/matroska-pgs-remux-durations.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: hdmv_pgs_subtitle diff --git a/tests/ref/fate/matroska-qt-mode b/tests/ref/fate/matroska-qt-mode index d54f5d167c..e14584893b 100644 --- a/tests/ref/fate/matroska-qt-mode +++ b/tests/ref/fate/matroska-qt-mode @@ -1,5 +1,5 @@ -c3483a76cd0bfbaf80a32dad041b6f52 *tests/data/fate/matroska-qt-mode.matroska -1884232 tests/data/fate/matroska-qt-mode.matroska +a976ac0fd5c1ca916280f64525d12c10 *tests/data/fate/matroska-qt-mode.matroska +1884254 tests/data/fate/matroska-qt-mode.matroska #extradata 0: 90, 0x817d0185 #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux index c65d206e91..0940e3ea86 100644 --- a/tests/ref/fate/matroska-spherical-mono-remux +++ b/tests/ref/fate/matroska-spherical-mono-remux @@ -1,5 +1,5 @@ -dfc2e196ca14cce155b1a081a0628fd3 *tests/data/fate/matroska-spherical-mono-remux.matroska -161562 tests/data/fate/matroska-spherical-mono-remux.matroska +281555d95fca08f3ba103eefa1c22b54 *tests/data/fate/matroska-spherical-mono-remux.matroska +161584 tests/data/fate/matroska-spherical-mono-remux.matroska #extradata 0: 43, 0x2b0e0d7b #extradata 1: 43, 0x2b0e0d7b #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index 1fad574edd..86024b3477 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -1,5 +1,5 @@ -3339f3fa157bdd63f22f5a579f308c89 *tests/data/fate/matroska-vp8-alpha-remux.matroska -235015 tests/data/fate/matroska-vp8-alpha-remux.matroska +635702724143e90d2a3ec457f65676cf *tests/data/fate/matroska-vp8-alpha-remux.matroska +235026 tests/data/fate/matroska-vp8-alpha-remux.matroska #tb 0: 1/1000 #media_type 0: video #codec_id 0: vp8 diff --git a/tests/ref/fate/matroska-zero-length-block b/tests/ref/fate/matroska-zero-length-block index 3987cc14c4..0f90ccbdd7 100644 --- a/tests/ref/fate/matroska-zero-length-block +++ b/tests/ref/fate/matroska-zero-length-block @@ -1,5 +1,5 @@ -f577fad2fff41d6e055f605281582b8d *tests/data/fate/matroska-zero-length-block.matroska -634 tests/data/fate/matroska-zero-length-block.matroska +b9a8a67ffdba18eec1c04827d3d404ca *tests/data/fate/matroska-zero-length-block.matroska +645 tests/data/fate/matroska-zero-length-block.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: subrip diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index d037c01b32..484198aaa4 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,5 +1,5 @@ -69dc9d35fdfadccb28c7baf401776ec3 *tests/data/fate/rgb24-mkv.matroska -58215 tests/data/fate/rgb24-mkv.matroska +4801308890e7a9db51fc13b05f817165 *tests/data/fate/rgb24-mkv.matroska +58226 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/shortest-sub b/tests/ref/fate/shortest-sub index b6571b4f32..4db0e13328 100644 --- a/tests/ref/fate/shortest-sub +++ b/tests/ref/fate/shortest-sub @@ -1,5 +1,5 @@ -d334a0eee71351ddad0a63011107909f *tests/data/fate/shortest-sub.matroska -139240 tests/data/fate/shortest-sub.matroska +791a2ce136bef538491bbe31ac0134b1 *tests/data/fate/shortest-sub.matroska +139262 tests/data/fate/shortest-sub.matroska #extradata 1: 167, 0xf7272d5f #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/lavf-fate/av1.mkv b/tests/ref/lavf-fate/av1.mkv index 382e3aeee3..685fd70811 100644 --- a/tests/ref/lavf-fate/av1.mkv +++ b/tests/ref/lavf-fate/av1.mkv @@ -1,3 +1,3 @@ -7d2c39dd98d5776425a4015e1eead6c6 *tests/data/lavf-fate/lavf.av1.mkv -55646 tests/data/lavf-fate/lavf.av1.mkv +279268e8d6ffcc2299e725a756bbb1a0 *tests/data/lavf-fate/lavf.av1.mkv +55657 tests/data/lavf-fate/lavf.av1.mkv tests/data/lavf-fate/lavf.av1.mkv CRC=0x7c27cc15 diff --git a/tests/ref/lavf/mka b/tests/ref/lavf/mka index 93a0b8f71a..40b1f07f9b 100644 --- a/tests/ref/lavf/mka +++ b/tests/ref/lavf/mka @@ -1,3 +1,3 @@ -77db16a9fe1c42a230c85124bfb40cad *tests/data/lavf/lavf.mka -43573 tests/data/lavf/lavf.mka +dffd74918d13be7dd07e83832de3a15c *tests/data/lavf/lavf.mka +43584 tests/data/lavf/lavf.mka tests/data/lavf/lavf.mka CRC=0x3a1da17e diff --git a/tests/ref/lavf/mkv b/tests/ref/lavf/mkv index fbd40fc1cb..0aeb7cfae6 100644 --- a/tests/ref/lavf/mkv +++ b/tests/ref/lavf/mkv @@ -1,3 +1,3 @@ -32b87b6adbe76df1008bc074f82fabb0 *tests/data/lavf/lavf.mkv -320417 tests/data/lavf/lavf.mkv +fde4f0580865684b878f0e13997213af *tests/data/lavf/lavf.mkv +320439 tests/data/lavf/lavf.mkv tests/data/lavf/lavf.mkv CRC=0xec6c3c68 diff --git a/tests/ref/lavf/mkv_attachment b/tests/ref/lavf/mkv_attachment index 2966a827cc..6ab72b9a45 100644 --- a/tests/ref/lavf/mkv_attachment +++ b/tests/ref/lavf/mkv_attachment @@ -1,3 +1,3 @@ -41739c51209d94b4763f9dbe4d1e1dc9 *tests/data/lavf/lavf.mkv_attachment -472567 tests/data/lavf/lavf.mkv_attachment +c75c844f592d44c2a79ff5fc1e8179e0 *tests/data/lavf/lavf.mkv_attachment +472589 tests/data/lavf/lavf.mkv_attachment tests/data/lavf/lavf.mkv_attachment CRC=0xec6c3c68 -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-21 18:00 ` [FFmpeg-devel] [PATCH v2 " James Almer @ 2023-03-24 11:45 ` Anton Khirnov 2023-03-24 11:50 ` James Almer 0 siblings, 1 reply; 23+ messages in thread From: Anton Khirnov @ 2023-03-24 11:45 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting James Almer (2023-03-21 19:00:01) > @@ -3095,6 +3153,12 @@ after_cues: > avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); > > put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); > + if (track->max_blockaddid == 4) { // HDR10+ Maybe this magic 4 deserves a name too? -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-24 11:45 ` Anton Khirnov @ 2023-03-24 11:50 ` James Almer 2023-03-24 11:58 ` Anton Khirnov 0 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-24 11:50 UTC (permalink / raw) To: ffmpeg-devel On 3/24/2023 8:45 AM, Anton Khirnov wrote: > Quoting James Almer (2023-03-21 19:00:01) >> @@ -3095,6 +3153,12 @@ after_cues: >> avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); >> >> put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); >> + if (track->max_blockaddid == 4) { // HDR10+ > > Maybe this magic 4 deserves a name too? Is has no name. See https://www.matroska.org/technical/codec_specs.html#itu-t35-metadata It only defines a name for the BlockAddIDType, which i used, and constricts the BlockAddIDValue to be used for it to 4. It's not necessarily HDR10+ (i can remove that comment if it makes it look like it should be named), it's potentially any ITU-T T35 payload of which we only care about HDR10+, so i can't name it that. It's simply 4. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-24 11:50 ` James Almer @ 2023-03-24 11:58 ` Anton Khirnov 2023-03-24 12:59 ` James Almer 0 siblings, 1 reply; 23+ messages in thread From: Anton Khirnov @ 2023-03-24 11:58 UTC (permalink / raw) To: FFmpeg development discussions and patches Quoting James Almer (2023-03-24 12:50:40) > On 3/24/2023 8:45 AM, Anton Khirnov wrote: > > Quoting James Almer (2023-03-21 19:00:01) > >> @@ -3095,6 +3153,12 @@ after_cues: > >> avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); > >> > >> put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); > >> + if (track->max_blockaddid == 4) { // HDR10+ > > > > Maybe this magic 4 deserves a name too? > > Is has no name. See > https://www.matroska.org/technical/codec_specs.html#itu-t35-metadata > > It only defines a name for the BlockAddIDType, which i used, and > constricts the BlockAddIDValue to be used for it to 4. > It's not necessarily HDR10+ (i can remove that comment if it makes it > look like it should be named), it's potentially any ITU-T T35 payload of > which we only care about HDR10+, so i can't name it that. It's simply 4. MATROSKA_BLOCKADDITIONAL_ITUT35_VAL then? -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-24 11:58 ` Anton Khirnov @ 2023-03-24 12:59 ` James Almer 2023-03-24 15:11 ` Jerome Martinez 0 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-24 12:59 UTC (permalink / raw) To: ffmpeg-devel On 3/24/2023 8:58 AM, Anton Khirnov wrote: > Quoting James Almer (2023-03-24 12:50:40) >> On 3/24/2023 8:45 AM, Anton Khirnov wrote: >>> Quoting James Almer (2023-03-21 19:00:01) >>>> @@ -3095,6 +3153,12 @@ after_cues: >>>> avio_seek(mkv->track.bc, track->blockadditionmapping_offset, SEEK_SET); >>>> >>>> put_ebml_uint(mkv->track.bc, MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); >>>> + if (track->max_blockaddid == 4) { // HDR10+ >>> >>> Maybe this magic 4 deserves a name too? >> >> Is has no name. See >> https://www.matroska.org/technical/codec_specs.html#itu-t35-metadata >> >> It only defines a name for the BlockAddIDType, which i used, and >> constricts the BlockAddIDValue to be used for it to 4. >> It's not necessarily HDR10+ (i can remove that comment if it makes it >> look like it should be named), it's potentially any ITU-T T35 payload of >> which we only care about HDR10+, so i can't name it that. It's simply 4. > > MATROSKA_BLOCKADDITIONAL_ITUT35_VAL then? 4 as BlockAddID is valid for any mapped BlockAddIDType value, not just MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35. But ok, i'll add a #define for it. If we ever start writing other types, like SMPTE ST 12-1 Timecode, we could just make sure to never use 4 for it. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-24 12:59 ` James Almer @ 2023-03-24 15:11 ` Jerome Martinez 2023-03-24 15:39 ` James Almer 0 siblings, 1 reply; 23+ messages in thread From: Jerome Martinez @ 2023-03-24 15:11 UTC (permalink / raw) To: ffmpeg-devel On 24/03/2023 13:59, James Almer wrote: > On 3/24/2023 8:58 AM, Anton Khirnov wrote: >> Quoting James Almer (2023-03-24 12:50:40) >>> On 3/24/2023 8:45 AM, Anton Khirnov wrote: >>>> Quoting James Almer (2023-03-21 19:00:01) >>>>> @@ -3095,6 +3153,12 @@ after_cues: >>>>> avio_seek(mkv->track.bc, >>>>> track->blockadditionmapping_offset, SEEK_SET); >>>>> put_ebml_uint(mkv->track.bc, >>>>> MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); >>>>> + if (track->max_blockaddid == 4) { // HDR10+ >>>> >>>> Maybe this magic 4 deserves a name too? >>> >>> Is has no name. See >>> https://www.matroska.org/technical/codec_specs.html#itu-t35-metadata >>> >>> It only defines a name for the BlockAddIDType, which i used, and >>> constricts the BlockAddIDValue to be used for it to 4. >>> It's not necessarily HDR10+ (i can remove that comment if it makes it >>> look like it should be named), it's potentially any ITU-T T35 >>> payload of >>> which we only care about HDR10+, so i can't name it that. It's >>> simply 4. >> >> MATROSKA_BLOCKADDITIONAL_ITUT35_VAL then? > > 4 as BlockAddID is valid for any mapped BlockAddIDType value, not just > MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35. > But ok, i'll add a #define for it. If we ever start writing other > types, like SMPTE ST 12-1 Timecode, we could just make sure to never > use 4 for it. SMPTE ST 12-1 would have a BlockAddIDType of 121 [1] for differentiating timecode streams from ITU T.35, true, but using 4 as BlockAddID for something not ITU T.35 may create problems with some legacy decoders and would not be recommended. So IMO flagging 4 as MATROSKA_BLOCKADDITIONAL_ITUT35_VAL would make sense there. I suggested a patch to the Matroska spec for being explicit about this value 4 in [2]. A small comment about "// HDR10+", as it is not only for HDR10+ (ITU T.35 may contain lot of other things, depending on itu_t_t35_terminal_provider_code etc), IMO it should be commented as "// ITU T.35". By the way, it is great to see this patch, it is very useful and would help in making a similar patch for SMPTE ST 12-1 timecode. [1] https://github.com/ietf-wg-cellar/matroska-specification/blob/master/block_additional_mappings/smpte-st12-1-timecode.md [2] https://github.com/ietf-wg-cellar/matroska-specification/pull/745 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data 2023-03-24 15:11 ` Jerome Martinez @ 2023-03-24 15:39 ` James Almer 0 siblings, 0 replies; 23+ messages in thread From: James Almer @ 2023-03-24 15:39 UTC (permalink / raw) To: ffmpeg-devel On 3/24/2023 12:11 PM, Jerome Martinez wrote: > On 24/03/2023 13:59, James Almer wrote: >> On 3/24/2023 8:58 AM, Anton Khirnov wrote: >>> Quoting James Almer (2023-03-24 12:50:40) >>>> On 3/24/2023 8:45 AM, Anton Khirnov wrote: >>>>> Quoting James Almer (2023-03-21 19:00:01) >>>>>> @@ -3095,6 +3153,12 @@ after_cues: >>>>>> avio_seek(mkv->track.bc, >>>>>> track->blockadditionmapping_offset, SEEK_SET); >>>>>> put_ebml_uint(mkv->track.bc, >>>>>> MATROSKA_ID_TRACKMAXBLKADDID, track->max_blockaddid); >>>>>> + if (track->max_blockaddid == 4) { // HDR10+ >>>>> >>>>> Maybe this magic 4 deserves a name too? >>>> >>>> Is has no name. See >>>> https://www.matroska.org/technical/codec_specs.html#itu-t35-metadata >>>> >>>> It only defines a name for the BlockAddIDType, which i used, and >>>> constricts the BlockAddIDValue to be used for it to 4. >>>> It's not necessarily HDR10+ (i can remove that comment if it makes it >>>> look like it should be named), it's potentially any ITU-T T35 >>>> payload of >>>> which we only care about HDR10+, so i can't name it that. It's >>>> simply 4. >>> >>> MATROSKA_BLOCKADDITIONAL_ITUT35_VAL then? >> >> 4 as BlockAddID is valid for any mapped BlockAddIDType value, not just >> MATROSKA_BLOCK_ADD_ID_TYPE_ITU_T_T35. >> But ok, i'll add a #define for it. If we ever start writing other >> types, like SMPTE ST 12-1 Timecode, we could just make sure to never >> use 4 for it. > > SMPTE ST 12-1 would have a BlockAddIDType of 121 [1] for differentiating > timecode streams from ITU T.35, true, but using 4 as BlockAddID for > something not ITU T.35 may create problems with some legacy decoders and > would not be recommended. > So IMO flagging 4 as MATROSKA_BLOCKADDITIONAL_ITUT35_VAL would make > sense there. > I suggested a patch to the Matroska spec for being explicit about this > value 4 in [2]. > > A small comment about "// HDR10+", as it is not only for HDR10+ (ITU > T.35 may contain lot of other things, depending on > itu_t_t35_terminal_provider_code etc), IMO it should be commented as "// > ITU T.35". > > By the way, it is great to see this patch, it is very useful and would > help in making a similar patch for SMPTE ST 12-1 timecode. > > [1] > https://github.com/ietf-wg-cellar/matroska-specification/blob/master/block_additional_mappings/smpte-st12-1-timecode.md Currently, the block_additional_mappings page only lists SMPTE ST 12-1 timecode. For the rest (ITU-T T.35, Dovi stuff, Opaque data, etc) you need to stumble upon them in https://www.matroska.org/technical/codec_specs.html#block-addition-mappings, which is confusing. Could these be added to the proper section too? > [2] https://github.com/ietf-wg-cellar/matroska-specification/pull/745 > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH 7/7] fate/matroska: add HDR10+ muxing tests 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer ` (4 preceding siblings ...) 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data James Almer @ 2023-03-21 17:06 ` James Almer 2023-03-21 18:00 ` [FFmpeg-devel] [PATCH v2 " James Almer 5 siblings, 1 reply; 23+ messages in thread From: James Almer @ 2023-03-21 17:06 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- tests/fate/matroska.mak | 8 +++ tests/ref/fate/matroska-hdr10-plus-remux | 82 ++++++++++++++++++++++++ tests/ref/fate/webm-hdr10-plus-remux | 82 ++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 tests/ref/fate/matroska-hdr10-plus-remux create mode 100644 tests/ref/fate/webm-hdr10-plus-remux diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 39137ad4be..2f1266b298 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -217,6 +217,14 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, WEBM MATROSKA, WEBVTT_DEMUXER) \ += fate-webm-webvtt-remux fate-webm-webvtt-remux: CMD = transcode webvtt $(TARGET_SAMPLES)/sub/WebVTT_capability_tester.vtt webm "-map 0 -map 0 -map 0 -map 0 -c:s copy -disposition:0 original+descriptions+hearing_impaired -disposition:1 lyrics+default+metadata -disposition:2 comment+forced -disposition:3 karaoke+captions+dub" "-map 0:0 -map 0:1 -c copy" "-show_entries stream_disposition:stream=index,codec_name:packet=stream_index,pts:packet_side_data_list -show_data_hash CRC32" +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, WEBM MATROSKA, VP9_PARSER) \ + += fate-webm-hdr10-plus-remux +fate-webm-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.mkv webm "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_frames" + +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, VP9_PARSER) \ + += fate-matroska-hdr10-plus-remux +fate-matroska-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.mkv matroska "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_frames" + FATE_SAMPLES_AVCONV += $(FATE_MATROSKA-yes) FATE_SAMPLES_FFPROBE += $(FATE_MATROSKA_FFPROBE-yes) FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_MATROSKA_FFMPEG_FFPROBE-yes) diff --git a/tests/ref/fate/matroska-hdr10-plus-remux b/tests/ref/fate/matroska-hdr10-plus-remux new file mode 100644 index 0000000000..d86713ea05 --- /dev/null +++ b/tests/ref/fate/matroska-hdr10-plus-remux @@ -0,0 +1,82 @@ +0f941512f69b1cc0ac27f3375e56a0cc *tests/data/fate/matroska-hdr10-plus-remux.matroska +13892 tests/data/fate/matroska-hdr10-plus-remux.matroska +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vp9 +#dimensions 0: 1280x720 +#sar 0: 1/1 +0, 0, 0, 40, 13350, 0x5f64e443, S=1, 11304 +[FRAME] +media_type=video +stream_index=0 +key_frame=1 +pts=0 +pts_time=0.000000 +pkt_dts=0 +pkt_dts_time=0.000000 +best_effort_timestamp=0 +best_effort_timestamp_time=0.000000 +pkt_duration=40 +pkt_duration_time=0.040000 +duration=40 +duration_time=0.040000 +pkt_pos=436 +pkt_size=13350 +width=1280 +height=720 +pix_fmt=yuv420p10le +sample_aspect_ratio=1:1 +pict_type=I +coded_picture_number=0 +display_picture_number=0 +interlaced_frame=0 +top_field_first=0 +repeat_pict=0 +color_range=tv +color_space=unknown +color_primaries=unknown +color_transfer=unknown +chroma_location=unspecified +[SIDE_DATA] +side_data_type=HDR Dynamic Metadata SMPTE2094-40 (HDR10+) +application version=1 +num_windows=1 +targeted_system_display_maximum_luminance=400/1 +maxscl=3340/100000 +maxscl=2870/100000 +maxscl=2720/100000 +average_maxrgb=510/100000 +num_distribution_maxrgb_percentiles=9 +distribution_maxrgb_percentage=1 +distribution_maxrgb_percentile=30/100000 +distribution_maxrgb_percentage=5 +distribution_maxrgb_percentile=2940/100000 +distribution_maxrgb_percentage=10 +distribution_maxrgb_percentile=255/100000 +distribution_maxrgb_percentage=25 +distribution_maxrgb_percentile=70/100000 +distribution_maxrgb_percentage=50 +distribution_maxrgb_percentile=1340/100000 +distribution_maxrgb_percentage=75 +distribution_maxrgb_percentile=1600/100000 +distribution_maxrgb_percentage=90 +distribution_maxrgb_percentile=1850/100000 +distribution_maxrgb_percentage=95 +distribution_maxrgb_percentile=1950/100000 +distribution_maxrgb_percentage=99 +distribution_maxrgb_percentile=2940/100000 +fraction_bright_pixels=1/1000 +knee_point_x=0/4095 +knee_point_y=0/4095 +num_bezier_curve_anchors=9 +bezier_curve_anchors=102/1023 +bezier_curve_anchors=205/1023 +bezier_curve_anchors=307/1023 +bezier_curve_anchors=410/1023 +bezier_curve_anchors=512/1023 +bezier_curve_anchors=614/1023 +bezier_curve_anchors=717/1023 +bezier_curve_anchors=819/1023 +bezier_curve_anchors=922/1023 +[/SIDE_DATA] +[/FRAME] diff --git a/tests/ref/fate/webm-hdr10-plus-remux b/tests/ref/fate/webm-hdr10-plus-remux new file mode 100644 index 0000000000..bb6eda0abe --- /dev/null +++ b/tests/ref/fate/webm-hdr10-plus-remux @@ -0,0 +1,82 @@ +30923c8d916f5719f62727f24957974f *tests/data/fate/webm-hdr10-plus-remux.webm +13843 tests/data/fate/webm-hdr10-plus-remux.webm +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vp9 +#dimensions 0: 1280x720 +#sar 0: 1/1 +0, 0, 0, 40, 13350, 0x5f64e443, S=1, 11304 +[FRAME] +media_type=video +stream_index=0 +key_frame=1 +pts=0 +pts_time=0.000000 +pkt_dts=0 +pkt_dts_time=0.000000 +best_effort_timestamp=0 +best_effort_timestamp_time=0.000000 +pkt_duration=40 +pkt_duration_time=0.040000 +duration=40 +duration_time=0.040000 +pkt_pos=393 +pkt_size=13350 +width=1280 +height=720 +pix_fmt=yuv420p10le +sample_aspect_ratio=1:1 +pict_type=I +coded_picture_number=0 +display_picture_number=0 +interlaced_frame=0 +top_field_first=0 +repeat_pict=0 +color_range=tv +color_space=unknown +color_primaries=unknown +color_transfer=unknown +chroma_location=unspecified +[SIDE_DATA] +side_data_type=HDR Dynamic Metadata SMPTE2094-40 (HDR10+) +application version=1 +num_windows=1 +targeted_system_display_maximum_luminance=400/1 +maxscl=3340/100000 +maxscl=2870/100000 +maxscl=2720/100000 +average_maxrgb=510/100000 +num_distribution_maxrgb_percentiles=9 +distribution_maxrgb_percentage=1 +distribution_maxrgb_percentile=30/100000 +distribution_maxrgb_percentage=5 +distribution_maxrgb_percentile=2940/100000 +distribution_maxrgb_percentage=10 +distribution_maxrgb_percentile=255/100000 +distribution_maxrgb_percentage=25 +distribution_maxrgb_percentile=70/100000 +distribution_maxrgb_percentage=50 +distribution_maxrgb_percentile=1340/100000 +distribution_maxrgb_percentage=75 +distribution_maxrgb_percentile=1600/100000 +distribution_maxrgb_percentage=90 +distribution_maxrgb_percentile=1850/100000 +distribution_maxrgb_percentage=95 +distribution_maxrgb_percentile=1950/100000 +distribution_maxrgb_percentage=99 +distribution_maxrgb_percentile=2940/100000 +fraction_bright_pixels=1/1000 +knee_point_x=0/4095 +knee_point_y=0/4095 +num_bezier_curve_anchors=9 +bezier_curve_anchors=102/1023 +bezier_curve_anchors=205/1023 +bezier_curve_anchors=307/1023 +bezier_curve_anchors=410/1023 +bezier_curve_anchors=512/1023 +bezier_curve_anchors=614/1023 +bezier_curve_anchors=717/1023 +bezier_curve_anchors=819/1023 +bezier_curve_anchors=922/1023 +[/SIDE_DATA] +[/FRAME] -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
* [FFmpeg-devel] [PATCH v2 7/7] fate/matroska: add HDR10+ muxing tests 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 7/7] fate/matroska: add HDR10+ muxing tests James Almer @ 2023-03-21 18:00 ` James Almer 0 siblings, 0 replies; 23+ messages in thread From: James Almer @ 2023-03-21 18:00 UTC (permalink / raw) To: ffmpeg-devel Signed-off-by: James Almer <jamrial@gmail.com> --- Now showing the packets instead of frames, to prevent unnecessary decoding that was not even considered by the test's dependencies. tests/fate/matroska.mak | 8 ++++++++ tests/ref/fate/matroska-hdr10-plus-remux | 24 ++++++++++++++++++++++++ tests/ref/fate/webm-hdr10-plus-remux | 24 ++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 tests/ref/fate/matroska-hdr10-plus-remux create mode 100644 tests/ref/fate/webm-hdr10-plus-remux diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 39137ad4be..a2e43c7c3a 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -217,6 +217,14 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, WEBM MATROSKA, WEBVTT_DEMUXER) \ += fate-webm-webvtt-remux fate-webm-webvtt-remux: CMD = transcode webvtt $(TARGET_SAMPLES)/sub/WebVTT_capability_tester.vtt webm "-map 0 -map 0 -map 0 -map 0 -c:s copy -disposition:0 original+descriptions+hearing_impaired -disposition:1 lyrics+default+metadata -disposition:2 comment+forced -disposition:3 karaoke+captions+dub" "-map 0:0 -map 0:1 -c copy" "-show_entries stream_disposition:stream=index,codec_name:packet=stream_index,pts:packet_side_data_list -show_data_hash CRC32" +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, WEBM MATROSKA, VP9_PARSER) \ + += fate-webm-hdr10-plus-remux +fate-webm-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.mkv webm "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_packets" + +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, VP9_PARSER) \ + += fate-matroska-hdr10-plus-remux +fate-matroska-hdr10-plus-remux: CMD = transcode webm $(TARGET_SAMPLES)/mkv/hdr10_plus_vp9_sample.mkv matroska "-map 0 -c:v copy" "-map 0 -c:v copy" "-show_packets" + FATE_SAMPLES_AVCONV += $(FATE_MATROSKA-yes) FATE_SAMPLES_FFPROBE += $(FATE_MATROSKA_FFPROBE-yes) FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_MATROSKA_FFMPEG_FFPROBE-yes) diff --git a/tests/ref/fate/matroska-hdr10-plus-remux b/tests/ref/fate/matroska-hdr10-plus-remux new file mode 100644 index 0000000000..606c096c26 --- /dev/null +++ b/tests/ref/fate/matroska-hdr10-plus-remux @@ -0,0 +1,24 @@ +0f941512f69b1cc0ac27f3375e56a0cc *tests/data/fate/matroska-hdr10-plus-remux.matroska +13892 tests/data/fate/matroska-hdr10-plus-remux.matroska +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vp9 +#dimensions 0: 1280x720 +#sar 0: 1/1 +0, 0, 0, 40, 13350, 0x5f64e443, S=1, 11304 +[PACKET] +codec_type=video +stream_index=0 +pts=0 +pts_time=0.000000 +dts=0 +dts_time=0.000000 +duration=40 +duration_time=0.040000 +size=13350 +pos=436 +flags=K__ +[SIDE_DATA] +side_data_type=HDR10+ Dynamic Metadata (SMPTE 2094-40) +[/SIDE_DATA] +[/PACKET] diff --git a/tests/ref/fate/webm-hdr10-plus-remux b/tests/ref/fate/webm-hdr10-plus-remux new file mode 100644 index 0000000000..c41a7619db --- /dev/null +++ b/tests/ref/fate/webm-hdr10-plus-remux @@ -0,0 +1,24 @@ +30923c8d916f5719f62727f24957974f *tests/data/fate/webm-hdr10-plus-remux.webm +13843 tests/data/fate/webm-hdr10-plus-remux.webm +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vp9 +#dimensions 0: 1280x720 +#sar 0: 1/1 +0, 0, 0, 40, 13350, 0x5f64e443, S=1, 11304 +[PACKET] +codec_type=video +stream_index=0 +pts=0 +pts_time=0.000000 +dts=0 +dts_time=0.000000 +duration=40 +duration_time=0.040000 +size=13350 +pos=393 +flags=K__ +[SIDE_DATA] +side_data_type=HDR10+ Dynamic Metadata (SMPTE 2094-40) +[/SIDE_DATA] +[/PACKET] -- 2.40.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2023-03-24 15:39 UTC | newest] Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-03-21 17:06 [FFmpeg-devel] [PATCH 1/7] avformat/matroskadec: support parsing more than one BlockMore element James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 2/7] avformat/matroskadec: set the default value for BlockAddIDType James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 3/7] avformat/matroskadec: export Dynamic HDR10+ packet side data James Almer 2023-03-24 11:18 ` Anton Khirnov 2023-03-24 11:28 ` James Almer 2023-03-24 11:40 ` Anton Khirnov 2023-03-24 12:34 ` James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 4/7] avformat/matroska: add a few more Block Addition ID Type enum values James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element James Almer 2023-03-21 17:59 ` [FFmpeg-devel] [PATCH v2 " James Almer 2023-03-24 11:37 ` [FFmpeg-devel] [PATCH " Anton Khirnov 2023-03-24 11:41 ` James Almer 2023-03-24 11:43 ` Anton Khirnov 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 6/7] avformat/matroskaenc: support writing Dynamic HDR10+ packet side data James Almer 2023-03-21 18:00 ` [FFmpeg-devel] [PATCH v2 " James Almer 2023-03-24 11:45 ` Anton Khirnov 2023-03-24 11:50 ` James Almer 2023-03-24 11:58 ` Anton Khirnov 2023-03-24 12:59 ` James Almer 2023-03-24 15:11 ` Jerome Martinez 2023-03-24 15:39 ` James Almer 2023-03-21 17:06 ` [FFmpeg-devel] [PATCH 7/7] fate/matroska: add HDR10+ muxing tests James Almer 2023-03-21 18:00 ` [FFmpeg-devel] [PATCH v2 " James Almer
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git