From: Zhao Zhili <quinkblack@foxmail.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Zhao Zhili <zhilizhao@tencent.com>
Subject: [FFmpeg-devel] [PATCH v3 1/5] avformat/mov: fix ISO/IEC 23003-5 support
Date: Mon, 6 Mar 2023 20:02:07 +0800
Message-ID: <tencent_61A6CDA7F42A92930D1C5ACB98A61050B806@qq.com> (raw)
In-Reply-To: <20230306120211.1249250-1-quinkblack@foxmail.com>
From: Zhao Zhili <zhilizhao@tencent.com>
Missing floating-point formats support.
Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
---
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);
--
2.25.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next parent reply other threads:[~2023-03-06 4:02 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20230306120211.1249250-1-quinkblack@foxmail.com>
2023-03-06 12:02 ` Zhao Zhili [this message]
2023-03-06 12:02 ` [FFmpeg-devel] [PATCH v3 2/5] avformat/isom_tags: remove ipcm from movaudio_tags Zhao Zhili
2023-03-06 12:02 ` [FFmpeg-devel] [PATCH v3 3/5] avformat/mov: parse ISO-14496-12 ChannelLayout Zhao Zhili
2023-03-06 12:26 ` Tomas Härdin
2023-03-07 2:27 ` "zhilizhao(赵志立)"
2023-03-06 12:02 ` [FFmpeg-devel] [PATCH v3 4/5] avformat/movenc: add PCM in mp4 support Zhao Zhili
2023-03-06 12:28 ` Tomas Härdin
2023-03-07 2:30 ` "zhilizhao(赵志立)"
2023-03-07 13:55 ` Tomas Härdin
2023-03-06 12:02 ` [FFmpeg-devel] [PATCH v3 5/5] fate/mov: add PCM in mp4 test Zhao Zhili
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tencent_61A6CDA7F42A92930D1C5ACB98A61050B806@qq.com \
--to=quinkblack@foxmail.com \
--cc=ffmpeg-devel@ffmpeg.org \
--cc=zhilizhao@tencent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git