diff options
-rw-r--r-- | player/loadfile.c | 9 | ||||
-rw-r--r-- | stream/stream.h | 1 | ||||
-rw-r--r-- | stream/stream_bluray.c | 1 |
3 files changed, 9 insertions, 2 deletions
diff --git a/player/loadfile.c b/player/loadfile.c index e7a45e014d..6262042709 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -443,13 +443,16 @@ static struct track *add_stream_track(struct MPContext *mpctx, track->preloaded = !!stream->sub->track; // Needed for DVD and Blu-ray. - if (!track->lang) { + struct stream *st = track->demuxer->stream; + if (!track->lang && (st->uncached_type == STREAMTYPE_BLURAY || + st->uncached_type == STREAMTYPE_DVD)) + { struct stream_lang_req req = { .type = track->type, .id = map_id_from_demuxer(track->demuxer, track->type, track->demuxer_id) }; - stream_control(track->demuxer->stream, STREAM_CTRL_GET_LANG, &req); + stream_control(st, STREAM_CTRL_GET_LANG, &req); if (req.name[0]) track->lang = talloc_strdup(track, req.name); } @@ -472,6 +475,8 @@ static void add_dvd_tracks(struct MPContext *mpctx) struct demuxer *demuxer = mpctx->demuxer; struct stream *stream = demuxer->stream; struct stream_dvd_info_req info; + if (stream->uncached_type != STREAMTYPE_DVD) + return; if (stream_control(stream, STREAM_CTRL_GET_DVD_INFO, &info) > 0) { for (int n = 0; n < info.num_subs; n++) { struct track *track = talloc_ptrtype(NULL, track); diff --git a/stream/stream.h b/stream/stream.h index e64baf07c6..9361884657 100644 --- a/stream/stream.h +++ b/stream/stream.h @@ -35,6 +35,7 @@ enum streamtype { STREAMTYPE_RADIO, STREAMTYPE_DVB, STREAMTYPE_DVD, + STREAMTYPE_BLURAY, STREAMTYPE_PVR, STREAMTYPE_TV, STREAMTYPE_MF, diff --git a/stream/stream_bluray.c b/stream/stream_bluray.c index 56cbee42d1..d7a8d0b0cf 100644 --- a/stream/stream_bluray.c +++ b/stream/stream_bluray.c @@ -390,6 +390,7 @@ err_no_info: b->current_angle = angle; b->current_title = title; + s->type = STREAMTYPE_BLURAY; s->end_pos = title_size; s->sector_size = BLURAY_SECTOR_SIZE; s->flags = MP_STREAM_SEEK; |