From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 4BE354BCD6 for ; Thu, 22 May 2025 09:37:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id A61A368D3BD; Thu, 22 May 2025 12:37:25 +0300 (EEST) Received: from out162-62-57-210.mail.qq.com (out162-62-57-210.mail.qq.com [162.62.57.210]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 77ECA68D127 for ; Thu, 22 May 2025 12:37:17 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1747906627; bh=hjh3MprdIYBgVnUu6+uacPxy+XX3Xh1yoDER05Ld1hA=; h=From:To:Cc:Subject:Date; b=nCstFFXhi4QOsCQ8uO56TImKpetj0ntCr3NH+9NVlpFqpT3inointkWBLt8jNq4y5 azzYq9fuJ111ABgr26cL+JnFS0IMXtorjDRUx41sujnKSUAnOXiNXFCWdM1SEROMDf 5zZBdZ2jdqUAVB8+Nk3J5vu7LoDDcr7gfd286WLs= Received: from localhost.localdomain ([119.147.10.242]) by newxmesmtplogicsvrszb16-1.qq.com (NewEsmtp) with SMTP id 946BA040; Thu, 22 May 2025 17:37:06 +0800 X-QQ-mid: xmsmtpt1747906626tj4qa5pv0 Message-ID: X-QQ-XMAILINFO: NSmesZGuqQTY9t4gdooo8nRa5tjFUHI/+foTjW/+/ibA6boBqTqTOuBuwnlc2X KgFKbKg2/s7MJAvsfQfAqV6ZwfxNSljZxpkDmhN4I1CLz+d3BQ2WALeYQK9ovBy2IPBJ1Btsx+dF cWWhLvrPjlR1CtROAPo2vWv7OSYcDrNgMZRQnWtfP2N5iwUuP1Sd/nE9n2K7MN9IPNHF8Z8ueclW wuxzU33UbRk8my5Hn/pLuMr1Ta9fbTmD0QxjlW2m8jlKPc/vEfrvaW5i4eI8Nm2+RtFz3lhO3X+y 8T7b5S05UYuOAHr7ovWzO9dD+IDNVDtzKydsgIQdpjGUhygmHVvmXMw7K4U0NtlNqTWpTXV8bhmY Y9E2cBOtXhSjsPAmgfEHsJh53auN9nLI9Rg6cvUydb9CAN8DKX0Eg2iyuOwq+7brouqaCJ6V1N8t XcVKcW98ueA3FcEW689n8zETexZT2Bp8pzSghcMF4aK+DMglm7IwMIaYcsYLHb+vU3QP0+LlmjcT 6qWDY1LOEwflfi6va5CnUCml1gL0QoanhdH6gANQWN1mZ903Lfvc86FGUBGoqazUfQvLlBOG2qG9 99cTjnmwSbW7Qo+RN6Oz09dCXLwOT+/+xuda8yX3PfWABzldTkvq/sEfZJ2Fj0GDGf5jD0f/3Zsy jpvp5h/lcgpQNFCrl5Dq8rqeEJdG3oQcdxEJIHykibF4DU5/pef66zlAgIpYiW9rhC9NjpWlenXq DIqfabOJLQ14DdxMiakgIVPIo47PbckHvBfITv96aZuBys1hShKGBfREdjD74PYCRNyV+s3zGL08 lSwwIKN8jWqmQCImcQidBvg5ErkEKnbQEEkNXzEPqYHCVue1AvNKVHugwb2h2cxwoyXsYDp4Kf9F zMraIah40Pm0KHPsyFHsnfKz+bxcVQ5f+4mMEXRZtehfhh9pIhMjBzTonjKSoCwWj7x2MSB7Hflo Fo0t+hMZ2q0IWZK/L9302WbQZMOWZK39DFjnDqdNRFR+JnrE1c6PhZbmLCvKe/ X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 May 2025 17:37:05 +0800 X-OQ-MSGID: <20250522093705.92852-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/movenc: Fix flush fragment 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 Cc: Zhao Zhili 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: From: Zhao Zhili The follow cmd output corrupted file before the patch: ffmpeg -f lavfi -i color=blue,trim=duration=0.04 \ -f lavfi -i anullsrc,atrim=duration=2 \ -movflags +empty_moov+hybrid_fragmented \ -frag_duration 1000000 \ -frag_interleave 1 \ output.mp4 1. first_track is the first track with track->entry != 0. As in the command above, video track (track index 0) has a single frame. When flush the second fragment, first_track is 1, the audio track. 2. write_moof = i == first_track, so write_moof is false for i = 0. 3. When mov->frag_interleave != 0, mov->mdat_buf != NULL, because it contains audio data. So avio_write is called before write_moof, that is, the data write before moof, and mov_finish_fragment executed with wrong mdat_start. 4. With normal fmp4 output, the error isn't obvious. With hybrid_fragmented, ffplay output.mp4 shows a lot of error messages. --- libavformat/movenc.c | 4 ++-- tests/fate/mov.mak | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 4bc8bd1b2a..844a371808 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -6509,9 +6509,9 @@ static int mov_flush_fragment(AVFormatContext *s, int force) int buf_size, write_moof = 1, moof_tracks = -1; uint8_t *buf; + if (!track->entry) + continue; if (mov->flags & FF_MOV_FLAG_SEPARATE_MOOF) { - if (!track->entry) - continue; mdat_size = avio_tell(track->mdat_buf); moof_tracks = i; } else { diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index f7e5e52217..6ab61e9f00 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -84,6 +84,11 @@ fate-mov-ibi-elst-starts-b: CMD = framemd5 -flags +bitexact -i $(TARGET_SAMPLES) # Makes sure that we handle overlapping framgments fate-mov-frag-overlap: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/frag_overlap.mp4 +fate-mov-mp4-frag-flush: CMD = md5 -f lavfi -i color=blue,format=rgb24,trim=duration=0.04 -f lavfi -i anullsrc,aformat=s16,atrim=duration=2 -c:v png -c:a pcm_s16le -movflags +empty_moov+hybrid_fragmented -frag_duration 1000000 -frag_interleave 1 -f mp4 +fate-mov-mp4-frag-flush: CMP = oneline +fate-mov-mp4-frag-flush: REF = a10c0e2e2dfc120f31ca5e59e0e4392a +FATE_MOV-$(call ALLYES, LAVFI_INDEV, COLOR_FILTER, FORMAT_FILTER, TRIM_FILTER, ANULL_FILTER, AFORMAT_FILTER, ATRIM_FILTER, PNG_ENCODER, PCM_S16LE_ENCODER, MOV_MUXER) += fate-mov-mp4-frag-flush + # Makes sure that we pick the right frames according to edit list when there is no keyframe with PTS < edit list start. # For example, when video starts on a B-frame, and edit list starts on that B-frame too. # GOP structure : B B I in presentation order. -- 2.46.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".