[FFmpeg-devel] [PATCH 1/2] Use QT format for audio sample descriptors depending on stsd version.
Derek Buitenhuis
derek.buitenhuis at gmail.com
Thu Sep 6 18:35:43 EEST 2018
From: Justin Ruggles <justin.ruggles at gmail.com>
ISOBMFF does not allow AudioSampleEntryV1 in stsd version 0, so
assume the descriptor format is QTFF SoundDescriptionV1. ISOBMFF does
not define a version 2.
This fixes audio decoding for some MP4 files generated with Apple
tools. The additional fields present in SoundDescriptionV1/V2 need to
be read in order to correctly read additional boxes that contain
information required for decoding the stream.
Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
---
libavformat/isom.h | 1 +
libavformat/mov.c | 6 +++---
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/libavformat/isom.h b/libavformat/isom.h
index 51abea52de..89659db8ee 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -217,6 +217,7 @@ typedef struct MOVStreamContext {
int *extradata_size;
int last_stsd_index;
int stsd_count;
+ int stsd_version;
int32_t *display_matrix;
AVStereo3D *stereo3d;
diff --git a/libavformat/mov.c b/libavformat/mov.c
index d922e0f173..ea99616dc8 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -2120,8 +2120,8 @@ static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb,
// Read QT version 1 fields. In version 0 these do not exist.
av_log(c->fc, AV_LOG_TRACE, "version =%d, isom =%d\n", version, c->isom);
if (!c->isom ||
- (compatible_brands && strstr(compatible_brands->value, "qt "))) {
-
+ (compatible_brands && strstr(compatible_brands->value, "qt ")) ||
+ (sc->stsd_version == 0 && version > 0)) {
if (version == 1) {
sc->samples_per_frame = avio_rb32(pb);
avio_rb32(pb); /* bytes per packet */
@@ -2554,7 +2554,7 @@ static int mov_read_stsd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
st = c->fc->streams[c->fc->nb_streams - 1];
sc = st->priv_data;
- avio_r8(pb); /* version */
+ sc->stsd_version = avio_r8(pb);
avio_rb24(pb); /* flags */
entries = avio_rb32(pb);
--
2.18.0
More information about the ffmpeg-devel
mailing list