I'm not entirely sure why found_hdlr_mdta existed to begin with, so cc-ing Tinglin Liu (who originally wrote the patch) and Derek Buitenhuis (who signed off on it) hoping for some background. If these checks actually do have a purpose, then the `type == MKTAG('m','d','t','a')` check should be moved to before the `c->fc->nb_streams < 1` check instead of inside it. --- libavformat/isom.h | 1 - libavformat/mov.c | 10 +++------- 2 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/libavformat/isom.h b/libavformat/isom.h index 2246fed..6b6f678 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -198,7 +198,6 @@ typedef struct MOVContext { int64_t duration; ///< duration of the longest track int found_moov; ///< 'moov' atom has been found int found_mdat; ///< 'mdat' atom has been found - int found_hdlr_mdta; ///< 'hdlr' atom with type 'mdta' has been found int trak_index; ///< Index of the current 'trak' char **meta_keys; unsigned meta_keys_count; diff --git a/libavformat/mov.c b/libavformat/mov.c index 6e80b93..54530e3 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -381,7 +381,7 @@ retry: av_log(c->fc, AV_LOG_ERROR, "Error parsing cover art.\n"); } return ret; - } else if (!key && c->found_hdlr_mdta && c->meta_keys) { + } else if (!key && c->meta_keys) { uint32_t index = AV_RB32(&atom.type); if (index < c->meta_keys_count) { key = c->meta_keys[index]; @@ -694,12 +694,8 @@ static int mov_read_hdlr(MOVContext *c, AVIOContext *pb, MOVAtom atom) av_log(c->fc, AV_LOG_TRACE, "ctype= %.4s (0x%08x)\n", (char*)&ctype, ctype); av_log(c->fc, AV_LOG_TRACE, "stype= %.4s\n", (char*)&type); - if (c->trak_index < 0) { // meta not inside a trak - if (type == MKTAG('m','d','t','a')) { - c->found_hdlr_mdta = 1; - } + if (c->fc->nb_streams < 1) // meta before first trak return 0; - } st = c->fc->streams[c->fc->nb_streams-1]; @@ -4505,7 +4501,7 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom) // Supports parsing the QuickTime Metadata Keys. // https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/Metadata/Metadata.html - if (!parse && c->found_hdlr_mdta && + if (!parse && atom.type == MKTAG('m','e','t','a') && a.type == MKTAG('k','e','y','s')) { parse = mov_read_keys; -- 2.10.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel