From 5304e9fe31d5c1059199fea0655e6e3eabb93b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ekstr=C3=B6m?= Date: Sat, 2 Oct 2021 18:45:27 +0300 Subject: Revert "player: add track-list/N/image sub-property" Unfortunately, this functionality in large part based on a struct member that was made private in FFmpeg/FFmpeg@7489f632815c98ad58c3db71d1a5239b5dae266c in May. Unfortunately, this was not noticed during review. This reverts commit 0862664ac952d21fef531a8923a58ae575268fc5. --- DOCS/interface-changes.rst | 1 - DOCS/man/input.rst | 11 ++++------- demux/demux_lavf.c | 43 +++++++++---------------------------------- demux/demux_mf.c | 6 +----- demux/demux_mkv.c | 1 - demux/demux_timeline.c | 1 - demux/stheader.h | 1 - player/command.c | 1 - player/core.h | 1 - player/loadfile.c | 1 - 10 files changed, 14 insertions(+), 53 deletions(-) diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst index d5b986aa2d..ee84bc8f1c 100644 --- a/DOCS/interface-changes.rst +++ b/DOCS/interface-changes.rst @@ -43,7 +43,6 @@ Interface changes - add a `--watch-later-options` option to allow configuring which options quit-watch-later saves - make `current-window-scale` writeable and use it in the default input.conf - - add ``track-list/N/image`` sub-property --- mpv 0.33.0 --- - add `--d3d11-exclusive-fs` flag to enable D3D11 exclusive fullscreen mode when the player enters fullscreen. diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index 5f9a5230af..cd360d600b 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -2838,13 +2838,11 @@ Property list ``track-list/N/lang`` Track language as identified by the file. Not always available. - ``track-list/N/image`` - ``yes``/true if this is a video track that consists of a single - picture, ``no``/false or unavailable otherwise. - ``track-list/N/albumart`` - ``yes``/true if this is an image embedded in an audio file or external - cover art, ``no``/false or unavailable otherwise. + ``yes``/true if this is a video track that consists of a single + picture, ``no``/false or unavailable otherwise. This is used for video + tracks that are really images embedded in audio files and for external + cover art. ``track-list/N/default`` ``yes``/true if the track has the default flag set in the file, @@ -2938,7 +2936,6 @@ Property list "src-id" MPV_FORMAT_INT64 "title" MPV_FORMAT_STRING "lang" MPV_FORMAT_STRING - "image" MPV_FORMAT_FLAG "albumart" MPV_FORMAT_FLAG "default" MPV_FORMAT_FLAG "forced" MPV_FORMAT_FLAG diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index c3eab80c4d..71fb9fc289 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -138,6 +138,7 @@ struct format_hack { bool use_stream_ids : 1; // has a meaningful native stream IDs (export it) bool fully_read : 1; // set demuxer.fully_read flag bool detect_charset : 1; // format is a small text file, possibly not UTF8 + bool image_format : 1; // expected to contain exactly 1 frame // Do not confuse player's position estimation (position is into external // segment, with e.g. HLS, player knows about the playlist main file only). bool clear_filepos : 1; @@ -204,6 +205,8 @@ static const struct format_hack format_hacks[] = { BLACKLIST("bin"), // Useless, does not work with custom streams. BLACKLIST("image2"), + // Image demuxers ("_pipe" is detected explicitly) + {"image2pipe", .image_format = true}, {0} }; @@ -525,6 +528,11 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) return -1; } + if (bstr_endswith0(bstr0(priv->avif->name), "_pipe")) { + MP_VERBOSE(demuxer, "Assuming this is an image format.\n"); + priv->format_hack.image_format = true; + } + if (lavfdopts->hacks) priv->avif_flags = priv->avif->flags | priv->format_hack.if_flags; @@ -647,35 +655,6 @@ static int dict_get_decimal(AVDictionary *dict, const char *entry, int def) return def; } -// Detect if a stream is an image from the number of frames and duration. -// Unlike checking only the codec, this doesn't detect videos with codecs -// commonly used for images (e.g. mjpeg) as images, and can detect images in -// codecs commonly used for videos. But for some video codecs and containers, -// libavformat always returns 0/1 numbers of frames and 0 duration, so they -// have to be hardcoded to never be considered images. -static const int blacklisted_video_codecs[] = - {AV_CODEC_ID_AMV, AV_CODEC_ID_FLIC, AV_CODEC_ID_VMDVIDEO, 0}; - -static const char *const blacklisted_formats[] = {"lavfi", "m4v", "vc1", NULL}; - -static bool is_image(AVStream *st, int codec_id, const char *avifname) -{ - if (st->nb_frames > 1 || st->codec_info_nb_frames != 1 || st->duration > 10) - return false; - - for (int i = 0; blacklisted_video_codecs[i]; i++) { - if (codec_id == blacklisted_video_codecs[i]) - return false; - } - - for (int i = 0; blacklisted_formats[i]; i++) { - if (strcmp(avifname, blacklisted_formats[i]) == 0) - return false; - } - - return true; -} - static void handle_new_stream(demuxer_t *demuxer, int i) { lavf_priv_t *priv = demuxer->priv; @@ -735,12 +714,8 @@ static void handle_new_stream(demuxer_t *demuxer, int i) sh->codec->disp_h = codec->height; if (st->avg_frame_rate.num) sh->codec->fps = av_q2d(st->avg_frame_rate); - if (sh->attached_picture || - is_image(st, codec->codec_id, priv->avif->name)) { - MP_VERBOSE(demuxer, "Assuming this is an image format.\n"); - sh->image = true; + if (priv->format_hack.image_format) sh->codec->fps = priv->mf_fps; - } sh->codec->par_w = st->sample_aspect_ratio.num; sh->codec->par_h = st->sample_aspect_ratio.den; diff --git a/demux/demux_mf.c b/demux/demux_mf.c index 69fa0fa91c..40f94f4e4e 100644 --- a/demux/demux_mf.c +++ b/demux/demux_mf.c @@ -381,12 +381,8 @@ static int demux_open_mf(demuxer_t *demuxer, enum demux_check check) // create a new video stream header struct sh_stream *sh = demux_alloc_sh_stream(STREAM_VIDEO); - if (mf->nr_of_files == 1) { - MP_VERBOSE(demuxer, "Assuming this is an image format.\n"); - sh->image = true; - } - struct mp_codec_params *c = sh->codec; + c->codec = codec; c->disp_w = 0; c->disp_h = 0; diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index b0117f0b6d..d07f8fe1e0 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1300,7 +1300,6 @@ static void add_coverart(struct demuxer *demuxer) sh->attached_picture->pts = 0; talloc_steal(sh, sh->attached_picture); sh->attached_picture->keyframe = true; - sh->image = true; } sh->title = att->name; demux_add_sh_stream(demuxer, sh); diff --git a/demux/demux_timeline.c b/demux/demux_timeline.c index 5572fb53bf..9b4a049aee 100644 --- a/demux/demux_timeline.c +++ b/demux/demux_timeline.c @@ -525,7 +525,6 @@ static void apply_meta(struct sh_stream *dst, struct sh_stream *src) dst->missing_timestamps = src->missing_timestamps; if (src->attached_picture) dst->attached_picture = src->attached_picture; - dst->image = src->image; } // This is mostly for EDL user-defined metadata. diff --git a/demux/stheader.h b/demux/stheader.h index 8d2129e05b..6be3b16463 100644 --- a/demux/stheader.h +++ b/demux/stheader.h @@ -48,7 +48,6 @@ struct sh_stream { bool dependent_track; // container dependent track flag bool visual_impaired_track; // container flag bool hearing_impaired_track;// container flag - bool image; // video stream is an image bool still_image; // video stream contains still images int hls_bitrate; diff --git a/player/command.c b/player/command.c index 2f17de2cf8..f2fb031819 100644 --- a/player/command.c +++ b/player/command.c @@ -1949,7 +1949,6 @@ static int get_track_entry(int item, int action, void *arg, void *ctx) .unavailable = !track->lang}, {"audio-channels", SUB_PROP_INT(track_channels(track)), .unavailable = track_channels(track) <= 0}, - {"image", SUB_PROP_FLAG(track->image)}, {"albumart", SUB_PROP_FLAG(track->attached_picture)}, {"default", SUB_PROP_FLAG(track->default_track)}, {"forced", SUB_PROP_FLAG(track->forced_track)}, diff --git a/player/core.h b/player/core.h index b59713721e..1d5b395b07 100644 --- a/player/core.h +++ b/player/core.h @@ -136,7 +136,6 @@ struct track { char *title; bool default_track, forced_track, dependent_track; bool visual_impaired_track, hearing_impaired_track; - bool image; bool attached_picture; char *lang; diff --git a/player/loadfile.c b/player/loadfile.c index 51865cf191..3c0415aed6 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -421,7 +421,6 @@ static struct track *add_stream_track(struct MPContext *mpctx, .dependent_track = stream->dependent_track, .visual_impaired_track = stream->visual_impaired_track, .hearing_impaired_track = stream->hearing_impaired_track, - .image = stream->image, .attached_picture = stream->attached_picture != NULL, .lang = stream->lang, .demuxer = demuxer, -- cgit v1.2.3