From 7063e88e09977282470c4f2f93e56e05f21b7c2b Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Fri, 16 Apr 2021 11:15:37 -0700 Subject: [PATCH] fix #704 by properly identifying cover art (cherry picked from commit 6b0829df726aa9a840b8b34e923e9faf17a3a5ca) --- src/modules/avformat/producer_avformat.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/modules/avformat/producer_avformat.c b/src/modules/avformat/producer_avformat.c index 049452f9d..e079e6f70 100644 --- a/src/modules/avformat/producer_avformat.c +++ b/src/modules/avformat/producer_avformat.c @@ -398,10 +398,7 @@ static mlt_properties find_default_streams( producer_avformat self ) if ( first_video_index < 0 ) first_video_index = i; // Only set the video stream if not album art - if (self->video_index < 0 && - (codec_params->codec_id != AV_CODEC_ID_MJPEG || - codec_context->time_base.num != 1 || - codec_context->time_base.den != 90000)) { + if (self->video_index < 0 && !(context->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC)) { self->video_index = i; } mlt_properties_set( meta_media, key, "video" ); @@ -1682,11 +1679,7 @@ static int producer_get_image( mlt_frame frame, uint8_t **buffer, mlt_image_form codec_params = stream->codecpar; // Always use the image cache for album art. - int is_album_art = ((codec_context->codec_id == AV_CODEC_ID_MJPEG - || codec_context->codec_id == AV_CODEC_ID_GIF - || codec_context->codec_id == AV_CODEC_ID_PNG) - && mlt_properties_get_int(properties, "meta.media.frame_rate_num") == 90000 - && mlt_properties_get_int(properties, "meta.media.frame_rate_den") == 1); + int is_album_art = stream->disposition & AV_DISPOSITION_ATTACHED_PIC; if (is_album_art) position = 0; @@ -2296,8 +2289,8 @@ static int video_codec_init( producer_avformat self, int index, mlt_properties p mlt_properties_set_int( properties, "meta.media.frame_rate_num", frame_rate.num ); mlt_properties_set_int( properties, "meta.media.frame_rate_den", frame_rate.den ); - // MP3 album art is a single JPEG at 90000 fps, which is not seekable. - if ( codec->id == AV_CODEC_ID_MJPEG && frame_rate.num == 90000 && frame_rate.den == 1 ) + // Cover art is a single image at 90000 fps, which is not seekable. + if (stream->disposition & AV_DISPOSITION_ATTACHED_PIC) self->video_seekable = 0; // Set the YUV colorspace from override or detect