From patchwork Mon Sep 19 13:25:44 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: 647 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp1001430vsd; Mon, 19 Sep 2016 06:29:30 -0700 (PDT) X-Received: by 10.194.236.68 with SMTP id us4mr22759382wjc.12.1474291770206; Mon, 19 Sep 2016 06:29:30 -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 123si19166661wmt.39.2016.09.19.06.29.26; Mon, 19 Sep 2016 06:29:30 -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 7821568A0FD; Mon, 19 Sep 2016 16:26:10 +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-db5eur01on0120.outbound.protection.outlook.com [104.47.2.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ABE5E689DCD for ; Mon, 19 Sep 2016 16:26:03 +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=E9mAOi9HCDR2WUQMxTqDsyxOubEu1+khvdEHcaVKjgc=; b=FoihBaERoQWBr+pXFWufwPxcJJ1Yppx5rR64ipyEXBGZZbu7T2RMYEKKokLCQCpRRpQPUJGb4pNM1xwNPYPmOqmKDPKfAB2eX///mh1+dTsdBeLZ5B7VSKZTCPkPy8hlCZw+SxNsVjKv4PiNX1iM6mFWjppLBebGmFe0Zf9DwwY= 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 VI1PR0701MB2544.eurprd07.prod.outlook.com (10.168.139.145) 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:26:16 +0000 Received: by erkkise-laptop.vincit.intranet (Postfix, from userid 1000) id F143D4F0F65; 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:44 +0300 Message-ID: <1474291548-17810-22-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: YQXPR01CA0055.CANPRD01.PROD.OUTLOOK.COM (10.165.103.23) To VI1PR0701MB2544.eurprd07.prod.outlook.com (10.168.139.145) X-MS-Office365-Filtering-Correlation-Id: 7983e121-862c-467e-f92f-08d3e090893f X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2544; 2:cGmbY+tIE7K2AwnYlgriCqOZY8kNZnBKYLu9c3Ii241i4GFsVpxv5zG2pzECGWAaMEDIlQ4KrwgNaDEHbChvnqDL0nOnnIT2UFlzZZ66AvVn5YTHRP8FHZgr69OsdYqokRbilPgBhIVM8ie4+udVeyDQImSMLlw51FCJLgiInTXAsaXR/pK30D4Rb1/Jz0vS; 3:xPNlorX/YrXD6eJ8rEgqq+4J8nv0Y2CX+k7kBrrKzWOK76oqbMCxv2rvjFSJMjSRqgpjRpjvGN7A9NcvTGaC1N2nPoOo4XuIawSLPw8+jtxE1JvVIGOGYPEMco1lR/jB; 25:Ldf4M32h5rlL2NI80biyhP3KGdbrU9yowQqykCNISaDRzRwPeaCWX3lF6cu7EP2B425toF2eMr2h8hy5oqJVESsP0CRVSyCNLx8S9n+jB18Rx42mLlY5wwjhRwh6fWw92oIR9lkqJEbQWrJm2ytQxcfI6BaHduE8ICJPrxdy24o/AJir249zm5wZ86Chwskb82txE7HUigNin1P/kKXtCREBHPjH5Al9XZAAjvQs39EoJyeY8mzNm6rDfBnUlxLh3X8hd+0d29TfgTiNCRYxqXmdjMM8OVHzZSyvBPsBmI4vRwZF0uiUuNIUxWNeyvFhrIXITDrBQ8S1MYC/3mzoQ0JEMgfXiqDIo2sZNodwsykC5iw491SCLjQo81/2gjjHH2FTBmwV/kHfwHezQg9zYzDQVMA8nGC7+0TDRBUWoTA= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0701MB2544; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2544; 31:fYS1qooqUY3zk0KpoX81CURhtYf4QhmI068x+rPBcoUiVBfrrMMRzMr+hFHrhMtMgRVDLIodjhXtzAMPi4Z8uCb+j16L2gTeCWhnKymWCMwc9dn3wxAL4y+Dd6/Hs76zP0CQ6s8+79UbcvyT3KskPRdtIwLhJaN2ahaWsMZJIvyKBnm94oJsShZCMWO4mi6ecVQR3Bw8xyim+cYZdjg+ZjejeRapAi93qkV0YSGrnME=; 20:R8u808TARjzUAGaYwCAjs5oi/ehdNbtDIAvypAOhhL4mhqVRIBKPQzGJfOqzfYA+ViYPZJhSODnfd+Cmy6kIFl2NntHOohBy4jieLECNgRYVtpMD+tGB4mPn2R0i6H3RYp3x7sxhYrhSJdAWCjNoAuDMJUCJBrMBPBPAfu4APLl6VBuubW+tg9E142T5OMHwwiJgmkDmFh91UAad5Cft1fY2BlrDqonRb9MAg0gApL4jzEYEjXIQfmNbQPSc43HWobwUpW6EkGYhUYhYyJlIJQWRmq3QIRcC2NnWBEFcLwjt+WJNRlL0kKVvPg8A4MP8KVRqQ6QA9wnZ+Q8J1NxUTIrizf3iJq/MkO10xBlsSZu+jOdHaN0wGJlXOarQdbMhTn0ioCThZwlgTqMRbM1MpR3BnTt6cNgt9Wy21yrBmboYxO9YPIMZ3gc5ywbHbsTnQ93zkMVXsbG4lWw923ovJbJlbaT03+OehVb8HczkFbCy0cPob5Lq/cfaeefRNl6Z 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:VI1PR0701MB2544; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0701MB2544; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2544; 4:UxASxbMh4hQMIjEY0RGtMXLzOcBISxNd2m+ZwL6gyymWoHNf+T9qyC8IYGC9p1BESmW36K5OqnRNyxmFJjTBFXzKjbuMeRxixXy/vvwowMv5Xq//L2ykuzDA1uywkHh1KGNrXDI15fibJnTUa+u671LJhMKWK9Zr7uqfZyILisS9BjylC0rQMTCviaVQ3RQVrc0HsoVfN+BavhpkA2c0ydO+Pet+0xxRz01pcQ4E7njAMj1ekWEe4QstPz9nn51pi32xVc8M80PIH13Zk51oKUV1ZbRQZ43TSO//OoLA7raD0ddLkuS/IvdRZPCicHBNOQPT9d5md/Owbic4xWW62TObFP2QRx28VpHH8uAPGU8S55qevw9OFl5Dr3pRJla0lUM3cJTvmO6eH0ecq0fnodmQBcmojfHVX0tddrc+MxaDiuQv4xLZIdU4tYDbEnnF6l9bjLI1Ujh5ELAIfpLt7A== X-Forefront-PRVS: 0070A8666B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(4326007)(107886002)(5820100001)(2906002)(90966002)(68736007)(110136003)(450100001)(50226002)(4001430100002)(81166006)(81156014)(42186005)(8676002)(50466002)(7736002)(7846002)(52956003)(305945005)(45336002)(92566002)(46386002)(19580395003)(47776003)(3846002)(105586002)(586003)(2351001)(6116002)(66066001)(229853001)(189998001)(97736004)(122856001)(23676002)(5660300001)(33646002)(19580405001)(36756003)(2870700001)(106356001)(76176999)(50986999)(101416001)(2950100001)(86362001)(19627235001); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0701MB2544; 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?MTtWSTFQUjA3MDFNQjI1NDQ7MjM6MUljaVB5MlZYSjlVSk9aUFVvRTBIdGdP?= =?utf-8?B?Z3hZMFBSdGwyQ0tuOVhnanE2ZXFPTjlvaEZQS3pFbkJSNkRhVnJ5Z0xlb1gx?= =?utf-8?B?NFlibjhhTkVjNFRQdEo5N2w3NWowMUVJVWUrdUpIcS9vTjVpR2xyMzJSMHFh?= =?utf-8?B?eGtranZINDIzNzh3c3Y2c3M2bVZBUmNablpXb2tkc0U0RTdKWGk3aFpzN3FO?= =?utf-8?B?TDdtU3RkOTVDd1lmaGlyQTg5Vmk3Tk5XanRkQytHLzU5MHJhRVN3amkyZFZh?= =?utf-8?B?ZkcxclNSN3pFVmljU21yTmJWVW9US2d4a292WFVhN2d6ZXQ3QzA2aWcvZVMw?= =?utf-8?B?MEdKVXZJcjEvRHlKbEpNKytSSUZxdnIwdGtWWjgxcGhqcGFrZ2xTcSswd3h6?= =?utf-8?B?Z0p1VTc0MHY1SzBmUm5XM1NRci9QbGw4M3Fmem5kdFBKcXJsRWxOZXdqUW5u?= =?utf-8?B?UkFDUjNSbURoLzk2NlhOM0pFK3ZMNjFWTkh0WEE3REU4QndIMEEwd0pydld1?= =?utf-8?B?cUVkUW11T1M5OE9RVHB3VENFTHJPQ05iaDYwVHBCM201RzJOaE1QbGNMOWYr?= =?utf-8?B?a1F0L01hR0xsN3BNSUlzVHlSTFdZMkU0b1Z3eVBVMVNROVVXR25LNzRmUWpM?= =?utf-8?B?UXVSeW5NUTN3V0FmYVNBcy8rL0VFekpVdnZVWjhuYVNEUlBPU0VDRFM0clNs?= =?utf-8?B?Ykl0ZVFRZG5IbXpZU0wzU3djSW1xZXBuNEo0RGVGMzVDZk5jSjV3ald6N0Jt?= =?utf-8?B?RXJmQlgvUHNvN2s5UnIrc0FKVkZNUkY2clVaNmp4YlVJQzVuREIrYVFzYkhF?= =?utf-8?B?RkROdjl2OEt2SXhuQzJMLzZYKytFRTk5QW8xNEV3empTK1NZa2QvSGQ0TkUw?= =?utf-8?B?VmpLaFI2R0JsbjUzK2tkNlhHb0tQdlNiWXNJeWhueU9BVzcwbWFCYm00eGdU?= =?utf-8?B?TEZHTE15K3NkajVhd3FKa3ZCNmZ5dURRMnkwemNwdGVTVVpiTzNpWkJGcGpu?= =?utf-8?B?ZnFyTUgyTXpzNStCUXpyOHlOV0pzYUhTVkJidjRGNFhpRGYzc1pjek9ZZDhu?= =?utf-8?B?bWkwRXF5NzBvajBaeUZVK2cvaWN3UTJSaVNpSTcrNjZIem9WMFQ2T1N6Vkl6?= =?utf-8?B?OGFrWUkwaVg1K3ovRDJhZ0w3V0xsZi95bVA0N2pJNkFsL0kvTit4ZXNWa1hr?= =?utf-8?B?U1ZsYlg1OEQ5LzYvd1JLcWRGdHRnLy8zZi85VTNVanFCeEk3Y1pIS3R6T0JQ?= =?utf-8?B?TndZRlQ3ZTFWMU5md0hLQnFvNjA1NjhUWTJBeFV6NVFlL2szSkJDZ3JNLzR2?= =?utf-8?B?S3VFZnVTNkNLM2RqRkVtN3dwVHQrSHhnSEFpSEFWdERZSXN4MS9xYmhtcUx4?= =?utf-8?B?eGpGZWtNVDI4eW9ZTkY5VitCQjRibkg3RkRJTjZENW96VEttRCtFYUdaRE5n?= =?utf-8?B?QkdpN3JiTmtXTVJPZEVSTGZMOEhZU3MyWTIvL2RxTGsyUnJ5V1NLcTVhZUxo?= =?utf-8?B?c01nWVdPQzBwNTFzRFFqdEk3N0JRYVljUlF2RWh4SXlPcDZVU2c5bGxOVzFP?= =?utf-8?B?c1N2MGs4Tko1OFQwaUNmRXRYT2R6alNlczZVMERqZmhWSzRFUjVkSHlwZWFo?= =?utf-8?B?enlWWVNNMmNOUzdsS1UyU0NHN0JrdmRWeG5pSG1QSnQrQnF0TmZLSU5XS3o0?= =?utf-8?B?b1N4cUNKRkM2YjNlZDVMSkFXSVQxMytmMWdqOWx1alMycXZLeGExc0dXUTNt?= =?utf-8?Q?g1Uv4uR+XzXRoZI4Ao5MfpSnYJwbKQQ2eJnGjBc=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0701MB2544; 6:xQS251BEfJxdfblJVXIQqoE5WxON1tejSGuvwXIAAj2A5PQIYIE4Y9Nh8zlebvottjh2lNWHZ/gU4UKNieYVZSPfut5lDVM/7E96foBf2nLifD9MUOP8U+GrpfLf9ctVKX02fzOI5Pw/hi6BM72TnkzZ/xlVW2NHHESCO/ZMspww18SXC05mUI4dbhRJRfrOdb24SmJrXY2xIPvSbSoTp8+aFJCoNGuIwPMFIDYqbJn9P0hYq6kz1BqH5xyZKZCkgSlKKTv7QhdKxu2z7ARIfgDKGaas9AgysGL0SdcxjHzYonfB7yVyHFLM/OtumqihTC7MR6UwrJl1VPDQarsMHw==; 5:liJ1eOSblyTmXPJ2JLpOUgXHE+bxsTkR4OIOFfshwcArzfpy0rIyMyDPa4ZBafEAQ1WcWbiIcMBmTf7UWrLnmjnjnsfsydlUcscGh8Mfyc6Zx62ZKdrXvZoFc/M9QowW1rn/cSlZtXVfelFlrS19tQ==; 24:AwonMCUbL21Y8cl7BPk+3FQBwLdA7V+YSayKgZldC5KPvIYrOxCPne0rrNep5n8obk9vVl7aVyNrCCT80euV+TqcSMpEZYavTaFtOwr2Chk=; 7:TDWbywM6yAY1E7cGyj9tNbNjpPjaplRdOfTkP5YBbl9QKZ5n+/SFm9SOd8GV5+HILahb3lvZIQ8UgN1OdX1KFkRtfQXiGvDWLopJykAuRtVu+Tdx80OO8PSZvmw2NxtaZI90vOOtEa1UMczAE1ftdK7UcdDvPl6PriflSvCztAobYAnVMJv2E16qH5wdX93Cjd9uwio/JnRx0ZWbi81wbGMc4qmYUd4dc630Fp/I1Zt3VjqVLtGvg6Z7S1tGDKHIkisXhYa5WThYnwDDmK5eHLBVca6zNNlYAyBEo+MepwcIsrP69AC3lFhVKllNNx2b SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2016 13:26:16.9343 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0701MB2544 Subject: [FFmpeg-devel] [PATCH v3 21/25] avformat/mov: read the chnl box as side data AV_PKT_DATA_AUDIO_TRACK_CHANNEL_LAYOUT 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" Signed-off-by: Erkki Seppälä Signed-off-by: OZOPlayer --- libavformat/mov.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 059c7c4..b48a5d2 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -915,6 +915,101 @@ static int mov_read_chan(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_chnl(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + AVAudioTrackChannelLayout *side_data; + uint8_t stream_structure; + uint8_t channel_structured; + uint8_t object_structured; + + // ChannelConfiguration from ISO/IEC 23001-8 + AVChannelLayoutISOIEC23001_8 defined_layout; + int expected_size = 0; + + if (c->fc->nb_streams < 1) + return 0; + st = c->fc->streams[c->fc->nb_streams-1]; + + expected_size += 4; + if (atom.size < expected_size) + return 0; + + /* skip version */ + avio_skip(pb, 4); + + side_data = (void*) av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_TRACK_CHANNEL_LAYOUT, + sizeof(AVAudioTrackChannelLayout)); + + if (!side_data) + return AVERROR(ENOMEM); + + side_data->type = AV_COMPLEX_CHANNEL_LAYOUT_OBJECTS_ONLY; + side_data->nb_audio_objects = 0; + + expected_size += 1; + if (atom.size < expected_size) + return 0; + + stream_structure = avio_r8(pb); + channel_structured = stream_structure & 1; + object_structured = stream_structure & 2; + if (channel_structured) { + expected_size += 1; + if (atom.size < expected_size) + return 0; + + defined_layout = (AVChannelLayoutISOIEC23001_8) avio_r8(pb); + if (defined_layout == 0) { + int channel_count = st->codecpar->channels; + for (int i = 0; i < channel_count; ++i) { + AVAudioTrackChannelPositionISOIEC23001_8 *position = &side_data->complete.positions[i]; + AVSpeakerPositionISOIEC23001_8 speaker_position; + + expected_size += 1; + if (atom.size < expected_size) + return 0; + + speaker_position = (AVSpeakerPositionISOIEC23001_8) avio_r8(pb); + position->speaker_position = speaker_position; + if (speaker_position == AV_SPEAKER_POSITION_ISOIEC23001_8_EXPL) { + expected_size += 3; + if (atom.size < expected_size) + return 0; + + position->azimuth = avio_rb16(pb); + position->elevation = avio_r8(pb); + + if (position->azimuth < -180 || position->azimuth > 180 || + position->elevation < -90 || position->elevation > 90) { + return 0; + } + } else { + position->azimuth = 0; + position->elevation = 0; + } + } + side_data->type = AV_COMPLEX_CHANNEL_LAYOUT_COMPLETE_ISOIEC23001_8; + side_data->complete.nb_positions = channel_count; + } else { + expected_size += 8; + if (atom.size < expected_size) + return 0; + side_data->predefined.omitted_channels = avio_rb64(pb); + side_data->type = AV_COMPLEX_CHANNEL_LAYOUT_PREDEFINED_ISOIEC23001_8; + side_data->predefined.layout = defined_layout; + } + if (object_structured) { + expected_size += 1; + if (atom.size < expected_size) + return 0; + side_data->nb_audio_objects = avio_r8(pb); + } + } + + return 0; +} + static int mov_read_wfex(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -4708,6 +4803,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('w','f','e','x'), mov_read_wfex }, { MKTAG('c','m','o','v'), mov_read_cmov }, { MKTAG('c','h','a','n'), mov_read_chan }, /* channel layout */ +{ MKTAG('c','h','n','l'), mov_read_chnl }, /* channel layout ISO/IEC 23001-8 */ { MKTAG('d','v','c','1'), mov_read_dvc1 }, { MKTAG('s','b','g','p'), mov_read_sbgp }, { MKTAG('h','v','c','C'), mov_read_glbl },