From patchwork Fri Dec 3 05:06:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 31902 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp211098iog; Thu, 2 Dec 2021 21:07:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJxa1M8XK1oPsL3DmIR9jPjekdrjBeD567NkEpsw48P3XSxDSeqdoMYA+57KBFM6UlceFYbY X-Received: by 2002:a17:906:3a4a:: with SMTP id a10mr20466662ejf.253.1638508047855; Thu, 02 Dec 2021 21:07:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638508047; cv=none; d=google.com; s=arc-20160816; b=fa57ZJU6T6XsneZZmqrEow2xTiy41oCoz5sPPtsxixyBJNfO4I2w64CBVrC1nPY3Cn q/M7jijsyCmijFFPmHYJje8ijyGcCq8lAW4+PT6Iejfa8AmACXRU2Bh3xqRteSt/gRcJ gvqyCToqiwCz+JVkza5FTeibvKDx8zDNFWe1AOBhOOGrt3D6Cq5fOeRxNLW4VVTI3658 Gpd/TuqfLVzeqEmvkNw1TdZt4xPOrlF78McFLt4bCS3YZuLWBebnJTguKdEd7b95irrN Wx4uj3+p0py1sgi6Hzx9Ukv5N+J2p+hJvcDt2NTAkvsVTOaTT2CqmVXT1bJ45qZSBO7P 65Gg== 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=duUDxYhH4I5ePrHEMczMx9Gw9HeoS0Q4qj1Q4Q7sg6s=; b=VpNcpUAyLpMNg3VCpEBqnN7eSl5C5WuRwXFz2X4kNnQBw2supfPANqTPWsuWDr4nc4 LxFwtw58FtGawOEfvBfMjGpWsZfQrzbrC/yrTiEBg0VYgyhwOGa++JpsSKSAY3M38QcR bZvPBT0cJZrwMXPYzXo3849ju2BAOw03UaKAlWO+ql75foMpZvZzg0oDiaNRxwEPnF/m 46K8ObYydRWaecywsZtwRh4lNEJ7J7dJGFVShCPKkOW1yQta51D9hAf4Qm0qdUaqPJzD 0zPTE5cSQ53bYSmcW4KCneKq+IDyqRPrDwnbTO/U4zzOChY9P6vvmgaLiRJ0DCbQ802o bT7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=Qnh8pwrQ; 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 cs15si3357704ejc.331.2021.12.02.21.07.27; Thu, 02 Dec 2021 21:07:27 -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=Qnh8pwrQ; 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 9667968ADDE; Fri, 3 Dec 2021 07:07:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-153.mail.qq.com (out203-205-221-153.mail.qq.com [203.205.221.153]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D7CF68921B 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=1638508032; bh=nqwdYuDKjtTKGBY3AQjg1y1lqW4MSDKWU34zKqKd+7s=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Qnh8pwrQDjpvIoA1wf2xg8IdXwFMPwmSlpVGHOnUi5kQv9QZCIG0HE8Dk0z/DpuQk pKRHLlCZ7+FHWhhZxJ8lF+voTg5BJ+OVLH1vCPUMLvYrxO9XbBi9rzd4Ou/dbZOlop iXNn3811wyMlovYIuYkQwKKXjw8xGwMQlzo8TE1Y= 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: xmsmtpt1638508031tmwsxo5m6 Message-ID: X-QQ-XMAILINFO: MSzaE5xMQTbtAE0d2QLiq1sOg3t0/e4h1dcIJ8Zs/U1juEeL46NzokKEqI9xFL 2oUHfgg//RxF+/y4sW+0dt9bK1tvJUGnPU46EfVu3QWEVyZURn0T3aC2EVqvHkqowAObuk71WYCg F828CIOACCr3Bbs5isVm2BR8KeV0/EmqSedIWZYm8olyuzgH3GneEG5zjCLrv0pRMnzQD618noo8 EtUR3NIsbBRe/nOpL9KY2Nn31MCURTaMexHZiIwBHCsk3bq1C7J+xCHFwY9BkZNaMzhkkNq+W3Ed +ksa6gGj79YKk5h5WRw64ORMWRaxQfrYLU/seiFWRxsjKcQrVPrNSJ7ssLAg35IAQ+kfcDD0PQZr 7ie+3VVkAPnk0BN7p//N3AGBBxGTktztC8tqNUynf4xSN6N5HPL3Bw5KgXI3c7TXFa0SWe+2mH76 VoE/6gqb319fpiD46m8ylxLUUb4RAtSKFf1hZQfrnsCkztNBH5tZXlrWzTQ195frUzvVR9KcEx29 fXoTuuke6++2Wua/+/H3ooYC1xGJ3jmtD9s/vUFVrkHpKK6GidhO8tYosWn4OgbgvBMX/Wknl0Zs fpoOz1aRV3AA3/RFxO+cPWgaAnTu4urUqlsSWZAHydWBgJLd8cK5wEFu41z0qLI70JjrwbGD4tVj wNWCI72VDKEwdNnztjX9LHa6F1N9RPIKdXCfjv/Nvd6Bd3NmWnYZKXyNhgBYhjwJ4BYT/XdR1gDf mbJFmooHrQzpuFXVLB+IZ2InPNWWuDmZnFYROctGA2G2jiYE0efx9y49emsQbHe+MKD1x3c276si 2+73lHeE8+5qBU/0NABy4Bvek9Y6UQ2bIhw+qvpB0BgYWTle9VvZx1dne2VPHpAd7a0QYkPBxfVv DtOl1Hg+uN From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Dec 2021 13:06:56 +0800 X-OQ-MSGID: <20211203050657.72755-4-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 4/5] avformat/movenc: reduce tfra box size when every sample is a sync sample 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: J/j7UQLrr2j0 --- libavformat/movenc.c | 8 +++++ libavformat/movenc.h | 1 + tests/ref/fate/movenc | 80 +++++++++++++++++++++---------------------- 3 files changed, 49 insertions(+), 40 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index f8731d33c5..01dfd21a43 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4938,6 +4938,7 @@ static int mov_write_tfra_tag(AVIOContext *pb, MOVTrack *track) int number_of_entry = 0; int i; + if (!track->every_sample_keyframe) { /* 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. @@ -4948,6 +4949,7 @@ static int mov_write_tfra_tag(AVIOContext *pb, MOVTrack *track) } if (!number_of_entry) return 0; + } avio_wb32(pb, 0); /* size placeholder */ ffio_wfourcc(pb, "tfra"); @@ -4956,6 +4958,9 @@ 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 */ + if (track->every_sample_keyframe) { + avio_wb32(pb, 0); + } else { 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)) @@ -4966,6 +4971,7 @@ static int mov_write_tfra_tag(AVIOContext *pb, MOVTrack *track) avio_w8(pb, 1); /* trun number */ avio_w8(pb, 1); /* sample number */ } + } return update_size(pb, pos); } @@ -5999,6 +6005,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) trk->cluster[trk->entry].flags |= MOV_DISPOSABLE_SAMPLE; trk->has_disposable++; } + trk->every_sample_keyframe &= !!(pkt->flags & AV_PKT_FLAG_KEY); prft = (AVProducerReferenceTime *)av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &prft_size); if (prft && prft_size == sizeof(AVProducerReferenceTime)) @@ -6769,6 +6776,7 @@ static int mov_init(AVFormatContext *s) if (track->language < 0) track->language = 32767; // Unspecified Macintosh language code track->mode = mov->mode; + track->every_sample_keyframe = 1; track->tag = mov_find_codec_tag(s, track); if (!track->tag) { av_log(s, AV_LOG_ERROR, "Could not find tag for codec %s in stream #%d, " diff --git a/libavformat/movenc.h b/libavformat/movenc.h index e3a5e2864a..e78a08c2dd 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -97,6 +97,7 @@ typedef struct MOVTrack { long chunkCount; int has_keyframes; int has_disposable; + int every_sample_keyframe; #define MOV_TRACK_CTTS 0x0001 #define MOV_TRACK_STPS 0x0002 #define MOV_TRACK_ENABLED 0x0004 diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc index 529a1c6da5..3a593dcb9b 100644 --- a/tests/ref/fate/movenc +++ b/tests/ref/fate/movenc @@ -1,54 +1,54 @@ write_data len 36, time nopts, type header atom ftyp write_data len 2429, time nopts, type header atom - write_data len 788, time 1000000, type sync atom moof -write_data len 110, time nopts, type trailer atom - -e38b4db4d6542159a18a231df1f8a17a 3363 non-empty-moov +write_data len 91, time nopts, type trailer atom - +cc672db4650646c640508579e7c08c3a 3344 non-empty-moov write_data len 36, time nopts, type header atom ftyp write_data len 2761, time nopts, type header atom - write_data len 908, time 966667, type sync atom moof -write_data len 110, time nopts, type trailer atom - -aced0fb08e209f7b892fc69319de4c6c 3815 non-empty-moov-elst +write_data len 91, time nopts, type trailer atom - +9f4f458599a3c5e064295d8bede69a5b 3796 non-empty-moov-elst write_data len 36, time nopts, type header atom ftyp write_data len 2669, time nopts, type header atom - write_data len 908, time 1000000, type sync atom moof -write_data len 110, time nopts, type trailer atom - -d2879ae4007bec11714c47ed9c4606c9 3723 non-empty-moov-no-elst +write_data len 91, time nopts, type trailer atom - +eff9b48e62ae0d52676a154328a2db5f 3704 non-empty-moov-no-elst write_data len 24, time nopts, type header atom ftyp write_data len 1171, time nopts, type header atom - write_data len 728, time 0, type sync atom moof write_data len 828, time nopts, type unknown atom - write_data len 728, time 999999, type sync atom moof write_data len 812, time nopts, type unknown atom - -write_data len 148, time nopts, type trailer atom - -92ce825ff40505ec8676191705adb7e7 4439 ismv +write_data len 110, time nopts, type trailer atom - +6e76f6cd18354c43eafbc342a236323f 4401 ismv write_data len 36, time nopts, type header atom ftyp write_data len 1123, time nopts, type header atom - write_data len 796, time 0, type sync atom moof write_data len 788, time 1000000, type sync atom moof -write_data len 148, time nopts, type trailer atom - -7c8bbc289e14ae747ad3f9c73107912b 2891 empty-moov +write_data len 110, time nopts, type trailer atom - +334ccaacc76cfc292fafdf6b0031ba83 2853 empty-moov write_data len 36, time nopts, type header atom ftyp write_data len 1123, time nopts, type header atom - write_data len 1068, time 0, type sync atom moof write_data len 908, time 1000000, type sync atom moof -write_data len 148, time nopts, type trailer atom - -0c6a543b723d16f5bb2bbb1204625a41 3283 empty-moov-no-elst +write_data len 110, time nopts, type trailer atom - +2914a8737c86d5194c655cf540a26ccb 3245 empty-moov-no-elst write_data len 36, time nopts, type header atom ftyp write_data len 1123, time nopts, type header atom - write_data len 900, time -33333, type sync atom moof write_data len 908, time 966667, type sync atom moof -write_data len 148, time nopts, type trailer atom - -f99a6f2437e513d6dcf521f8d167f342 3115 empty-moov-no-elst-no-adjust +write_data len 110, time nopts, type trailer atom - +5919754b902a696df1bbe92afd3eea7d 3077 empty-moov-no-elst-no-adjust write_data len 1159, time nopts, type header atom ftyp write_data len 796, time 0, type sync atom moof write_data len 788, time 1000000, type sync atom moof -write_data len 148, time nopts, type trailer atom - -7c8bbc289e14ae747ad3f9c73107912b 2891 delay-moov +write_data len 110, time nopts, type trailer atom - +334ccaacc76cfc292fafdf6b0031ba83 2853 delay-moov write_data len 1231, time nopts, type header atom ftyp write_data len 916, time -33333, type sync atom moof write_data len 908, time 966667, type sync atom moof -write_data len 148, time nopts, type trailer atom - -a7ddf0bfd32683de9dd22afe3b1135a4 3203 delay-moov-elst +write_data len 110, time nopts, type trailer atom - +d09ca12c5c03fa58d6c5776d25c597b9 3165 delay-moov-elst write_data len 1195, time nopts, type header atom ftyp write_data len 836, time 0, type sync atom moof write_data len 67, time nopts, type trailer atom - @@ -64,65 +64,65 @@ write_data len 1123, time nopts, type header atom - write_data len 796, time 0, type sync atom moof write_data len 788, time 1000000, type sync atom moof 289ee982188d66988a374a462b0b5376 1584 empty-moov-content -write_data len 148, time nopts, type trailer atom - +write_data len 110, time nopts, type trailer atom - write_data len 1159, time nopts, type header atom ftyp 351ae2c8b6d35d98b4848c309cce6704 1159 delay-moov-header write_data len 796, time 0, type sync atom moof write_data len 788, time 1000000, type sync atom moof 289ee982188d66988a374a462b0b5376 1584 delay-moov-content -write_data len 148, time nopts, type trailer atom - +write_data len 110, time nopts, type trailer atom - write_data len 28, time nopts, type header atom - write_data len 1123, time nopts, type header atom - write_data len 884, time 0, type sync atom sidx write_data len 876, time 1000000, type sync atom sidx c0307f99a2a362205b7e3d65b1066f86 876 empty-moov-second-frag -write_data len 148, time nopts, type trailer atom - +write_data len 110, time nopts, type trailer atom - write_data len 28, time nopts, type header atom - write_data len 1123, time nopts, type header atom - write_data len 876, time 1000000, type sync atom sidx c0307f99a2a362205b7e3d65b1066f86 876 empty-moov-second-frag-discont -write_data len 110, time nopts, type trailer atom - +write_data len 91, time nopts, type trailer atom - write_data len 1223, time nopts, type header atom - write_data len 876, time 1000000, type sync atom sidx c0307f99a2a362205b7e3d65b1066f86 876 delay-moov-second-frag-discont -write_data len 110, time nopts, type trailer atom - +write_data len 91, time nopts, type trailer atom - write_data len 1223, time nopts, type header atom ftyp b3811928793ed0749927eb2f7958421c 1223 delay-moov-elst-init write_data len 988, time -33333, type sync atom sidx write_data len 996, time 966667, type sync atom sidx 0df125407c7e81978ce722e0ae4f6f84 996 delay-moov-elst-second-frag -write_data len 148, time nopts, type trailer atom - +write_data len 110, time nopts, type trailer atom - write_data len 1223, time nopts, type header atom ftyp b3811928793ed0749927eb2f7958421c 1223 delay-moov-elst-init-discont write_data len 996, time 966667, type sync atom sidx 0df125407c7e81978ce722e0ae4f6f84 996 delay-moov-elst-second-frag-discont -write_data len 110, time nopts, type trailer atom - +write_data len 91, time nopts, type trailer atom - write_data len 1223, time nopts, type header atom ftyp 041ac8efc35a0d023c26d05eedb20403 1223 delay-moov-elst-signal-init write_data len 1004, time -33333, type sync atom sidx write_data len 996, time 966667, type sync atom sidx 5a583d89318827d2569eecbeaa18c238 996 delay-moov-elst-signal-second-frag -write_data len 148, time nopts, type trailer atom - +write_data len 110, time nopts, type trailer atom - write_data len 1223, time nopts, type header atom ftyp 041ac8efc35a0d023c26d05eedb20403 1223 delay-moov-elst-signal-init-discont write_data len 996, time 966667, type sync atom sidx 5a583d89318827d2569eecbeaa18c238 996 delay-moov-elst-signal-second-frag-discont -write_data len 110, time nopts, type trailer atom - +write_data len 91, time nopts, type trailer atom - write_data len 1247, time nopts, type header atom ftyp 80511a51d1ac9cde62337eed7176ae03 1247 delay-moov-elst-signal-init-discont-largets write_data len 996, time 279621233333, type sync atom sidx dc695d65e8a0cdafee28acd8a5ccf81a 996 delay-moov-elst-signal-second-frag-discont-largets -write_data len 110, time nopts, type trailer atom - +write_data len 91, time nopts, type trailer atom - write_data len 1223, time nopts, type header atom ftyp write_data len 2572, time -333333, type sync atom sidx write_data len 996, time 5166667, type sync atom sidx -write_data len 148, time nopts, type trailer atom - -0009ab3c8ebc80a286e5b10dfacc8ef3 4939 vfr +write_data len 110, time nopts, type trailer atom - +a7cf74137808890eef675c2d3d104818 4901 vfr write_data len 1223, time nopts, type header atom ftyp write_data len 2572, time -333333, type sync atom sidx write_data len 996, time 5166667, type sync atom sidx -write_data len 148, time nopts, type trailer atom - -0009ab3c8ebc80a286e5b10dfacc8ef3 4939 vfr-noduration +write_data len 110, time nopts, type trailer atom - +a7cf74137808890eef675c2d3d104818 4901 vfr-noduration write_data len 1231, time nopts, type header atom ftyp write_data len 1500, time -333333, type sync atom moof write_data len 1500, time nopts, type unknown atom - @@ -130,24 +130,24 @@ write_data len 916, time nopts, type unknown atom - write_data len 1500, time 9666667, type sync atom moof write_data len 1500, time nopts, type unknown atom - write_data len 1004, time nopts, type unknown atom - -write_data len 148, time nopts, type trailer atom - -9549eeeac8731d820dc395bc73aa605f 9299 large_frag +write_data len 110, time nopts, type trailer atom - +1d86c7a4ff34ef48b17e0424ef83c60a 9261 large_frag write_data len 1231, time nopts, type header atom ftyp write_data len 684, time -33333, type sync atom moof 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 205, time nopts, type trailer atom - -9ec014d07518b90a5321d792d737bfc0 4152 vfr-noduration-interleave +write_data len 110, time nopts, type trailer atom - +52fe35e68d8f522f247e9cdfb9677f1a 4057 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 -write_data len 148, time nopts, type trailer atom - -b8076064cedf2fefc242d9af67cdaeba 3203 delay-moov-elst-neg-cts +write_data len 110, time nopts, type trailer atom - +efd24aed8e3d17d6ee7ca5e764391c61 3165 delay-moov-elst-neg-cts write_data len 36, time nopts, type header atom ftyp write_data len 1123, time nopts, type header atom - write_data len 900, time 0, type sync atom moof write_data len 908, time 1000000, type sync atom moof -write_data len 148, time nopts, type trailer atom - -c1307485f65c4a00a06ca82f5e0b1361 3115 empty-moov-neg-cts +write_data len 110, time nopts, type trailer atom - +fe10ded5223335608980555f972902cc 3077 empty-moov-neg-cts