summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-10-21 01:04:16 -0500
committerDudemanguy <random342@airmail.cc>2023-10-23 19:32:53 +0000
commit4709a94aec5b16534b1d6b0d6738caeaf692e9c9 (patch)
tree06446ed08598d14139a44bb6003f56cec163265b /demux
parentbe0a979a0b17b49f8535ee2542cca7df4c35b04d (diff)
downloadmpv-4709a94aec5b16534b1d6b0d6738caeaf692e9c9.tar.bz2
mpv-4709a94aec5b16534b1d6b0d6738caeaf692e9c9.tar.xz
demux_mkv: check if the video codec is an image
Add a simple helper to codec_tags to check if the codec name matches one of the images. If so, then we set still_image and image in the stream as true (slightly different semanatics).
Diffstat (limited to 'demux')
-rw-r--r--demux/codec_tags.c11
-rw-r--r--demux/codec_tags.h1
-rw-r--r--demux/demux_mkv.c4
3 files changed, 16 insertions, 0 deletions
diff --git a/demux/codec_tags.c b/demux/codec_tags.c
index accc1d918d..0e7b13ce6d 100644
--- a/demux/codec_tags.c
+++ b/demux/codec_tags.c
@@ -233,6 +233,17 @@ static const char *const type_to_codec[][2] = {
{0}
};
+bool mp_codec_is_image(const char *codec)
+{
+ if (codec) {
+ for (int n = 0; type_to_codec[n][0]; n++) {
+ if (strcasecmp(type_to_codec[n][1], codec) == 0)
+ return true;
+ }
+ }
+ return false;
+}
+
const char *mp_map_type_to_image_codec(const char *type)
{
if (type) {
diff --git a/demux/codec_tags.h b/demux/codec_tags.h
index 694f4c64d4..8fc49df751 100644
--- a/demux/codec_tags.h
+++ b/demux/codec_tags.h
@@ -28,6 +28,7 @@ void mp_set_codec_from_tag(struct mp_codec_params *c);
void mp_set_pcm_codec(struct mp_codec_params *c, bool sign, bool is_float,
int bits, bool is_be);
+bool mp_codec_is_image(const char *codec);
const char *mp_map_type_to_image_codec(const char *type);
const char *mp_map_mimetype_to_video_codec(const char *mimetype);
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 4aa79a214e..3a00ef86d6 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1484,6 +1484,10 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track)
}
const char *codec = sh_v->codec ? sh_v->codec : "";
+ if (mp_codec_is_image(codec)) {
+ sh->still_image = true;
+ sh->image = true;
+ }
if (!strcmp(codec, "mjpeg")) {
sh_v->codec_tag = MKTAG('m', 'j', 'p', 'g');
track->require_keyframes = true;