From patchwork Wed Dec 21 04:48:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodger Combs X-Patchwork-Id: 1879 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.65.86 with SMTP id o83csp2075096vsa; Tue, 20 Dec 2016 20:54:41 -0800 (PST) X-Received: by 10.28.0.13 with SMTP id 13mr3026412wma.126.1482296081831; Tue, 20 Dec 2016 20:54:41 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ed1si25855472wjd.260.2016.12.20.20.54.41; Tue, 20 Dec 2016 20:54:41 -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=@gmail.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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D324968A254; Wed, 21 Dec 2016 06:54:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io0-f194.google.com (mail-io0-f194.google.com [209.85.223.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B8F90689F69 for ; Wed, 21 Dec 2016 06:54:31 +0200 (EET) Received: by mail-io0-f194.google.com with SMTP id y124so24681689iof.1 for ; Tue, 20 Dec 2016 20:54:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=qSPg9wFLQxw56W9JjUeg/BDwpdEgAAQyGwNnj7V28Mg=; b=jsKff08v6WRwIb6ONdHEIhEQN3FslvqLW/5hdxfYK4VPuD3y0HbJf0s14ZFqvqb/Vf VqEGcDx6l3nHLvoZaa/AFLmr8KyUtIR8/CF8pg36U1s81gWtqV+6Icw8Vq6BnqIHUeQY qGlQXZD9dL09axK0sfpYzViF1ZbAtrmVzKlSoMlmuEmDpr1UEoogYucLW8JmLwMCXdUi OgvULTBNCl7kauvRoqMLQWTSa8nI/G4wqnoRj+dT718B2L+K3W3nQVipn9TRBz9DcTrS gFLRQaC/lKKieZlss+UTPLCxxZYmFVRH/9eeMDYG8r+upL8b72geF+1wt8a1GOorE2gz YPNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=qSPg9wFLQxw56W9JjUeg/BDwpdEgAAQyGwNnj7V28Mg=; b=CPZmY24IcbQDqduvus+DR/tP0BKI371bhTGeI2AeYNYEgLeavn/q9gpOg+/djk6Svm qq4zk4fPvqCezbvY1ESch6hLAQYyX1rPthBgqdLlhcrsdDJWVZYyPPSTYabmWD1VA4s6 ZraXBz9TZXmXTQC1Mcg6epvmDsD0RgyYs3PkfGsxJe/oQen6clf3X1TzoqmWXOfHuloa hnI/mW3xQDQVZIWCgOgSqOUJKPiTyZWeqR5uPkyScQtaK0ozfKNl5m9gigBtjABc7Tib jtbJpWkJJI3Nxh0k4jsnHhQGsvl4lfDPNSvKcpXvGIdGtH4Txt0udZFhKb5mtLdFVh9c LDoQ== X-Gm-Message-State: AIkVDXL/3D4AKiJK7lHE/jfviBQWmcmjlZZYNOmmUibOxmD+AgsIdv1rjxx9ZupuLsI2VQ== X-Received: by 10.107.46.25 with SMTP id i25mr3728042ioo.145.1482295700764; Tue, 20 Dec 2016 20:48:20 -0800 (PST) Received: from Rodgers-MacBook-Pro.local.net (c-73-110-121-59.hsd1.il.comcast.net. [73.110.121.59]) by smtp.gmail.com with ESMTPSA id s13sm2935409itb.17.2016.12.20.20.48.19 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 20 Dec 2016 20:48:19 -0800 (PST) From: Rodger Combs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Dec 2016 22:48:12 -0600 Message-Id: <20161221044814.87331-1-rodger.combs@gmail.com> X-Mailer: git-send-email 2.11.0 Subject: [FFmpeg-devel] [PATCH 1/3] lavf: identify MP2 as a distinct container from MP3 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This allows us to report the correct codec ID here --- libavformat/allformats.c | 2 +- libavformat/mp3dec.c | 62 +++++++++++++++++++++++++++++++----------------- libavformat/version.h | 2 +- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 6a79b75d78..6fd8aa609b 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -189,7 +189,7 @@ void av_register_all(void) REGISTER_DEMUXER (MM, mm); REGISTER_MUXDEMUX(MMF, mmf); REGISTER_MUXDEMUX(MOV, mov); - REGISTER_MUXER (MP2, mp2); + REGISTER_MUXDEMUX(MP2, mp2); REGISTER_MUXDEMUX(MP3, mp3); REGISTER_MUXER (MP4, mp4); REGISTER_DEMUXER (MPC, mpc); diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c index 099ca57d24..499aa45fd4 100644 --- a/libavformat/mp3dec.c +++ b/libavformat/mp3dec.c @@ -66,7 +66,7 @@ static int check(AVIOContext *pb, int64_t pos, uint32_t *header); /* mp3 read */ -static int mp3_read_probe(AVProbeData *p) +static int mpa_read_probe(AVProbeData *p, int layer) { int max_frames, first_frames = 0; int whole_used = 0; @@ -89,7 +89,7 @@ static int mp3_read_probe(AVProbeData *p) header = AV_RB32(buf2); ret = avpriv_mpegaudio_decode_header(&h, header); - if (ret != 0) + if (ret != 0 || h.layer != layer) break; buf2 += h.frame_size; } @@ -113,6 +113,12 @@ static int mp3_read_probe(AVProbeData *p) //mpegps_mp3_unrecognized_format.mpg has max_frames=3 } +#define READ_PROBE(l) \ +static int mp##l##_read_probe(AVProbeData *p) \ +{ \ + return mpa_read_probe(p, l); \ +} + static void read_xing_toc(AVFormatContext *s, int64_t filesize, int64_t duration) { int i; @@ -341,7 +347,7 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base) return 0; } -static int mp3_read_header(AVFormatContext *s) +static int mpa_read_header(AVFormatContext *s, enum AVCodecID id) { MP3DecContext *mp3 = s->priv_data; AVStream *st; @@ -354,7 +360,7 @@ static int mp3_read_header(AVFormatContext *s) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; - st->codecpar->codec_id = AV_CODEC_ID_MP3; + st->codecpar->codec_id = id; st->need_parsing = AVSTREAM_PARSE_FULL_RAW; st->start_time = 0; @@ -419,6 +425,12 @@ static int mp3_read_header(AVFormatContext *s) return 0; } +#define READ_HEADER(l) \ +static int mp##l##_read_header(AVFormatContext *s) \ +{ \ + return mpa_read_header(s, AV_CODEC_ID_MP##l); \ +} + #define MP3_PACKET_SIZE 1024 static int mp3_read_packet(AVFormatContext *s, AVPacket *pkt) @@ -579,23 +591,29 @@ static const AVOption options[] = { { NULL }, }; -static const AVClass demuxer_class = { - .class_name = "mp3", - .item_name = av_default_item_name, - .option = options, - .version = LIBAVUTIL_VERSION_INT, - .category = AV_CLASS_CATEGORY_DEMUXER, +#define DECLARE_LAYER(l, ext) \ +READ_PROBE(l) \ +READ_HEADER(l) \ +static const AVClass demuxer_class_##l = { \ + .class_name = "mp" #l, \ + .item_name = av_default_item_name, \ + .option = options, \ + .version = LIBAVUTIL_VERSION_INT, \ + .category = AV_CLASS_CATEGORY_DEMUXER, \ +}; \ +\ +AVInputFormat ff_mp##l##_demuxer = { \ + .name = "mp" #l, \ + .long_name = NULL_IF_CONFIG_SMALL("MP" #l " (MPEG audio layer " #l ")"), \ + .read_probe = mp##l##_read_probe, \ + .read_header = mp##l##_read_header, \ + .read_packet = mp3_read_packet, \ + .read_seek = mp3_seek, \ + .priv_data_size = sizeof(MP3DecContext), \ + .flags = AVFMT_GENERIC_INDEX, \ + .extensions = ext, /* XXX: use probe */ \ + .priv_class = &demuxer_class_##l, \ }; -AVInputFormat ff_mp3_demuxer = { - .name = "mp3", - .long_name = NULL_IF_CONFIG_SMALL("MP2/3 (MPEG audio layer 2/3)"), - .read_probe = mp3_read_probe, - .read_header = mp3_read_header, - .read_packet = mp3_read_packet, - .read_seek = mp3_seek, - .priv_data_size = sizeof(MP3DecContext), - .flags = AVFMT_GENERIC_INDEX, - .extensions = "mp2,mp3,m2a,mpa", /* XXX: use probe */ - .priv_class = &demuxer_class, -}; +DECLARE_LAYER(2, "mp2,m2a,mpa") +DECLARE_LAYER(3, "mp3,mpa") diff --git a/libavformat/version.h b/libavformat/version.h index 65e6a4ccb7..21cc8a99c7 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 57 -#define LIBAVFORMAT_VERSION_MINOR 61 +#define LIBAVFORMAT_VERSION_MINOR 62 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \