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).
This commit is contained in:
Dudemanguy 2023-10-21 01:04:16 -05:00
parent be0a979a0b
commit 4709a94aec
3 changed files with 16 additions and 0 deletions

View File

@ -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) {

View File

@ -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);

View File

@ -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;