diff --git a/libavformat/isom.h b/libavformat/isom.h index f3a7a8633d..e629663949 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -218,6 +218,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 02c8ec66ed..ec57a05803 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2122,8 +2122,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);