From patchwork Wed Sep 21 07:23:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 38129 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2432410pzh; Wed, 21 Sep 2022 00:23:45 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4iWh9qBPrjh+UWO8BJs7wD8aRaYKERpPqSMaiflx0Axe842oaIhTW00OW6br+1vcsSwWt0 X-Received: by 2002:aa7:cad5:0:b0:454:88dc:2c22 with SMTP id l21-20020aa7cad5000000b0045488dc2c22mr4983002edt.352.1663745025092; Wed, 21 Sep 2022 00:23:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663745025; cv=none; d=google.com; s=arc-20160816; b=k+4EXFYoNJrV/2gCTulZLXmusbEjDM2qZjGzXA7ZDYmc3BKEdljyW8Pzc+wgXHKU7u JQWvvW/XAVsehf96mGn5rMLqS0mTr/YUtINmZuMoA2MkDojFEkxU3VJ34Z+9UnTu/+ow +atNtwmb26snO8Ff9iEZdoeRDone5D6kSEtsRelSXdlxqDYiDbpd37cPMNZbhXhsli4s JatUM/5Mi+FRwewzyIsj6vYAQ9d9+8Xqqi1I+xPBVoIjIjin31rozfJvNACa07oq1X98 AiJc0JShXMUku7gkc6w7zcjl8oAGoqyLyRtzYLhgp4mK9zhJQpV4OQ0A48xv0enIxwxc IXkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=SvXMpNmgQ8LeOnXFdCa1VxkxoKDFfqYn5XZMPKICb/I=; b=DdFHJqlT8aySOGUsGT53QBXCviG86SuWRlnsExoQuapTuwAvgFzsDhRbtxQ1HZ8llV D8Y+FMyusqUx1taYbqaD2F5uZNz2zn2f3AsJUhupj1ecz/a4W7K3XWfetNCoBV6Ef+0O q+Te+8QQylreNY9PwVaLFIHQdQgUHgdrVkXYaUzfAMb7OoM11sW0z61SF6Oe0seRUesb xZXjhSHZF+lupK4SFKW3wXfryX4C6NSJVMkLRl27R7vH2wOkNK4uf0QI+S4IYtIbJKkz QEQoAW0l6YZgwGyQyOKWlYyvYqY0RWZLc6BUgWOmaY4LRRbkUq0xEOaPYeJg/mOmJyo2 nAvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=KAwDjScZ; 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=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 he35-20020a1709073da300b007811e1fc92esi1738298ejc.517.2022.09.21.00.23.44; Wed, 21 Sep 2022 00:23:45 -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=20210112 header.b=KAwDjScZ; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F112468BB67; Wed, 21 Sep 2022 10:23:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8500968B745 for ; Wed, 21 Sep 2022 10:23:35 +0300 (EEST) Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-3454b0b1b6dso54183377b3.4 for ; Wed, 21 Sep 2022 00:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date; bh=AsNIPnbhMXnzRoKje8bSUDC/110SoHBhOh9mKOMgiGQ=; b=KAwDjScZWa85aiUg44UkyCaXyyOfdGlkatUDzBcfvHjlDjwBVvXpwOk2SRSqbedZsQ Kfi+Y21LX6xJpHNLfzyyz4x7UF9U3XI73ZeUQjBYQeV3LFGwt/GCca0r3Wf22pkoKoiT A+9tM4VmiV/mPkwamSaFxMI3PQkidi+quA+hvNArRpA9iCBPFT1gW9DoVIYwqoJkL/dz pLMw7stT8uh/qE8onnZ6saEp4XXnjUyMURH6PzGy8HkJIld4pPsBkQXiXgTP+LFGIGmK zQRFCpLONKS++hlJa+RCNuqsvBsnMMM7YEqMAvXbkJ3gA5iAYObUOUtwcqbGmsPjv2bI ohnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date; bh=AsNIPnbhMXnzRoKje8bSUDC/110SoHBhOh9mKOMgiGQ=; b=BlC8uirS8IoPkB7xoVxh0RnSnroh/ATFQ3UptzUG48oGLyVWtjQJjr8i8igMe4UWFl kB1YZ0tssNf2rHF6JUSF18Wn7P131xevSEccagKH0shnClNpepzXvasZjfg/BH9c3keJ RLCdrOYIJ300Ljc7pH+saEHjUbcKSjOnWr4oAzLv1PisIGNx0+asfO1btdFjls0eZJqz pKVNFSGcG+vzzJV9ZJ2tbSsGYRGEOph15M5ZwBKgtbfgKbGU8Qhq8x0CyRtPHqFmYTtI 7FT24G32jclK9p9mdBWfRpj0W9vGT/bX2XYe+cNnzMsL38LGl1zBfkOn7xU6Yw+4sOAJ 4FGw== X-Gm-Message-State: ACrzQf2rfmKXmXObZY6JYcP9QzLuYfR5zG+J6XJsZ6M6tq70BTVwxcE8 q2syac/MC/qnAuYsXBEUbVWDKodSb4QYHL5pbRXGQpF+ X-Received: by 2002:a81:a708:0:b0:335:17af:e96a with SMTP id e8-20020a81a708000000b0033517afe96amr23776845ywh.34.1663745014218; Wed, 21 Sep 2022 00:23:34 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a81:7402:0:0:0:0:0 with HTTP; Wed, 21 Sep 2022 00:23:33 -0700 (PDT) From: Paul B Mahol Date: Wed, 21 Sep 2022 09:23:33 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] A-pac demuxer and decoder X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: w5QnGwRSWwEb Patches attached. From d2d7ed7a0539424fe3dd72fdc68a95840d54123b Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Mon, 19 Sep 2022 22:05:20 +0200 Subject: [PATCH 2/2] avformat: add APAC demuxer Signed-off-by: Paul B Mahol --- libavformat/Makefile | 1 + libavformat/allformats.c | 1 + libavformat/apac.c | 85 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 libavformat/apac.c diff --git a/libavformat/Makefile b/libavformat/Makefile index 19deb33c2e..d669dc8f44 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -101,6 +101,7 @@ OBJS-$(CONFIG_AMRNB_DEMUXER) += amr.o rawdec.o OBJS-$(CONFIG_AMRWB_DEMUXER) += amr.o rawdec.o OBJS-$(CONFIG_AMV_MUXER) += amvenc.o OBJS-$(CONFIG_ANM_DEMUXER) += anm.o +OBJS-$(CONFIG_APAC_DEMUXER) += apac.o rawdec.o OBJS-$(CONFIG_APC_DEMUXER) += apc.o OBJS-$(CONFIG_APE_DEMUXER) += ape.o apetag.o img2.o OBJS-$(CONFIG_APM_DEMUXER) += apm.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index a545b5ff45..47c419a009 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -52,6 +52,7 @@ extern const AVInputFormat ff_amrnb_demuxer; extern const AVInputFormat ff_amrwb_demuxer; extern const AVOutputFormat ff_amv_muxer; extern const AVInputFormat ff_anm_demuxer; +extern const AVInputFormat ff_apac_demuxer; extern const AVInputFormat ff_apc_demuxer; extern const AVInputFormat ff_ape_demuxer; extern const AVInputFormat ff_apm_demuxer; diff --git a/libavformat/apac.c b/libavformat/apac.c new file mode 100644 index 0000000000..4d484221fe --- /dev/null +++ b/libavformat/apac.c @@ -0,0 +1,85 @@ +/* + * APAC demuxer + * Copyright (c) 2022 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/intreadwrite.h" +#include "avformat.h" +#include "demux.h" +#include "internal.h" +#include "rawdec.h" + +static int apac_probe(const AVProbeData *p) +{ + if (AV_RB32(p->buf) == MKBETAG('A','P','A','C') && + AV_RB32(p->buf + 8) == MKBETAG('P','R','O','F') && + AV_RB32(p->buf + 12) == MKBETAG('N','A','D',' ')) + return AVPROBE_SCORE_MAX; + + return 0; +} + +static int apac_read_header(AVFormatContext *s) +{ + AVIOContext *pb = s->pb; + uint32_t chunk_size; + AVStream *st; + int64_t pos; + + avio_skip(pb, 16); + chunk_size = avio_rl32(pb); + avio_skip(pb, chunk_size); + if (avio_rb32(pb) != MKBETAG('P','F','M','T')) + return AVERROR_INVALIDDATA; + chunk_size = avio_rl32(pb); + pos = avio_tell(pb); + avio_skip(pb, 2); + st = avformat_new_stream(s, NULL); + if (!st) + return AVERROR(ENOMEM); + st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; + st->codecpar->codec_id = AV_CODEC_ID_APAC; + st->codecpar->ch_layout.nb_channels = avio_rl16(pb); + st->codecpar->sample_rate = avio_rl32(pb); + if (st->codecpar->ch_layout.nb_channels <= 0 || + st->codecpar->sample_rate <= 0) + return AVERROR_INVALIDDATA; + avio_skip(pb, 2); + st->codecpar->bits_per_coded_sample = avio_rl16(pb); + avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); + avio_skip(pb, (chunk_size + pos) - avio_tell(pb) + (chunk_size & 1)); + if (avio_rb32(pb) != MKBETAG('P','A','D',' ')) + return AVERROR_INVALIDDATA; + avio_skip(pb, 4); + + return 0; +} + +const AVInputFormat ff_apac_demuxer = { + .name = "apac", + .long_name = NULL_IF_CONFIG_SMALL("raw APAC"), + .read_probe = apac_probe, + .read_header = apac_read_header, + .read_packet = ff_raw_read_partial_packet, + .extensions = "apc", + .flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK | AVFMT_NOTIMESTAMPS, + .raw_codec_id = AV_CODEC_ID_APAC, + .priv_data_size = sizeof(FFRawDemuxerContext), + .priv_class = &ff_raw_demuxer_class, +}; -- 2.37.2