From patchwork Fri Dec 3 05:06:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 31898 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp211364iog; Thu, 2 Dec 2021 21:07:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJzKXArBO5YTS/7Qms7LRWiNPv90U8KKW37YwJWQQEsXnpfJAsHdA9MBRr+I0kX4m1t9iTt3 X-Received: by 2002:a05:6402:d05:: with SMTP id eb5mr24023923edb.360.1638508069736; Thu, 02 Dec 2021 21:07:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638508069; cv=none; d=google.com; s=arc-20160816; b=K8RjbM/CswOFcnc5m+wHaePmOuYEf3kx6gK86gjjWuf4Ik0nAyqq3J6Npv6MB6MuZt VBrD+ftSKLKFDO1sqSzTaZy2gncy8kfuXLYjW+npsX0+4/xXEWq+MTs4at+EkbzMxVrs lDJjLv3bF6dlxPVzsBqkT+b2bpiDk2sLAZHfHQTYQcBvd8Ihaa7BjApFcG9NeKfLuhQ8 ZOCgT1ZLL9smtVYfbXDHk0ZCURrI0pQR4d7HGSCtW7DofOjsma03vSTRySvP4jKNlBJH tyDnynqXb08Dt3CvI9/ZermTOsNjsV6ebvC78bm2T11jf3Hl37KoHwurZ4ZREtIr+/9S g2CQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=ez9xElHmnYUnUdL05vJu78U3w13Cgo3Zq/T0JA4T+Qg=; b=RHmggDkcyhZxZ3/QWLMgMUVogop3luHrONV1yjpXILKv8s0L06L2X6lyQIEQFZGzDX 3JWe2RUIjI7oxMSH7rsnN8KY84JUWYhy7+/uxnLi/taZceV57UUX/L389WtapBQ06CtF lsqzLR4z3dBJ9z4csSOohmzDb3N0rXzAhm4BhSJonXV0Z5HZNbNzxJqQjTehYEQ3gg1/ v/5tHKpCh71SgF1tAsNpws5IkZBcBV87J6prSYwweIO/l2Xzr8oP4bK+bk4COXT+X1Gm ApnmzWEvcA55o6Qcwj4X8BEvkU7kVb91lz9909Rx5zURrUHFHVVZ2AuPzaccZ+OD+Dlf MIVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=rf+jCv2H; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ka22si2009058ejb.262.2021.12.02.21.07.48; Thu, 02 Dec 2021 21:07:49 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=rf+jCv2H; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E92C568AE7A; Fri, 3 Dec 2021 07:07:25 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-80.mail.qq.com (out203-205-251-80.mail.qq.com [203.205.251.80]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 30BAE689988 for ; Fri, 3 Dec 2021 07:07:15 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1638508031; bh=IsF2kkI5hEA0SvCh1URJ954DJ61fKYYFTk/nbwANUBU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=rf+jCv2HTWgRc9q1S5xVwf2IrG3FU/hYXTujySSd7GFNSDbUG50AozbihkqRDcL0/ elganW5TO44KzFnQikMd114bB7kSPjQcKpg6HTS9Zu0bsK6yDSF9p+uXnKjAyHc2H5 sFWULSn6gwh0cXClWcc7cY7RJbuyvk3JRmMksITA= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.56]) by newxmesmtplogicsvrszb6.qq.com (NewEsmtp) with SMTP id 1C926A18; Fri, 03 Dec 2021 13:07:09 +0800 X-QQ-mid: xmsmtpt1638508030tvv58hlan Message-ID: X-QQ-XMAILINFO: ND3CPZxVFFQcKTep8b4Vb5+B6s6C871vx0sMuZ+mQYXI6l5WNON730d8rmpt0f ML5P4FXjXVgkmHkM5PW5KDYfjhh+DHTAvY22FJksdVXQCdt5u9J/sKhK8XohDcnHO3BqWOWdG/5x V4ReIxVOq7jcTIFyS3E3JhvoZwLtF9uFPdMMEIbSx/s9lCseVWeziJySRaZPDNV9UO+E9jkSw8c1 m1ZfbdJji5JWBZNU/zGmm3tjFr02gAZKHzkNgIfJBOp6TspL5KxLSONCVj3k8vLNOzdb82DjnbKz D2Wt9R3GcSBXrBXs0RwTzOzhQZPPKZgUs3h+cZja5CB61lwbzUsOQti3WCwdiTiNZbQXg9skupef 6I1cJokkPo9TIXpzDxpz7Ukzxj+mWUuHTMZrLc/dwx+zx3f5S6Bm1w2vDZV0/zyH6gnwQTWoP6PS DjwHvqAPKU2kwc+9kNiAStV3QSR+tL07gLdmF02HxfU0W4a7RqDMa++61RlMhysJlGx2gHim7+Ox +oSz/Ka3u2B9a9gcT/GBqQnOYHS/m6PPuwB+Cjt9csa0zBwvoTGtiK8jdp7nKX13pcZRNHmw43ne IeJDAUPV79q6vkijCybcPBvTHkMX/KIXD6ZelyEjGxkc9kCKOFikLXPiL6VaiuLFqDfiDMGlKM/f rnyR4Xcb3InTlxTJXdGirYsFtE6wRdouih8j/10NnG5duYHn8bx+R11dHGb2P7Rl19BMnOlfH4Gd 0pbp+zVyBKFQ9cIXKZL14cQJ/dEk88//cSkeDyA2nVZ5JSDykuPnLvQbBuVL6MUFfkicprzEqG4y vNAR02RlTNsQfsgDrjCzRfJOVvRSGwoYbmXQycnC//fMmilzCJxMKmqSCfpjf4ObA= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Dec 2021 13:06:54 +0800 X-OQ-MSGID: <20211203050657.72755-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211203050657.72755-1-quinkblack@foxmail.com> References: <20211203050657.72755-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avformat/movenc: fix tfra including non-sync entries 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: unzgS9zhTtnv --- libavformat/movenc.c | 17 ++++++++++++++++- libavformat/movenc.h | 1 + tests/ref/fate/movenc | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 634a829f28..06d3819591 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4650,6 +4650,7 @@ static int mov_add_tfra_entries(AVIOContext *pb, MOVMuxContext *mov, int tracks, info->time = track->cluster[0].dts + track->cluster[0].cts; info->duration = track->end_pts - (track->cluster[0].dts + track->cluster[0].cts); + info->first_sample_flags = track->cluster[0].flags; // If the pts is less than zero, we will have trimmed // away parts of the media track using an edit list, // and the corresponding start presentation time is zero. @@ -4932,8 +4933,20 @@ static int mov_write_moof_tag(AVIOContext *pb, MOVMuxContext *mov, int tracks, static int mov_write_tfra_tag(AVIOContext *pb, MOVTrack *track) { int64_t pos = avio_tell(pb); + int number_of_entry = 0; int i; + /* We can't write and then update number_of_entry, because we cannot fix + * the case when number_of_entry is zero, since zero indicates that every + * sample is a sync sample. So get number_of_entry first. + */ + for (i = 0; i < track->nb_frag_info; i++) { + if (track->frag_info[i].first_sample_flags & MOV_SYNC_SAMPLE) + number_of_entry++; + } + if (!number_of_entry) + return 0; + avio_wb32(pb, 0); /* size placeholder */ ffio_wfourcc(pb, "tfra"); avio_w8(pb, 1); /* version */ @@ -4941,8 +4954,10 @@ static int mov_write_tfra_tag(AVIOContext *pb, MOVTrack *track) avio_wb32(pb, track->track_id); avio_wb32(pb, 0); /* length of traf/trun/sample num */ - avio_wb32(pb, track->nb_frag_info); + avio_wb32(pb, number_of_entry); for (i = 0; i < track->nb_frag_info; i++) { + if (!(track->frag_info[i].first_sample_flags & MOV_SYNC_SAMPLE)) + continue; avio_wb64(pb, track->frag_info[i].time); avio_wb64(pb, track->frag_info[i].offset + track->data_offset); avio_w8(pb, 1); /* traf number */ diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 40077b1afe..f73604d6f3 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -80,6 +80,7 @@ typedef struct MOVFragmentInfo { int64_t duration; int64_t tfrf_offset; int size; + uint32_t first_sample_flags; } MOVFragmentInfo; typedef struct MOVTrack { diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc index 81ea75f372..70c66b7fd7 100644 --- a/tests/ref/fate/movenc +++ b/tests/ref/fate/movenc @@ -138,8 +138,8 @@ write_data len 504, time 800000, type boundary atom moof write_data len 420, time 1266667, type boundary atom moof write_data len 668, time 1566667, type sync atom moof write_data len 440, time 2233333, type boundary atom moof -write_data len 262, time nopts, type trailer atom - -a5d087611a9229ba91eb0964cf2f17d9 4209 vfr-noduration-interleave +write_data len 205, time nopts, type trailer atom - +2dd052ab30624c1a415184c5bf973670 4152 vfr-noduration-interleave write_data len 1231, time nopts, type header atom ftyp write_data len 916, time 0, type sync atom moof write_data len 908, time 1000000, type sync atom moof