diff options
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r-- | demux/demux_mkv.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 562bddbfc6..af82dc8deb 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1193,9 +1193,7 @@ static void add_coverart(struct demuxer *demuxer) const char *codec = mp_map_mimetype_to_video_codec(att->type); if (!codec) continue; - struct sh_stream *sh = new_sh_stream(demuxer, STREAM_VIDEO); - if (!sh) - break; + struct sh_stream *sh = demux_alloc_sh_stream(STREAM_VIDEO); sh->demuxer_id = -1 - sh->index; // don't clash with mkv IDs sh->codec = codec; sh->attached_picture = new_demux_packet_from(att->data, att->data_size); @@ -1205,6 +1203,7 @@ static void add_coverart(struct demuxer *demuxer) sh->attached_picture->keyframe = true; } sh->title = att->name; + demux_add_sh_stream(demuxer, sh); } } @@ -1266,9 +1265,7 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track) { unsigned char *extradata = NULL; unsigned int extradata_size = 0; - struct sh_stream *sh = new_sh_stream(demuxer, STREAM_VIDEO); - if (!sh) - return 1; + struct sh_stream *sh = demux_alloc_sh_stream(STREAM_VIDEO); init_track(demuxer, track, sh); sh_video_t *sh_v = sh->video; @@ -1277,7 +1274,7 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track) if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC")) { /* AVI compatibility mode */ // The private_data contains a BITMAPINFOHEADER struct if (track->private_data == NULL || track->private_size < 40) - return 1; + goto done; unsigned char *h = track->private_data; if (track->v_width == 0) @@ -1355,7 +1352,7 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track) if (extradata_size > 0x1000000) { MP_WARN(demuxer, "Invalid CodecPrivate\n"); - return 1; + goto done; } sh->extradata = talloc_memdup(sh_v, extradata, extradata_size); @@ -1378,6 +1375,9 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track) sh_v->stereo_mode = track->stereo_mode; +done: + demux_add_sh_stream(demuxer, sh); + return 0; } @@ -1469,9 +1469,7 @@ static const char *const mkv_audio_tags[][2] = { static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track) { - struct sh_stream *sh = new_sh_stream(demuxer, STREAM_AUDIO); - if (!sh) - return 1; + struct sh_stream *sh = demux_alloc_sh_stream(STREAM_AUDIO); init_track(demuxer, track, sh); sh_audio_t *sh_a = sh->audio; @@ -1680,12 +1678,15 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track) sh->extradata = extradata; sh->extradata_size = extradata_len; + demux_add_sh_stream(demuxer, sh); + return 0; error: MP_WARN(demuxer, "Unknown/unsupported audio " "codec ID '%s' for track %u or missing/faulty\n" "private codec data.\n", track->codec_id, track->tnum); + demux_add_sh_stream(demuxer, sh); // add it anyway return 1; } @@ -1717,9 +1718,7 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track) if (track->private_size > 0x10000000) return 1; - struct sh_stream *sh = new_sh_stream(demuxer, STREAM_SUB); - if (!sh) - return 1; + struct sh_stream *sh = demux_alloc_sh_stream(STREAM_SUB); init_track(demuxer, track, sh); sh->codec = subtitle_type; @@ -1734,6 +1733,8 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track) sh->extradata = track->private_data; sh->extradata_size = track->private_size; + demux_add_sh_stream(demuxer, sh); + if (!subtitle_type) MP_ERR(demuxer, "Subtitle type '%s' is not supported.\n", track->codec_id); |