From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 5540845B5D for ; Tue, 21 Mar 2023 17:07:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5F9EA68C250; Tue, 21 Mar 2023 19:07:05 +0200 (EET) Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C36FD68C248 for ; Tue, 21 Mar 2023 19:06:57 +0200 (EET) Received: by mail-oi1-f174.google.com with SMTP id bm2so2725418oib.4 for ; Tue, 21 Mar 2023 10:06:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679418416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=C2UdzBHi+E9ILEegRNfYTMy0dKh21dlTjKLEbJ3e0Vs=; b=kpPb5ywcG0xH04wYBCLKLfCF/cvaINjZV352ba9BUDge0TpwfB1QIsHVcgRQa6qYgl MHYsHmM61FWRsIDzYd1ea7JgMK2tpTPdZYejBFL/D+B2yqiCN7b0fJS9VySkfA5ew6/2 HPs+7LXLz1E8FM0EnnuXkKoDihwgu+j3x0YCrq6LuAQEFox5dE1/NRjXpc7ps30UGf+v vu8UpFY0DW2nvaq7gnlwc0FjzhDCKBH73+jWpRIvXFSR2hkiB5JsSh05vaLzY0AFGTvB EVbP+xP/ImZC/lfG6P/ibnuee6LkL8z4PtWx6P4lxAhewr+eM1As0i9AlVDBBoK73hx+ 26xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679418416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=C2UdzBHi+E9ILEegRNfYTMy0dKh21dlTjKLEbJ3e0Vs=; b=LSDnF5+QISjN9/FNyJ9L8OXSWIVa8+Ap971EzE1e019LVH73L2IANCJaC2n+4uiB4s vm+bSuRaK4EYpXX2K1NhDv/XqBw/DsmUC9+t0GrTuhzVRHRIuaqfTuI4HeGZp2Bv+7qa BhSK46DqWwJpTNlyNkkDVgSjMlOL+aaQUflqrf6AJbymoNucxnuVqw6JPbFlV2zgAbuP kqPFEEfjOoLdZFZ0XYjh8rEK6HoplWkTQQOSeg7cl0c+kn1pEKs8FPoC5sxvc3pEm3B5 X5mjgnAXIHTU5nlg10ArZ7JlNzk6fG7gRkqvc1StlKejSt1BESaORJLwlo95mbvHsnT1 lAPA== X-Gm-Message-State: AO0yUKWVHRS1z0FAwtyxG2OldZDHcXsSBjvB/At1poQTBRpqDMeV0Nca JhY/fUfq6bYE8OrAEk+De+FGHFIV0mw= X-Google-Smtp-Source: AK7set/fKyU2etQ/KQv2mUIEhXeLWscNs4WYaNY1+jhll+xMw4qqAOKnq3pVosZF9nXhAxPBhYKegA== X-Received: by 2002:aca:1012:0:b0:386:e5ba:4585 with SMTP id 18-20020aca1012000000b00386e5ba4585mr1521864oiq.9.1679418416231; Tue, 21 Mar 2023 10:06:56 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id b11-20020aca1b0b000000b003872148d322sm845876oib.22.2023.03.21.10.06.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 10:06:55 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 14:06:35 -0300 Message-Id: <20230321170637.10907-5-jamrial@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321170637.10907-1-jamrial@gmail.com> References: <20230321170637.10907-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avformat/matroskaenc: write a MaxBlockAdditionID element X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: A non zero value is mandatory for Matroska if the track has blocks with BlockAdditions. Signed-off-by: James Almer --- 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".