From patchwork Mon Sep 19 13:25:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: erkki.seppala.ext@nokia.com X-Patchwork-Id: 625 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp1000071vsd; Mon, 19 Sep 2016 06:26:29 -0700 (PDT) X-Received: by 10.194.172.42 with SMTP id az10mr23368214wjc.178.1474291589146; Mon, 19 Sep 2016 06:26:29 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j6si18996140wjv.96.2016.09.19.06.26.28; Mon, 19 Sep 2016 06:26:29 -0700 (PDT) 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=@nokia.onmicrosoft.com; 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 dis=NONE) header.from=nokia.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CEBF4689F36; Mon, 19 Sep 2016 16:25:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30099.outbound.protection.outlook.com [40.107.3.99]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E9DB9689D9C for ; Mon, 19 Sep 2016 16:25:45 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=DR3HpQOID4i+FIVI/gBEPJVvwILSNURP0A5uGpxzZWk=; b=aPqzT4TzQMFhjSZUGeVbndW3TxviEpfCg2OGxscczXwtdZfSUYeXGihPXrWu/rhRo2yfckX4JOTY00dkH7bxJiSTa6srSFKEfRIss7EJVNP5JfpTYTMsHJuwz9ZWbg9D+P6jWhrO4W7HuFQjCX4o19SlurSBfDWLYWM9vF5A7gc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=erkki.seppala.ext@nokia.com; Received: from erkkise-laptop.vincit.intranet (131.228.2.24) by VI1PR0701MB2541.eurprd07.prod.outlook.com (10.168.139.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8; Mon, 19 Sep 2016 13:25:59 +0000 Received: by erkkise-laptop.vincit.intranet (Postfix, from userid 1000) id A53554F0F43; Mon, 19 Sep 2016 16:25:48 +0300 (EEST) From: =?UTF-8?q?Erkki=20Sepp=C3=A4l=C3=A4?= To: Date: Mon, 19 Sep 2016 16:25:27 +0300 Message-ID: <1474291548-17810-5-git-send-email-erkki.seppala.ext@nokia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1474291548-17810-1-git-send-email-erkki.seppala.ext@nokia.com> References: <1471943019-14136-1-git-send-email-erkki.seppala.ext@nokia.com> <1474291548-17810-1-git-send-email-erkki.seppala.ext@nokia.com> MIME-Version: 1.0 X-Originating-IP: [131.228.2.24] X-ClientProxiedBy: CY1PR14CA0002.namprd14.prod.outlook.com (10.163.13.140) To VI1PR0701MB2541.eurprd07.prod.outlook.com (10.168.139.142) X-MS-Office365-Filtering-Correlation-Id: e96f378f-60ac-48f0-48af-08d3e0907e9b X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2541; 2:jlEt9JobDxO1yf0knH5v+zqMJKMvy4yhLWZyzljXvTBslSQ0O6NTWcAIqvZY65A4n+Iw2pYObIO0Js/Died3awQOBTLdn9N6BCKWlpNjimUxTOvBW9vSwaOilSGVz9sAMhz+Lfv0diBqYHMrI5j1q8LDsl1GleKg4AISN9v6NzPqZ22JfVM/S0sljnU3qHzK; 3:3117R7V7q311+2qtRK9vKcNxAA4a9K2AgMkhLmWTQSzivvsqd8kWBJA8ZcZ2qGst+fIE1iHPS1OZx7xkIbCmx+ObVm+afVUgbWRHUqqc2IYhz4yVq7zJfnhgBeCx3ZG2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0701MB2541; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2541; 25:2QuQGU9n4/fCzAw2EkaTwiq0CobNy5plU/SoMbswhXhcpFTjRIYDKd+OJehpAQqQu3i1Ke9y/0WYE9N/3K2cc6SpynsLRUiuvxJ33r7rSyYCqN3F1t1af4edtu/ALmeLSeOvXsasVNH413MpEZKIuKNFYi7If05DTNNA9YHJS1fOMmN1Xy4fjQ2AC4m0rO6aiMJpsNGIn6WJWpxJi1Y3nyIwdt8/egTpHQ7KsXTUKxxejc263/R3gUNoillVEmEOuO1ei2rUXfDz4yiltg+P+W1tcFL/SSfdCj0bYuuSfUxGr0CWcQ5/ryfNG9KRJ+xRyzfA7Ov3ks5QRG0hoBOaQJwatE3znhxK7sLxVfJkfO/OOC1tHMXDaZwo995z+3C6ghPUmMrxrMrlnqEBsuZQgo2T0h6/atpv/KzhWG47l8hLbZ1bURxd5+xwLSh3DeV/l5f2zMs9De4WyKWx0/sRBdOxf2T78QsgVjANcMkGe4oWQStbPYZvDHkTg2bL7zT82yW9L8Hf3jF2XrinEFfIVN7NDlpkN2BKyCqrPkU9i/Aa6g+V+uPpali1hkp84E2q7Pr+uJEXFcpv5XnwCsQ0XR5GG48YlgOrCCzXdY7J3c2M5jtBXdCrWBjyqPTfulaQJKWjRjLikHxBvMWmOYNGnNZX4O/AF4CdSfwm2dy/zymKClJscYJYybVmhPmw5TJa; 31:EXsTuWPA37w5ntblLVReguyg9cG3Q6/OjTcq8n+62bgoGqIUsrCWoE7huVX6eK9zCohGVQIxLaTVgtSXVf/kzVYMW5Uwst3+S83FTz93/mQCQf6+POkYIpVOFdYz6xQ1RhgpXB2sn8BCW+RDCrptVQQbmPZF0ctBAqfcwKjVFQFm00cytnC781+k1tessJI18AaK4o7yz6iJw6cIinH3BFvHc7iLchfrxCEHSr3KPCk= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2541; 20:+2pF+gdA8Z4XS01qZHc3UJxRzQxEKuTluHvYxsDZbP/IZSrHrXhYvgMkkGyJDYGoSH/gIHj30tTNrw3BZRkpQr+v7+AbxN+ErJamDePDcC4D4JfC8pvgc2dCetpTLzcKiHhOerCTBNJqcJ1Avzg2FktghJI9gAzNc02SUwR3013YACxJVYLitxfJ5nXpTh3kFvswGw32lyqY3xyVmv40Gvsim78PbAjthkXYWX15LCJEZ/95RUiFkFe0JnyKNI32J9B8yJPXmJX4X4qb55Dq/lZ+LqKSnExpmElsgeFfiNtWNbTg+bgzOPteq8Kq/lHz1YOvbmC3TMmgl+QnNg3bEXSp8HOtOSCwzuHOxwFUNDDOu3GHU+nFSRIz+NNajRY0JmR9mBM2Mu3eKZ0YImezmnXcV7SPUMtZdBL7oCTbZhImsocgJV8BtLUl3KNHrUSfn2o8Lk2L7WwdZgaFS6aNrKA8XaeEYcI649ZBOWhkna8ABNGtWMOOcOzUoghuy7BR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:VI1PR0701MB2541; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0701MB2541; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2541; 4:reItoO6K13MbX3S5VYz6YDQ5D0MfXGCizHWOKXkQHRem/xVix0L7vf2wG6e/jaOmBo5bfZa6hAMQ9W97htMEc9k/UxkVctGJr3BphViJIDnAfo+2MwYnDRYXT/rUIicU0l2hZNeQsHvgPNGRhukrJjFI7lv5mg4MpEksxuxONmyQ/qP1OIrvf191SRvbW8fH18YWns4mNkyKoR3b7EElQvw+x6UdJ4X7LHQ92hjoTmlR3iyTY+ZKt8VKdmEEHMJ4Dr+Z27tLOxGFpzgqa3FVqgCExmu03M5m5XsIzWCSmZ7Ozcp0krEHE+6ef8iVZN3Igr6KVAiZ3jszJW3NuIOxWVl/LntO+PgSANs2xA/UqpuLT6/XMdxSNt1iHKAQ86O7Jqwe6vso5TTRcgWJFvzRwCq3vf3G4KyBwJVFN4D6l/HlkrScTaDCZW9eAaHSHuvN6/+xYPw3lYuDdxqlk6FKDw== X-Forefront-PRVS: 0070A8666B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(7846002)(97736004)(2950100001)(305945005)(52956003)(7736002)(2870700001)(107886002)(92566002)(33646002)(50226002)(46386002)(42186005)(86362001)(36756003)(122856001)(5820100001)(8676002)(81166006)(81156014)(450100001)(189998001)(45336002)(2906002)(5660300001)(4326007)(19580405001)(105586002)(47776003)(2351001)(101416001)(76176999)(66066001)(19580395003)(586003)(68736007)(3846002)(23676002)(229853001)(50466002)(90966002)(50986999)(6116002)(110136003)(106356001)(4001430100002); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0701MB2541; H:erkkise-laptop.vincit.intranet; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA3MDFNQjI1NDE7MjM6d0x2djR3ajlPVWdRVUJTVHVuZFM5TTJL?= =?utf-8?B?V2RTMUYzZGt4a2ppdEhJNmxYZ3NNUlZHK3puRTlPWENveDdqREVIMDZxbE9D?= =?utf-8?B?SVZpSUpMTXBnMGJhc014cEVlQWV2NE5MY2JOMXYrWUs2NVRLRmE3b0k3RXpL?= =?utf-8?B?eEx4bGhRSkdId25wWXVWaUkyWFdHRmtiZFpMSFlzWTZQMHZqU2tVTDE3NWVO?= =?utf-8?B?VzFYbzAyZTlRc0dvekYxMlhFMk02TTdvVExNSGpzdThMZDlHOEp1U0ljbTRP?= =?utf-8?B?MEdpS0oxdCtBWENuTzA2bDgxTkltck5kcTQ5YTNnMWpxalNoa2hQcjRmUkQw?= =?utf-8?B?ald6QkV6UFNSSzVaNkVYV2wxZ0dKY2NUbFFPRm1Bdnp2NGtWSVFicUg2WjFa?= =?utf-8?B?UnB3ZWUyRGNxYmpTK0JNU3Vac3NZenlyaTBPV3hHdUlRVlpQcHpnckgzOHdo?= =?utf-8?B?UGZJbDIrT1h5S0lXR2ZtQVpjSTBSWWxUTTZtdmxyMXlUYXdxdFdiWTdjV0xx?= =?utf-8?B?M0dnZ2RsMkd0aHZNNHNGWmYrSjhVZE5LdTRzR0w1ME5vWktNNzRTTXNXUkdy?= =?utf-8?B?Z0FDZ0I0SU1Ld2Z6QjZkOXdYdTY3Yk9VZVVaYnl3Snh2anJCd1g2bHllZUhY?= =?utf-8?B?YnR3NzVYQUJURVpCM0dMQjlrZURsTkhGTEIwZngramNSNXFnQmZvNFhmdmZ0?= =?utf-8?B?RUhicjFwL0g1ZUNmYTRLMHUyQ1l0dFNKeVRUVVF0WEZ3aWQxaVBGSVhRQmlO?= =?utf-8?B?YThKUjFxTGJObGhhZk9rYnFQOE5tZUlhL2R4Y29GelpsQ1ZYRDZGdjFHdEpL?= =?utf-8?B?eFVmVnN6YmdDZGlwci92dFVyL3Mxc2FYdlJkTVdTSnVxcy9RMmxuV3FReWdF?= =?utf-8?B?SjZhQ2VPekpFeWJKR3M2ZUlTdGhOS3pDUkZ4R1ExTHQ1K29YSGRqd1lGeU9p?= =?utf-8?B?N0dDZ21BZ0pwZmRFOEtZNmNwMk53bEtJSzJxcjRIUWZlbEFWeU9vNG1SRlNr?= =?utf-8?B?L1NoamxCeTF3dVlOU3YwZEkzWG5IQTAvSWMxRmlITEo0L25zZkNJbkg2TllS?= =?utf-8?B?QVpWWmFpZW5GV0dOaEFBU2hobWNXbkhpNnpkOXJvZCs1ejJSUEJZVWRoZ0J4?= =?utf-8?B?R3EyaW9oN3JEV0pwempuWHFTTW5hTlhEZ3VtWk9yTitucy80OVdGbnFHdnNO?= =?utf-8?B?MVUyd2Nsa3NYOW9mOGk5U0NBb3B1KzNHZVpmcElucjNaT3M2TU1MS1J2eWs4?= =?utf-8?B?Q1k3b2psRHdVcW55bnpVLytTTmJyZ3ZPdVIzc0hRMGt3TkN5VHVpUmcvUzNU?= =?utf-8?B?UEdDaituT3hTeCtWaEdBcHNWVDUrUFNtcW1YOWhBY2hwSUg3eXJ6a1ZXd05n?= =?utf-8?B?cmVRdVNpdzZQeGxpZ1RVWTVZcytBY2MwNFVTdXh6bGR5RWtVcXVtWks4WXBw?= =?utf-8?B?MXMyOWwvbHU1bFlKV2xUQUdNaXE4VjlZdDkxOVhtdCsvcUY1NkJjakJpTkdl?= =?utf-8?B?S0hkZTM1bUFvWldlcURjZkh4Zjh5em1YZWhRZHFmVVBxS0orQUtyblRDR1lm?= =?utf-8?B?RHpWYlVsb0YySkl2QWFNWHhvdTN2elhZS3ZYc1RlUVcwN0svMWZUVk5PdEU3?= =?utf-8?B?WGtMdU5JdEJ3a0Q0ZWRkY1E0YU5IWjZ2V2U2YUxHMnFQVDdDcWVjWFI1cXRx?= =?utf-8?Q?RrJJRFJZSWuZQJlakDzigpyz/XriDqn2+BGo+Jbvv?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2541; 6:xylW68oD2jfAmtfsBBF/KIkFj+z7gldRtm0dNewrJy4PZSFAV9YDGBNXlOOKB6qP1LAhf/FoVLDNLPnoM+6SYYyztKxEw9S0vGLWi2fgsekqYWQYIsO53f1LP7R21dWUUszN5gfagacISztpbvmJmXV+hC3SONYjez3/V51tQaZmxeyryPmzXO8fTjs2TZN47mrdMbJhMfMecK4YiiMWEyyLKAIEdPs1qKoOpcsDST8EVxvxAoyX9reFhAy6f9CHcFu5TbiUXjLnUUnyzNy9Tg43p5QiQXhn1QXnaDDH4UJj1KyKYOCaLGXuDxiVqkc1xl9Kja648Y9SLlCfKG5qpg==; 5:0yPt/nW63wdNBaE4472pUsaWIeoetRBoqyL0GcVvo7Uy7aUYm3+Vg0spy4bojxy9vabUG4UfWtPaFqLf9itz11GHlfu9LZZMgqJxjR0G7dUlERmu7fiBmoHTmvLqCm/a0vSiWcHNA9hXd/fARsJhvA==; 24:VtCcpp5osEzKL4w2d0bCZbFnWpOljdDZIq3CCpe6WFx3AI6s/SCAxd9tyodM3AXZLBk/kXA02U/oqyAgpNedFyQcq+r2lklrNDQbhf23ons=; 7:b2xw5CnW2L4nlra8ZGJT5ipNv8/XSWXs9t974i/KBSrL8TyrjOc/xxPgNiToYONzdxKn65GOqEVdPQzTYXm25VfcxHNZn0amRMHrWVrJKB9SQTUrBr1BGI59Af2CT3+So+LRyjGrt0HyKfizHrN91xnxUv+qcv/uD2HltQ5ke/q57UNlDz3wyAZcdNkXdnS9klpW+IPrdjVfSNuk1LZYJjvv6I6RHjCoGtaSWg1oAH6qYhVFR0AN5fwhmn5LxfW2z9FLppjdCgVm7JctFtn1zuRozRhshbdfBIasAZ92zJopf6FdEtAbc8duQ59ajm+c SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2016 13:25:59.0337 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0701MB2541 Subject: [FFmpeg-devel] [PATCH v3 04/25] avformat/mov, isom: read (multiple) track references (tag and multiple ids) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: =?UTF-8?q?Erkki=20Sepp=C3=A4l=C3=A4?= , OZOPlayer Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This can be useful in particular with timed meta data tracks related to multiple tracks. Signed-off-by: Erkki Seppälä Signed-off-by: OZOPlayer --- libavformat/isom.h | 3 ++ libavformat/mov.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 121 insertions(+), 1 deletion(-) diff --git a/libavformat/isom.h b/libavformat/isom.h index df6c15a..609b7b7 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -27,6 +27,8 @@ #include "avio.h" #include "internal.h" #include "dv.h" +#include "movmeta.h" +#include "movtref.h" /* isom.c */ extern const AVCodecTag ff_mp4_obj_type[]; @@ -167,6 +169,7 @@ typedef struct MOVStreamContext { int start_pad; ///< amount of samples to skip due to enc-dec delay unsigned int rap_group_count; MOVSbgp *rap_group; + MOVTRefs trefs; int nb_frames_for_fps; int64_t duration_for_fps; diff --git a/libavformat/mov.c b/libavformat/mov.c index 1bc3800..ff4c91c 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -3157,6 +3157,121 @@ static void fix_timescale(MOVContext *c, MOVStreamContext *sc) } } +static int mov_read_tref_subatom(MOVContext *c, AVIOContext *pb, MOVTRefs *trefs) +{ + uint32_t tref_tag; + MOVTRef *tref; + int tref_ids_size; + int *tref_ids; + int ret; + + tref_ids_size = avio_rb32(pb); + if (tref_ids_size % 4 != 0) + return AVERROR_INVALIDDATA; + tref_ids_size -= 4; + + tref_tag = avio_rl32(pb); + tref_ids_size -= 4; + if (tref_ids_size < 4) + return AVERROR_INVALIDDATA; + + ret = ff_mov_tref_find_or_add(trefs, tref_tag, &tref); + if (ret != 0) + return ret; + + ff_mov_tref_alloc(tref, tref_ids_size / 4, &tref_ids); + if (ret != 0) + return ret; + + while (tref_ids_size) { + *tref_ids = avio_rb32(pb); + ++tref_ids; + tref_ids_size -= 4; + } + + return ret; +} + +static int mov_tref_copy_to_side_data(AVStream *st, MOVTRefs *trefs) +{ + if (trefs->nb_trefs) { + int i; + char *trefs_side_ptr; + int end_offset = 0; + int offset = 0; + AVTrackReferences *trefs_side_prev = NULL; + + for (i = 0; i < trefs->nb_trefs; ++i) { + MOVTRef *tref = &trefs->trefs[i]; + if (tref->nb_track_ids > 0) + // Ensure the returned data is easy to access without + // worrying about alignment, even if it wastes some memory + end_offset = FFALIGN(end_offset + sizeof(AVTrackReferences) + + sizeof(int) * (tref->nb_track_ids - 1), + sizeof(AVTrackReferences)); + } + + trefs_side_ptr = (void*) av_stream_new_side_data(st, + AV_PKT_DATA_TRACK_REFERENCES, + end_offset); + if (!trefs_side_ptr) + return AVERROR(ENOMEM); + + for (i = 0; i < trefs->nb_trefs; ++i) { + MOVTRef *tref = &trefs->trefs[i]; + if (tref->nb_track_ids > 0) { + AVTrackReferences *trefs_side = (AVTrackReferences*) (trefs_side_ptr + offset); + int *trefs_tracks; + + trefs_side->nb_tracks = tref->nb_track_ids; + trefs_side->tag[0] = (tref->tag >> 0) & 0xff; + trefs_side->tag[1] = (tref->tag >> 8) & 0xff; + trefs_side->tag[2] = (tref->tag >> 16) & 0xff; + trefs_side->tag[3] = (tref->tag >> 24) & 0xff; + trefs_tracks = trefs_side->tracks; + for (i = 0; i < tref->nb_track_ids; ++i) { + trefs_tracks[i] = tref->track_ids[i]; + } + + if (trefs_side_prev) + trefs_side_prev->next_tref_ofs = (char*) trefs_side - (char*) trefs_side_prev; + trefs_side_prev = trefs_side; + offset = FFALIGN(end_offset + sizeof(AVTrackReferences) + + sizeof(int) * (tref->nb_track_ids - 1), + sizeof(AVTrackReferences)); + } + } + } + + return 0; +} + +static int mov_read_tref(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + MOVStreamContext *sc; + int64_t end = avio_tell(pb) + atom.size; + + if (c->fc->nb_streams < 1) + return 0; + + st = c->fc->streams[c->fc->nb_streams-1]; + sc = st->priv_data; + + if (atom.size < 12) { + return mov_read_default(c, pb, atom); + } else { + int ret = 0; + while (end - avio_tell(pb) > 0 && ret == 0) { + ret = mov_read_tref_subatom(c, pb, &sc->trefs); + } + mov_tref_copy_to_side_data(st, &sc->trefs); + avio_seek(pb, end, SEEK_SET); + } + + return 0; +} + static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -4414,7 +4529,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('t','f','h','d'), mov_read_tfhd }, /* track fragment header */ { MKTAG('t','r','a','k'), mov_read_trak }, { MKTAG('t','r','a','f'), mov_read_default }, -{ MKTAG('t','r','e','f'), mov_read_default }, +{ MKTAG('t','r','e','f'), mov_read_tref }, { MKTAG('t','m','c','d'), mov_read_tmcd }, { MKTAG('c','h','a','p'), mov_read_chap }, { MKTAG('t','r','e','x'), mov_read_trex }, @@ -4832,6 +4947,8 @@ static int mov_read_close(AVFormatContext *s) av_freep(&sc->cenc.auxiliary_info); av_freep(&sc->cenc.auxiliary_info_sizes); av_aes_ctr_free(sc->cenc.aes_ctr); + + ff_mov_tref_free(&sc->trefs); } if (mov->dv_demux) {