From patchwork Tue Aug 23 09:03:30 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: 261 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp2180663vsd; Tue, 23 Aug 2016 02:06:49 -0700 (PDT) X-Received: by 10.28.54.229 with SMTP id y98mr19630719wmh.96.1471943209163; Tue, 23 Aug 2016 02:06:49 -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 vj7si2166821wjb.30.2016.08.23.02.06.48; Tue, 23 Aug 2016 02:06:49 -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 3A2AB689CF6; Tue, 23 Aug 2016 12:05:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0136.outbound.protection.outlook.com [104.47.2.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F286A689BF1 for ; Tue, 23 Aug 2016 12:04:16 +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=kq4t4BGSWSBQri3/NY/xOmOhm1tYJAI9EDctJb63CCs=; b=bzFAbsYAlUZed6JV/Pwtw5hrDa+viZfy8SYWE1y5iXGLbhmR24UxgYeVbJrzgpZxEWwgXmghhPs1i4bTb1bLTdkpNwcSRfGIF48eSB7edg4j795a58jKUDrKIYxYsL1yiGyha/8+ha7JbPCjAEhTa2jN59kTHimVNF4nihjj3jY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=erkki.seppala.ext@nokia.com; Received: from erkkise-laptop.vincit.intranet (131.228.2.4) by HE1PR0701MB2540.eurprd07.prod.outlook.com (10.168.129.18) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.587.9; Tue, 23 Aug 2016 09:04:17 +0000 Received: by erkkise-laptop.vincit.intranet (Postfix, from userid 1000) id 6AA774449F4; Tue, 23 Aug 2016 12:04:04 +0300 (EEST) From: To: Date: Tue, 23 Aug 2016 12:03:30 +0300 Message-ID: <1471943019-14136-13-git-send-email-erkki.seppala.ext@nokia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1471943019-14136-1-git-send-email-erkki.seppala.ext@nokia.com> References: <1471943019-14136-1-git-send-email-erkki.seppala.ext@nokia.com> MIME-Version: 1.0 X-Originating-IP: [131.228.2.4] X-ClientProxiedBy: DB5PR10CA0041.EURPRD10.PROD.OUTLOOK.COM (10.165.4.179) To HE1PR0701MB2540.eurprd07.prod.outlook.com (10.168.129.18) X-MS-Office365-Filtering-Correlation-Id: db714138-e8fc-47ad-b07f-08d3cb34764c X-Microsoft-Exchange-Diagnostics: 1; HE1PR0701MB2540; 2:+YuVKXdMpLS1AIMUXpAkEtHKk6RY11g4Fw7k03QC1pc5lp2bGUB3LCFS++LOL5HMw96OpjKs8VpuF8bQSvXuW8MGp5qu6lWG31LU9qboUPDRPMfm54pd61ir5su5qWhI8V5wksw/xzdtWZJWqFUAtEA2RQb2mIAJec8loJAkuKVbcwFvxfYSB1OiSb7SXvW1; 3:YcHSdpEZOLrwh6vrnFjY57cVLIWkyJujC4tdq01Rxdps5dINpYb9/+Ano2p97oW2FbFe+hCBdWpPR2TODAO5XT51WPRoA0FpJbGyEz4QmOViHzAtck+0s6c1FoyUdOL1; 25:CGK46Qx4fjqrAxUMxcU9SU7TkRxiCpDVqc2ihMA1jbBs35S7b8/DBSO77K9T7qeXdomHhAxH2wvK+nT3A0SkDBHitjHqfgnKVzDZOKHc72cTYTOEth3eg4aukjxjftuDZf4T1paR1hRaDnDvl9IjATzePjFhRXmSBvhTgzNoiP4naV6atblosi5RTXQIYEnEimk+l8u7KpAGLjSycYm9GXQNQZm4/94XnOqQioLS0fhrjH27JVKtP+lp7uFbjM+t0uRG/uVeqvVaNnAJhJhzlPRFfKgW/vuoWJdPS3rUy0GqUK9epoGwzsLqy79BXJK0LcPl3UzTXgnH/UVmOOAf+7KRfiC9+eVmhzqs6oFTm3CI1jXmVCpYo2llBuTfSjv//UFFFDysCybOuWE+L6lDvubV0OkoK1dKUZznSCWU3Oc= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0701MB2540; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0701MB2540; 31:dSxS/hNsGzRmq2eoTrbRTZPHvsvRWHy1Or6aytMXXbnB5LsIxJUAYw9E9gsW0HLd+dJE2AzcXpkgRafg/gJJ7vXHiWosuuNZCypfeuiTB9QFdyv2yHCshIucs0ZpcavF8xOtvEMWEZvFIeu3IKV6rX34wY+VG8Iayyu5/l/t2RFTDZ7svfnK/1cgU7gs9URlx8+rDvqxfaPtUX6piYuAli+xE5ieJ/fUN2qIRzM8d2s=; 20:dpgCw//fPaIW6LiZwLfXerb7XCDHE5XyfoTgQIZij3Sb1gEDus8qMaPvXlcLrvEesGUAMqYZ7STbdNp3zFDIvv7pNHjK5hkgR52REuESySUV5LN9ui80j+YAKKJ/OkE5FwIAAqGGILU1cTlbioJ3RGVBnPtulOgzICDXY+/YP4Asn2VXoWP6fNV5ihfvbwmfxeRiRDkvZ8Vpvchr7xihMyOUo5RWdSXSrLLEQDfm9UX7BXLdZtksuRrRgPLYBF+h0QDdUB7oqdYNi7QlGrJYu6xvAjPKWpWs5hsorC2po0XmlysdejrJ1K8XpAlYSt+IJKfAK+exA2gChpJh0RKM8+O3K7wctNGnE2anPDpIwOzJzOrfPjWDi8PICA5Y1m/x9nqmzWxxI1HdVq56WqchRO2L4gChKdK3Fyv8qEfteBFjD8EKm8MNa93Sj1ZKX7E7Ozc94fjOw8YYWPhspoadiccPcN3kP/h/bTHcWk5gpnxciuyTIdWLByzE6GVBKgGF 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)(5005006)(8121501046)(3002001)(10201501046)(6055026); SRVR:HE1PR0701MB2540; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0701MB2540; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0701MB2540; 4:NtX3WdqxHCaOClhJlgwoL9kN40NQWgFbKEhNzoGeDrRWSKyd5La4c4SWP3nF6b9VVG1W3Qq0M1nySYdY/Lx9BzDnHWnzRobL0opnmqcB5aRZwlGG80lMNIXjInxxMFX8hb042w7j/wuxMfbdCwZluyR4fXkqFme2HIM2+I9AGQz+3Vr7k6NA4rTHNxC/olgmS3eBuI9/thdjT7DeStnty1YE0dC9o4XI7yUvjxy28qNVQX8w84hDrRFDVm+iGmcpmbgGCahekaFWrpSCesA+YqJff01WoM1/yHZImMtROE5XglLtwsil0b051dvQadauQwm6Ra08lEexE0wJy+7tEnZlLIJp6HBY5dAUGZD/nJF5t9krvDRn6at98417/7UC29S24HyZX/sSHvcN+qMyVhZMQUbcZWkEieZRrB4MBoWuAA7uDPeIPiynl7XOaVAdizaqCtxMZ8kIkaQH6K5jFA== X-Forefront-PRVS: 004395A01C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(101416001)(189998001)(105586002)(2876002)(76176999)(23676002)(19580405001)(8676002)(52956003)(2906002)(110136002)(5820100001)(229853001)(50986999)(90966002)(50226002)(2870700001)(107886002)(19580395003)(586003)(6116002)(97736004)(4326007)(33646002)(81156014)(450100001)(4001430100002)(81166006)(36756003)(86152002)(5660300001)(3846002)(86362001)(47776003)(66066001)(50466002)(2950100001)(45336002)(305945005)(46386002)(106356001)(42186005)(92566002)(122856001)(7846002)(68736007)(2351001)(7736002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0701MB2540; H:erkkise-laptop.vincit.intranet; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA3MDFNQjI1NDA7MjM6eEdURnlBY250L1hTazBtak1ucCtMdnYv?= =?utf-8?B?bXFqUDVQMW5ndXoyVjhGRVNwNlJkRU83OHltcHJtbzUrRmFqWVRSajRzaktn?= =?utf-8?B?RkdUMWJwV3I0Q0FTd2FkajFwVmlodmJKUU1XZnJubWppZXdvSUVKNG5wRE1F?= =?utf-8?B?NVI2ZjJUMEdVK0xsQWY1WDFwTVIwWllwYmE2aDdZenFnSnpHYzFQbjVkZkdY?= =?utf-8?B?TFQ3bk95SnBkeEJxNGwyVnA2OFgvc3dEellKYnFtWDQrKzhuYUtHMk9Qelhr?= =?utf-8?B?blZuSml5ckpucDh0TjRkK3BFRFVkaURqZTRJaGViNXRUajVIQzhkdXlEeGd4?= =?utf-8?B?V3M1T1VPeWppa2w4Q1dRM0F0MmZJWkVGaUlHNWZLUmZIcE5TcVNhNEZkZWtG?= =?utf-8?B?NEpGTmlDaHFBUENuZHhoZUxvZ1gxd0I2YVN6YWI5VEJiZy92NWludVUyK1kw?= =?utf-8?B?UGNDTGtVbkR5MUVWQlcvUC9XQTMreTJNMjZFeWErYXo3cjhlckpVczlSOHpx?= =?utf-8?B?b3Q2M3dxMXFRWVVzdjQ3TUpCeDR0UXZxeUdOajB4aXE5L2VoUzMvUDRpbTk0?= =?utf-8?B?SFdraDdLcitFeGhMSnJGN05SVzdjTUNZSkRjTUduaXZjbjlSU0l2OVlyRFlM?= =?utf-8?B?V2NCMTlvSUk5WmNPZUFlWHN5eU9nY1h1STd3NkpyNHQ5bUVjWmh3bk1WVWZi?= =?utf-8?B?QXlRWVd2UFcyVlVNS0FESERxMnRYMDFKbTIrRzNSQzBqTFQyNHQrQVZSRFov?= =?utf-8?B?aUZLMS8xRFB1TTk5dVRtbDVMR1owODlqdG5MQ3dIcUZKTzBIQUVuSnpuUlVU?= =?utf-8?B?RlVDUVVYMlZQdDA0TTVEWEt0QlBSZFFwVzZuZzZram42VUFRM1NIVGNzR2U5?= =?utf-8?B?eUhWYVJISENLYzBRVXBHVXJ6STMxeXA4Sy9keCt0VW5nallkaXg2OXFqVTJS?= =?utf-8?B?QTFRY2JZZXVoSW81WTdLNHJkd1E1WnJZU05qb05aTG55a2hoVll3dEF3TnE4?= =?utf-8?B?MDZ1WEFqRjMvZXR4aUc1akllODFEdnVuakdyQUQvZ0JZQXk0Nmkzb2laRERh?= =?utf-8?B?cm9xNnNLbU1kcjVMNmN4bnl6YlpMSFczVnVWRzQxSFAvcEQycGs5MjZiMHdu?= =?utf-8?B?SzIvNmtGZk5sTGt5QkFRZ21tZW80ZG5jWm1iTHVsWFBaZGlUUldTQmdBRys2?= =?utf-8?B?T0hPWGRZQ1pvQVhPYy8zZ1pIMEQ4bkowOGNjd2FMbCsrTlp1RFJFVjNBTFoy?= =?utf-8?B?MHhaYm9EcnN2OXRPa1dIMmhwM0Y5cDJSTGtHcnp6UHdvZ0g4RG1BaVhtaTNy?= =?utf-8?B?M0ZsWGVzRExWcElUMzlpNDdTNDdXV3d4dXI5dXM3eUhNS0M4VHJpeEJzc2pi?= =?utf-8?B?ZFkrNG5pNE1FMk9uRno5aEI5bmlucjcxem1KNGo4SWNIcExGSlJNbkRGd1Yy?= =?utf-8?B?SSt4VzlibThKWlErSHArWnBGaGh0MlBieWFraXJsVnFYdGkyRmxvYWJQYXo4?= =?utf-8?B?Vld3dTU0M3RUVHBEOGpOclBsdXdDVGxZM2d5V3E5L0Y1S0I1Kzk5bVE1cnRt?= =?utf-8?B?cC9BM1BERDMwMTk5dG9ZdzdIemxiUzhBOUdBYUlEVkdKaml5SWphSnoyaG1C?= =?utf-8?B?NGdSOWNtNWlIbDgzVjh6d0tVZjR2RU5hL255eWRpV1dST29UeXY5eUtvdUND?= =?utf-8?B?S2M0ZkkwL3VuYTBKWU9IWVFuczRaV3o3ZFdmREV4T3BhWWp2Z2JUNURpdDdV?= =?utf-8?Q?5OLH0SLuUdpf5hOKUHevfnZGdST/RqHUb2kPou8=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0701MB2540; 6:MmSzTOm54Rl48KRLc0lpj/XVGVvD0dsrmxbEv+HHppKkwvNcl0A1Iwkc+nj0N93kysv3P3p9ScVZYKGRR/yONDfH6LMAfvuT/BxNSICBqNGSlKWJnMyHfMaFlmPYls3jF1r3RSA29OFD/q+ywEakB67/9UYTFAiSV3hFF62lo48LURsesL+YBnPmrqd8pyAk2k4imNYk+BQVEoAaNlR8a8zR0v+O9ZZ7QemKajKzcWRENzg96UM+s36VQACTeRM+5zMZSmwzxniCpqNEv8NTFbvgk1XAo+ui2tSmG52jZs0yy+T9K0YpJTVLqB2xhFpKoyR4AUtA0J7LPcRAsnXZGw==; 5:tSPeHtVDL5XxFC+bZJlgLKmupbq1LW+ZXGfsv/JPTlemI52w1yhgjO7mpiOKeWly0lomxWNWNibobFFcUh1b95PLHcW4lDFkavZ7kj9Q44M2G9AD1pYroSgciWRgyLFciULZsACrsFJaKq6whIVeTg==; 24:EP3gIVp60ureEu7pH6gGM85q0VeCiesyFY2ROgR/Pn6AFPwRoFLG/VYnBsXCUHKV1DFlQji8w36HIPjKBIJD/D23FJ1xupltlC6BuB57vA4=; 7:cKRx1kO+GxIIvifHagd8uSDK8yfevz7N6BqUn+OkhN3lw6UCtcH6YsKMQFnFoZHbmP1mTqyqt+J31DHcfjbwCADG7W6y1JShACYS4/MKr1Yc7B4ogM0HcfNa7/0FXH9jP3+S2LqqceTsvZZBkno+kaly8LErNHz0UXUWAC+tXtLA+Ioff7FfHODXcpPKR61lL2L3zs49GYOoZaSfXUAO5nCA8nynxCJq29UrnDq3dcWrECHP3Jj3uFw8onZxTDju SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2016 09:04:17.1786 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0701MB2540 Subject: [FFmpeg-devel] [PATCH 12/21] libavformat/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" From: Erkki Seppälä 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 | 46 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/libavformat/isom.h b/libavformat/isom.h index 49c8996..9ad898a 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -168,6 +168,9 @@ typedef struct MOVStreamContext { int start_pad; ///< amount of samples to skip due to enc-dec delay unsigned int rap_group_count; MOVSbgp *rap_group; + uint32_t tref_tag; + int nb_tref_ids; + int *tref_ids; ///< trackIDs of the referenced tracks int nb_frames_for_fps; int64_t duration_for_fps; diff --git a/libavformat/mov.c b/libavformat/mov.c index 1bc3800..9cd915d 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -3157,6 +3157,48 @@ static void fix_timescale(MOVContext *c, MOVStreamContext *sc) } } +static int mov_read_tref(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + uint32_t size = avio_rb32(pb); + AVStream *st; + MOVStreamContext *sc; + int ret; + + if (c->fc->nb_streams < 1) + return 0; + + st = c->fc->streams[c->fc->nb_streams-1]; + sc = st->priv_data; + + if (size < 12 || size > atom.size) { + avio_seek(pb, -4, SEEK_CUR); + return mov_read_default(c, pb, atom); + } else { + int remaining = size - 4; + + if (remaining % 4 != 0) + return AVERROR_INVALIDDATA; + + /* an arbitrary upper limit to prevent wasting all memory to this */ + if (remaining > 4 * 256) + remaining = 4 * 256; + + ret = av_reallocp_array(&sc->tref_ids, remaining / 4, sizeof(*sc->tref_ids)); + if (ret != 0) + return ret; + + sc->tref_tag = avio_rl32(pb); + remaining -= 4; + while (remaining > 0) { + sc->tref_ids[sc->nb_tref_ids] = avio_rb32(pb); + sc->nb_tref_ids++; + remaining -= 4; + } + avio_seek(pb, remaining, SEEK_CUR); + return ret; + } +} + static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -4414,7 +4456,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 +4874,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); + + av_freep(&sc->tref_ids); } if (mov->dv_demux) {