From patchwork Tue Sep 4 23:25:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Schumann X-Patchwork-Id: 10233 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp4460264jap; Tue, 4 Sep 2018 16:26:11 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbUDdmHfXzralUfIFP8bCKcSnzZH2+oIbIlxTcgYSM8kUh885ve4gj/GKg+jqEETBvLSmqU X-Received: by 2002:a1c:4c0e:: with SMTP id z14-v6mr3685755wmf.89.1536103571619; Tue, 04 Sep 2018 16:26:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536103571; cv=none; d=google.com; s=arc-20160816; b=o20tCztvopAmyRWfFRh2YTupJdczo/9Sq1yqIF4W8BcIjO55gRzOoPGcmJAXEhQdf9 Su4tMOOWbVFP2xjde3uj9i4KL7ea8hIkiIoq5pcVNWW7IHyMgbpSbxArzhDaW++DKOkq 1M0KRbmCGjOSEO3yDXW40Y66mqvOvQVYkG+96JLoxlxN/3Rbk9KI6M4/Qurndpj9SKSV rxJPrHDHDsIKrzJnMkF1eFHHqZ2k5noEUutIlRvYs/8CMOhTHyI8zln03Su7AEZUUHL+ T5K6gTMkbtbT2hVRfn8K1RZZAEvn621iF3iFYGntxEYmSyALlqO1OT+34N1186pc5vlO cB+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:content-language:accept-language :message-id:date:thread-index:thread-topic:to:from:dkim-signature :delivered-to; bh=QW5cruX2CEdNOmACb7ylXA5MDk7zY578IS2dOoJ1cTY=; b=IHi/v8VUDb91W7+ZZqu7puo5uHmYoXefZLEGdBG8na+CZduGb2KJFG+gi8dt0l3aA1 ORn5uPs41WmxRjjIFVKXMkMboibO1/eOEMt2+8+BrF7fNkZ+8PRG/w2HxGTFPR3lqCts vZNKDexS9I3P1yIftnGHsMkkTZVVrgcFcfKx9R5TmsPyHlhayeazd1W/FftZQvz4q1Yz bqitCv3MteJ0QDWorYqD24qP9SmyI/2geLR81usVh7HJgpOKOs7hqaA6nzuDJAr4ngVL hsXlWzJ1zaFPdNPjVK6LPf/1IR/1zYPovoJXfirNRbiS/rbXY7SGLNDnkO2KbMqWPi3U pYTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=ChgktiK7; 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=QUARANTINE dis=NONE) header.from=hotmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u15-v6si149489wrr.132.2018.09.04.16.26.10; Tue, 04 Sep 2018 16:26:11 -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=@hotmail.com header.s=selector1 header.b=ChgktiK7; 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=QUARANTINE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4E29C689E9E; Wed, 5 Sep 2018 02:26:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-oln040092002012.outbound.protection.outlook.com [40.92.2.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D1D4E689C42 for ; Wed, 5 Sep 2018 02:25:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2t1AfOnQAvTZuQ2WntBRjHWPj/9KGf5rYX55xUqGuZ8=; b=ChgktiK7hFj9zZBQx68QRtpNHRo1SHkicF3jOhDpcBxLeFhSkDmXw48jW6H9nydHo2TFTEzGhoVXxxj0MmWdEJWNAEkuFHyi6QXNKyi6AgMUfAp6lqrWY0PGiXl6CdYMHc3I1/YMvJE1YB2gBQLBcegO/iOyZcMA4za9hejTnrXCNms9ic1cCbCdM4QvADdP1iwR999Bfjt8RpkBA7iYEI+3ClDCHpn2ifkghZ+ISeTIL2xUQmyu6hHEbAHPNNNikZKDgcYJO7F0QH+sGp4zzqHx2SBGpM3ooXk7xnitwX6lusRlQpby3MQnfsaLNuK5Vh3SXZP/Jq9yVcH1m1KpBw== Received: from BY2NAM01FT013.eop-nam01.prod.protection.outlook.com (10.152.68.51) by BY2NAM01HT152.eop-nam01.prod.protection.outlook.com (10.152.68.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.1122.11; Tue, 4 Sep 2018 23:25:58 +0000 Received: from DM3PR16MB1050.namprd16.prod.outlook.com (10.152.68.53) by BY2NAM01FT013.mail.protection.outlook.com (10.152.69.199) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.1122.11 via Frontend Transport; Tue, 4 Sep 2018 23:25:58 +0000 Received: from DM3PR16MB1050.namprd16.prod.outlook.com ([fe80::d838:d726:cc4a:e001]) by DM3PR16MB1050.namprd16.prod.outlook.com ([fe80::d838:d726:cc4a:e001%4]) with mapi id 15.20.1101.016; Tue, 4 Sep 2018 23:25:58 +0000 From: Markus Schumann To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] fix MXF audio PTS calculation for compressed audio (ADTS/AAC) Thread-Index: AQHURKY2fCNaqNfgUESxxE5YrH2fYQ== Date: Tue, 4 Sep 2018 23:25:58 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:1E149BCDA4BF0437306AB5D7D4DA24E710267DC40F26E2A3EDFC4161A2FA9A68; UpperCasedChecksum:CE7FAB7BD90D830D9FD4A715306628470B7D30C720EA92D168B6FCABD6A4E121; SizeAsReceived:6933; Count:44 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [wZ9/NWB2M8Q79al8ziRz5dwgzQ/LdKs1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2NAM01HT152; 6:idKjuhUdT2lsfokcgbxwCExw9G4yN0YBl1cHTYt34ATpCjtcl1zEekbMsfifvwyon5RDe4Kp8e2DItfUZpKA8In4TNAIx8IlDwiIpsD8Jo4HjJe+NoKdpqN63a4rTAcOwFydP9BzNK+3oTvN79P4aBe/+ThANvTgOYZRVTkEnVa7oML68tWFfvoNguOatVRzMM2RYBBnY+EpuW7gzlNjGVUL93MwQujNGG6qyOTCc+0eDKFjo91ETSg6pq6xrTBY6YHFDJQdjpd8jjAxmHxYpem2BXk0u8lPwV7nVbblEiCpJbYoOQDjcdl99KTBNRXAKh0g7rforxZGPFpx2A5MYZ1VCmV5IFMDiUg7zCVyWuA62TXXDXSvz3jn73jxyQkcuSuTv3FEcJymi4EteBXIqlosQomwH2VOE6xBgSm2g1WbboOzdx1n2Mu9oua4nKvOo6C27RJJ2ajYwIi/5vIMnA==; 5:HiFS+oKrtwg66xc8FOAANsQ1AFUxcBknmZkDzqbC3Qb4vyuDW6javwxcAY9CqCtr26GT4YjXH/IcQevrj80aEAdctJ4oIh7499tXno4pxeoc4xLbLQd40zzdGqy9sTLj5GbPsEPckf1eE3GnBdGfp5cKPT5qM/HWL9eVPrl8F+w=; 7:6uezEtdiaBK/qgjiNzV0dxFADaj4UFyir0t7v6QdpEYtwfj3zldcrgdlpw0TmHvTD7bXOZntrFY+dLd1QAhDCpiaTaFAUX8a3iw8qhCR0JmYm0elTaiB6jFn+lO/EUflDZrfdf5B+RwLy9cUgoTYAcjPmc+1HMGo4Q1z1Gpkt9p7BhBwC+o5RDwi/250An/lhwRBuaIrdSb1bBYsaepV7a6xJ03pck/fK5bRMmXeOI0tfG7SEhteB3n48HNCOPuF x-incomingheadercount: 44 x-eopattributedmessage: 0 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(2017031322404)(1601125500)(1603101475)(1701031045); SRVR:BY2NAM01HT152; x-ms-traffictypediagnostic: BY2NAM01HT152: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(4566010)(82015058); SRVR:BY2NAM01HT152; BCL:0; PCL:0; RULEID:; SRVR:BY2NAM01HT152; x-forefront-prvs: 0785459C39 x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(189003)(199004)(106356001)(2351001)(82202002)(20460500001)(105586002)(7696005)(486006)(68736007)(256004)(14444005)(56003)(26005)(102836004)(6346003)(6506007)(1857600001)(2501003)(83332001)(104016004)(5250100002)(5640700003)(55016002)(6436002)(86362001)(9686003)(99286004)(5660300001)(6916009)(33656002)(2900100001)(25786009)(8936002)(305945005)(8676002)(81156014)(14454004)(74316002)(476003)(87572001)(97736004)(73972006)(15852004)(42262002); DIR:OUT; SFP:1901; SCL:1; SRVR:BY2NAM01HT152; H:DM3PR16MB1050.namprd16.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: hotmail.com does not designate permitted sender hosts) authentication-results: spf=none (sender IP is ) smtp.mailfrom=go4shoe@hotmail.com; x-microsoft-antispam-message-info: cFq2mXJgwdWcvrL5DQbVH98TmI+2RHVk3a2gh96D7UMl2X9Q6ad00ym19fy/bla+sqgPIOoBhFB0io404krZz4D4FnWIbNo7Pd1gGfOzDXqZtqiLfQPbvKFFoeqSe8aDVZlRq2wVLsCU21/Eh6VrB9vqCjTOrP2Qoom0P7/znoklGWo1+ecozvz9yCof7JDHWoO8k1PfFDf8AKcN9d/MqvpkBsRV/E7HZ7sNAZYsGbQ= MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 24fd1209-d934-423e-a578-ee886993c07f X-MS-Exchange-CrossTenant-Network-Message-Id: d234880e-0df3-4247-ace7-08d612bdc507 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 24fd1209-d934-423e-a578-ee886993c07f X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2018 23:25:58.2586 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2NAM01HT152 Subject: [FFmpeg-devel] [PATCH] fix MXF audio PTS calculation for compressed audio (ADTS/AAC) 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/mxfdec.c | 67 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) --- 2.17.1 diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 8e1089620f..adfffd954a --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3266,9 +3266,63 @@ static int64_t mxf_set_current_edit_unit(MXFContext *mxf, AVStream *st, int64_t return mxf_set_current_edit_unit(mxf, st, current_offset, 0); } +static int mxf_aac_adts_count_frames(MXFContext *mxf, AVCodecParameters *par, + AVPacket *pkt) +{ + const uint8_t *end_ptr; + uint8_t *data_ptr; + int32_t aac_frame_length, adts_frame_count; + uint8_t sample_rate_index; + uint8_t channel_configuration; + + data_ptr = pkt->data; + end_ptr = pkt->data + pkt->size; + adts_frame_count = 0; + + /* ADTS header is 7 bytes */ + if (pkt->size < 7) + return 0; + + /* check for sync bits 0xfff */ + if (data_ptr[0] != 0xff || (data_ptr[1] & 0xf0) != 0xf0) return AVERROR(EINVAL); + + sample_rate_index = (data_ptr[2] & 0x3c) >> 2; + + channel_configuration = ((data_ptr[2] & 0x01) << 2) | ((data_ptr[3] & 0xc0) >> 6); + + adts_frame_count = 1; + + data_ptr += 7; + + for (; data_ptr + 7 < end_ptr; ++data_ptr) + { + /* check for sync bits 0xfff */ + if (data_ptr[0] != 0xff || (data_ptr[1] & 0xf0) != 0xf0) continue; + + /* make sure sample rate is identical */ + if (sample_rate_index != (data_ptr[2] & 0x3c) >> 2) continue; + + /* make sure channel configuration is identical */ + if (channel_configuration != (((data_ptr[2] & 0x01) << 2) | ((data_ptr[3] & 0xc0) >> 6))) continue; + + aac_frame_length = ((int32_t)(data_ptr[3] & 0x03) << 11) | ((int32_t)data_ptr[4] << 3) | ((int32_t)(data_ptr[5] & 0xe0) >> 5); + + /* sanity check on the frame length */ + if (aac_frame_length < 1 || aac_frame_length > 8 * 768 + 7 + 2) continue; + + ++adts_frame_count; + + data_ptr += 7; + } + + return adts_frame_count; +} + static int mxf_set_audio_pts(MXFContext *mxf, AVCodecParameters *par, AVPacket *pkt) { + int frame_count; + MXFTrack *track = mxf->fc->streams[pkt->stream_index]->priv_data; int64_t bits_per_sample = par->bits_per_coded_sample; @@ -3281,7 +3335,18 @@ static int mxf_set_audio_pts(MXFContext *mxf, AVCodecParameters *par, || bits_per_sample <= 0 || par->channels * (int64_t)bits_per_sample < 8) return AVERROR(EINVAL); - track->sample_count += pkt->size / (par->channels * (int64_t)bits_per_sample / 8); + + switch (par->codec_id) { + case AV_CODEC_ID_AAC: + frame_count = mxf_aac_adts_count_frames(mxf, par, pkt); + if (frame_count < 0) return AVERROR(EINVAL); + track->sample_count += 1024 * frame_count; + break; + default: + /* here we assume PCM */ + track->sample_count += pkt->size / (par->channels * (int64_t)bits_per_sample / 8); + break; + } return 0; }