From patchwork Mon Mar 6 12:02:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40594 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2587176pzb; Sun, 5 Mar 2023 20:02:27 -0800 (PST) X-Google-Smtp-Source: AK7set/FX0KIaTHglmyp76indPnXzd1ksuw5/+hymEiB9cX+nhpvFVNxx5kPOQOdcWmY9P8eR5Vj X-Received: by 2002:a17:907:3f82:b0:8b1:7e88:c20f with SMTP id hr2-20020a1709073f8200b008b17e88c20fmr14866934ejc.15.1678075347342; Sun, 05 Mar 2023 20:02:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678075347; cv=none; d=google.com; s=arc-20160816; b=nPUe3kDt4ZBus+OBdt4UchGSpji4gR06MABJT5Phsk0Ca/sr6MsOV+IIUDzxKpvGnf n2e2zH2RBbUO7D49pjCw+AtcayCXR5+WFIxKCRW3/KEH2lkoJlaqsm3sHGv/pNOGFlE6 jWdC2TWGDakWDRv0R7wdyTLXYt0UfO22P6VmchOX2S+A0rsCFMm4yTt6oAfYhkif7wI3 NqHTHluw4XYFgOrgWSyUPqSTMrz6qnyiOkX8CVNEsV+woMXIxBoh4Uvmnnoqu9wTKA9W 6IADEbQ1u53Zvj7hOBeiyRFkn4/dse3pYuxS+IAkLt6ZAQmRVrq/ylAN7Si3NcKO6VsA /mvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=ZdyQuYrcz8z84pGht2MBhY6zy/o7XDmMSpViCk99kJ4=; b=mFfPbMQB4QswFlbkSPvPkMrYOhAbljToMUVYLM2vy+7PDgofAHjkbIYE5gpEQXZgPv VdFTP4N6Vfk6DzKYW/9tYLO50c23Jt42zMz4BPFd+pShg3ue5k3O9zgXMmdjGehlNMpa 9fwGAD8Pbylw8H1Hxdh5ku5CDoiVuzk4fAaXbeu3tlHM3DmHKs2mW0WqIMYJexuObZG+ rfXJQ60zpvJ7rgQoVYx1igHTDyNu+sAf830pCI6rWPvr+19iRM1FwOhYMGvP19lJpezK KPOjH4MIuWgOhlow5I4KcB200wuNuC37TC9NzU+fuYua97BbDao1yH9IqHt2x5QhQL9Z ZEUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=qay8UfKS; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h24-20020a170906399800b008da1e19114fsi7741829eje.322.2023.03.05.20.02.26; Sun, 05 Mar 2023 20:02:27 -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=@foxmail.com header.s=s201512 header.b=qay8UfKS; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A01EB689D0D; Mon, 6 Mar 2023 06:02:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-82.mail.qq.com (out203-205-251-82.mail.qq.com [203.205.251.82]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9DAD2688373 for ; Mon, 6 Mar 2023 06:02:13 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1678075330; bh=FXU3NaG6edSjgWJrtNSox+I3mk/9grhtUCYAkCd4dF4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=qay8UfKSld2KH44It49Iyj8ZWFDI2gg0Sq2SLSLw+KbhbK0jBXhD1lriyaq/r7a6N CNVB14yBtQ42MCO3dutRhXuCFujrNFMM0E2rxS4LKR1QJ/qdkU+MeMu9ClMfBYRdSu I5VFSbaLPEiA5B5AKy9VT1HkmWkbCvF1ckuR1t+E= Received: from localhost.localdomain ([119.147.10.201]) by newxmesmtplogicsvrsza12-0.qq.com (NewEsmtp) with SMTP id 88210DA; Mon, 06 Mar 2023 12:02:08 +0800 X-QQ-mid: xmsmtpt1678075329tgdr3wk9f Message-ID: X-QQ-XMAILINFO: NJqppJoFFPLCCv67ZM8DXvB+01extOcYHlZY2XC92E7rGfdyeTBDn/jEwupFVj W9UpUzOX7nQB/ITmpsr9RBUbh/C8ZeWMUt+f0TDdrthFUDCZcyIQEq2vZi5rl9ssIGgZLOzNQ/Up JIiG7yrzLjESZTWdKno4bamBFYkLQUtAVNlnBBRlDe0DWvt/gL+3RYh+YCNNXJe7xoWI7xmP0uhP mCgz8SBUwGHOlr+fp16ZvdzyeySBlBaNdSIN6s3gcVUJ4U2Lb7QvrTEx7Oglt+N+Tor3OfJhtucg TRchkri5JxYwiRmrkg5ICgBzxUvosKF9XEpAg7XI3CTWr/GAXy1I0shhEzzDfcHNPTxiyGZ21pb7 9DsMVxo1n721p0UB9rkuEYaGOjLGsZ48AIAwdTzAQMhKRHjfkrLiAgeMC5K16/C+cGJAWNRoVCCL +7BFa6S3iWN2tTuYUk+Z6zvdSW1zHK4VqmqMGlkxuOfnTv5uKKo3OqR0FFXZbaIu+BZymBIkFeu4 hOI0pY6s+23Jysn7C/lMmHRQNMpiv8leWDZIz8TJYZkHc6JfPN7t6MKyTsV1mq00hN541zmZxsRr bncuQUrtXKxMF7kdHLb0qYMjkH82f0jP2TP7QOShBeMcB6hgdV6Xaj1JuN/v/a9SwJaONIgDzxmh pWfHSjM7KdgM53qEqbAfUFYw7tL394Y9ZxSO1ugHo5JKGAtBY6T+bX94Q+59q9Wv86gACXljr4mD GCQcu+PcTN81Cx8ds+RG46CF6dArXx2oTNia+mbslmdzDYz33VSRMTR9rw+/6j8y70Q9FeMu98Ky csfCy/DIaZRL+pXx8OYGQ0uwSVGukXwwSHDnCYKz68vMoLyCp7SPydvYGS/qF2Km5YtJqUIF9gMt 8ifLet0qkWHkRajhcQ0LXI+vt/fe8m3/FGicBs3AFOZ2EA2fus1UUDvnU5+Y5sKXOtTbZojqlhWG 8iiW3AjguUrndCij8dh6849IxOEbK3 From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 6 Mar 2023 20:02:07 +0800 X-OQ-MSGID: <20230306120211.1249250-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230306120211.1249250-1-quinkblack@foxmail.com> References: <20230306120211.1249250-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/5] avformat/mov: fix ISO/IEC 23003-5 support 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 Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 7fiGIIeTFEcX From: Zhao Zhili Missing floating-point formats support. Signed-off-by: Zhao Zhili --- libavformat/isom.h | 2 ++ libavformat/mov.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/libavformat/isom.h b/libavformat/isom.h index 5107b4eb74..4b1cd42f0f 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -418,6 +418,8 @@ static inline enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags) #define MOV_ISMV_TTML_TAG MKTAG('d', 'f', 'x', 'p') #define MOV_MP4_TTML_TAG MKTAG('s', 't', 'p', 'p') +#define MOV_MP4_FPCM_TAG MKTAG('f', 'p', 'c', 'm') +#define MOV_MP4_IPCM_TAG MKTAG('i', 'p', 'c', 'm') struct MP4TrackKindValueMapping { int disposition; diff --git a/libavformat/mov.c b/libavformat/mov.c index a9911c0f79..14528bdcaa 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1591,6 +1591,10 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) { int format_flags; int version, flags; + int pcm_sample_size; + AVFormatContext *fc = c->fc; + AVStream *st; + MOVStreamContext *sc; if (atom.size < 6) { av_log(c->fc, AV_LOG_ERROR, "Empty pcmC box\n"); @@ -1608,6 +1612,51 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) } format_flags = avio_r8(pb); + pcm_sample_size = avio_r8(pb); + + if (fc->nb_streams < 1) + return AVERROR_INVALIDDATA; + + st = fc->streams[fc->nb_streams - 1]; + sc = st->priv_data; + + if (sc->format == MOV_MP4_FPCM_TAG) { + switch (pcm_sample_size) { + case 32: + st->codecpar->codec_id = AV_CODEC_ID_PCM_F32BE; + break; + case 64: + st->codecpar->codec_id = AV_CODEC_ID_PCM_F64BE; + break; + default: + av_log(fc, AV_LOG_ERROR, "invalid pcm_sample_size %d for %s\n", + pcm_sample_size, + av_fourcc2str(sc->format)); + return AVERROR_INVALIDDATA; + } + } else if (sc->format == MOV_MP4_IPCM_TAG) { + switch (pcm_sample_size) { + case 16: + st->codecpar->codec_id = AV_CODEC_ID_PCM_S16BE; + break; + case 24: + st->codecpar->codec_id = AV_CODEC_ID_PCM_S24BE; + break; + case 32: + st->codecpar->codec_id = AV_CODEC_ID_PCM_S32BE; + break; + default: + av_log(fc, AV_LOG_ERROR, "invalid pcm_sample_size %d for %s\n", + pcm_sample_size, + av_fourcc2str(sc->format)); + return AVERROR_INVALIDDATA; + } + } else { + av_log(fc, AV_LOG_ERROR, "'pcmC' with invalid sample entry '%s'\n", + av_fourcc2str(sc->format)); + return AVERROR_INVALIDDATA; + } + if (format_flags & 1) // indicates little-endian format. If not present, big-endian format is used set_last_stream_little_endian(c->fc);