From patchwork Thu Oct 19 07:39:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodger Combs X-Patchwork-Id: 5627 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp2268992jah; Thu, 19 Oct 2017 00:47:58 -0700 (PDT) X-Received: by 10.28.107.66 with SMTP id g63mr785039wmc.38.1508399278461; Thu, 19 Oct 2017 00:47:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508399278; cv=none; d=google.com; s=arc-20160816; b=mr+1NDd92DlEgSGfCjqgcn+1vHYJ+jPq9mIiSUtOPaB5hoKHX37SHB9eM4TvE8PQ4M jQa8s1MKpWguMGdmsO96rbzU9EDs4po/uOThvV58ap1sLWvbqbB40aX7Xdxn063DVbcc b/2Qws5eNvjLAT0NZcUluDFDsXb534SECTtD/4Q87vfdarxPAntXOm3iUsV+drovoZyI gArstpNucqr1JyAVrRJyAUqTD+jA11nEzanSQad6a1W7YQQLiSRuWgf/X4hvXfs/tvTz dFA2N/gV77BYwlq4zojupPG1LwxYeqUJlbuiZI8mrYtx8ZPf8bYNH994HkrrwJonTqIW L48Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=a1EaDCn7jm2MRxLc6ghlHxwBPGFtsUnUWHyfRavP0KA=; b=rva6qAJucz9gjy+i773CxmIbASYru0WmRjD8sny64FscCt+Pql/2yH2vSuxbQclZNB fRqB0ALh/FS4HqMugTKEBYYd+vNrH+CchjLMHydqp2pK0S0tI0ymr3XKi/u4ffMup3X9 J67ufGMtU5NlWPNLreWk8tlaYcnyW/S+psJpbYdoNcUhK9Aj+T0Z0a9xV/nwlA2JOCrJ 2xMQM64A8AAnsT+D9Oxiw4S2CziRkGQ8pq0r7mMBdO64m/ua6LB/gyewFbubENtDnwpC XELnNewpf072OWBqi+bZ710QvhR2G+asfTYjsQdtp+CPvlXzEheRVCnwYvwJjqSzhJ/O xmdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=eeVjvPQ8; 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=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t103si11518962wrc.401.2017.10.19.00.47.57; Thu, 19 Oct 2017 00:47:58 -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=@gmail.com header.s=20161025 header.b=eeVjvPQ8; 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=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 D0C37689AED; Thu, 19 Oct 2017 10:47:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f68.google.com (mail-it0-f68.google.com [209.85.214.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52213689909 for ; Thu, 19 Oct 2017 10:47:45 +0300 (EEST) Received: by mail-it0-f68.google.com with SMTP id p138so9240526itp.2 for ; Thu, 19 Oct 2017 00:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=kdge48acCNJfTOhdVRVrWbqRuxDqrPSo9v2WjKvuQco=; b=eeVjvPQ8d5Ifv4cKFuBALmv4AJh71hiIlE1xu+z/kvDqimHJP+Bfmnby+2syOywz/d x6iP8R122YdR6IT+iAt3Gokt1BHJWUO528SZuwAf0qDNhbEEOqdOp3d0qV7pephbjBbG 3qVW38CFhr4xNGg5ebaScA0tNU+tsYrIcpDw/b/TFkJULwCfycC5br1mjUFGKKwk3EK2 2pUsqJTjAet1VvsOAW6RN6TcivASi5uSmihlULUoZnHDbSkCgLEV/PrNGI7Bm2dDc9KD utvkGJIowwNH4BPBI19kDreIlAWmCifrUuA6UfYDaCAQooZoCOj1fAHBffI1RB+iIAb1 IvIQ== 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:in-reply-to :references; bh=kdge48acCNJfTOhdVRVrWbqRuxDqrPSo9v2WjKvuQco=; b=PnVeblDgdxcJEd1B9u1/Xt/Z8pgTS/5FPtjmJHNR5NydQpRM4bWTrlsZSjM7IF/5db 62mPJmY5X9SPZGNKMnMYC8lkWv6t7ZsFOWeHLNqDKqv/J0qLIZBnCizCruNHgWLKikqA 0qD8MeZPxGvQdPsCBHS9j7/zG18JVZt03z/uoW+U3OjiregCEGZHIZUzIl3+4lkcwd+u 55fvwm3SInNBlDAzu+urygpROIg8JGedWXyf22PGE3n7MlBBK5+EGeZzzCEOZ7lyIFdm o1jLug/K1Us8AmdlmQUiq58FobxyG/vJq40uy2l3rmjYyt+zp+WhUsqiWVC6wYawjr09 va0A== X-Gm-Message-State: AMCzsaXlkSSdBdyduEz1fCt93yyLsL0fHHnrMAmKl/g5T+Ns0SS0Hh34 rSSRK4uVBdX9a58aW+UgaZDf0QKc X-Google-Smtp-Source: ABhQp+T72eZR8YjJv7hDE0S1Juiq+gg4tyvNr/dYQXEsV59UxPhKqc6/G7iCZ45dasvg4ZpP4oEf9Q== X-Received: by 10.36.177.68 with SMTP id c4mr1150477itj.149.1508398802506; Thu, 19 Oct 2017 00:40:02 -0700 (PDT) Received: from Rodgers-MacBook-Pro.local.net (c-73-75-100-12.hsd1.il.comcast.net. [73.75.100.12]) by smtp.gmail.com with ESMTPSA id v4sm6700186iod.17.2017.10.19.00.40.01 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 19 Oct 2017 00:40:01 -0700 (PDT) From: Rodger Combs To: ffmpeg-devel@ffmpeg.org Date: Thu, 19 Oct 2017 02:39:46 -0500 Message-Id: <20171019073948.23683-2-rodger.combs@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171019073948.23683-1-rodger.combs@gmail.com> References: <20171019073948.23683-1-rodger.combs@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/4] lavf: identify MP1 and MP2 as distinct containers 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/Makefile | 2 ++ libavformat/allformats.c | 4 +-- libavformat/mp3dec.c | 66 +++++++++++++++++++++++++++++++----------------- libavformat/utils.c | 3 +-- libavformat/version.h | 4 +-- 5 files changed, 50 insertions(+), 29 deletions(-) diff --git a/libavformat/Makefile b/libavformat/Makefile index 2522a3e768..a978482211 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -296,7 +296,9 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o replaygain.o OBJS-$(CONFIG_MOV_MUXER) += movenc.o avc.o hevc.o vpcc.o \ movenchint.o mov_chan.o rtp.o \ movenccenc.o rawutils.o +OBJS-$(CONFIG_MP1_DEMUXER) += mp3dec.o replaygain.o OBJS-$(CONFIG_MP1_MUXER) += rawenc.o +OBJS-$(CONFIG_MP2_DEMUXER) += mp3dec.o replaygain.o OBJS-$(CONFIG_MP2_MUXER) += rawenc.o OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 32e9a979bc..c02cdacb7b 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -189,8 +189,8 @@ static void register_all(void) REGISTER_DEMUXER (MM, mm); REGISTER_MUXDEMUX(MMF, mmf); REGISTER_MUXDEMUX(MOV, mov); - REGISTER_MUXER (MP1, mp1); - REGISTER_MUXER (MP2, mp2); + REGISTER_MUXDEMUX(MP1, mp1); + 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 a5c4f2ea12..d405a98d7b 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; } @@ -105,7 +105,8 @@ static int mp3_read_probe(AVProbeData *p) if (first_frames>=7) return AVPROBE_SCORE_EXTENSION + 1; else if(max_frames>200)return AVPROBE_SCORE_EXTENSION; else if(max_frames>=4 && max_frames >= p->buf_size/10000) return AVPROBE_SCORE_EXTENSION / 2; - else if(ff_id3v2_match(buf0, ID3v2_DEFAULT_MAGIC) && 2*ff_id3v2_tag_len(buf0) >= p->buf_size) + else if(ff_id3v2_match(buf0, ID3v2_DEFAULT_MAGIC) && 2*ff_id3v2_tag_len(buf0) >= p->buf_size && + (p->buf_size < PROBE_BUF_MAX || layer == 3)) return p->buf_size < PROBE_BUF_MAX ? AVPROBE_SCORE_EXTENSION / 4 : AVPROBE_SCORE_EXTENSION - 2; else if(first_frames > 1 && whole_used) return 5; else if(max_frames>=1 && max_frames >= p->buf_size/10000) return 1; @@ -113,6 +114,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 +348,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; @@ -357,7 +364,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; @@ -422,6 +429,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) @@ -582,23 +595,30 @@ 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(1, "mp1,mpa") +DECLARE_LAYER(2, "mp2,m2a,mpa") +DECLARE_LAYER(3, "mp3,mpa") diff --git a/libavformat/utils.c b/libavformat/utils.c index 1a7996c4fd..a54687d239 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -609,8 +609,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, } if (id3v2_extra_meta) { - if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") || - !strcmp(s->iformat->name, "tta")) { + if (av_match_name(s->iformat->name, "mp1,mp2,mp3,aac,tta")) { if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0) goto fail; if ((ret = ff_id3v2_parse_chapters(s, &id3v2_extra_meta)) < 0) diff --git a/libavformat/version.h b/libavformat/version.h index 22f82a37f7..330ef987bb 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,8 +32,8 @@ // 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 84 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MINOR 85 +#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \