summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2021-10-02 18:45:27 +0300
committerDudemanguy <random342@airmail.cc>2021-10-02 16:55:13 +0000
commit5304e9fe31d5c1059199fea0655e6e3eabb93b3e (patch)
treeaff9c20c41fcda9f23633f7af29d850be365fdfa
parent64fa440c697b9b8e96e14e33f7e79c6674c5b1a3 (diff)
downloadmpv-5304e9fe31d5c1059199fea0655e6e3eabb93b3e.tar.bz2
mpv-5304e9fe31d5c1059199fea0655e6e3eabb93b3e.tar.xz
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.
-rw-r--r--DOCS/interface-changes.rst1
-rw-r--r--DOCS/man/input.rst11
-rw-r--r--demux/demux_lavf.c43
-rw-r--r--demux/demux_mf.c6
-rw-r--r--demux/demux_mkv.c1
-rw-r--r--demux/demux_timeline.c1
-rw-r--r--demux/stheader.h1
-rw-r--r--player/command.c1
-rw-r--r--player/core.h1
-rw-r--r--player/loadfile.c1
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 ("<name>_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,