summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/client.c6
-rw-r--r--player/video.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/player/client.c b/player/client.c
index ac89d3a141..c17c4e27cf 100644
--- a/player/client.c
+++ b/player/client.c
@@ -1666,8 +1666,12 @@ void kill_video(struct mp_client_api *client_api)
{
struct MPContext *mpctx = client_api->mpctx;
mp_dispatch_lock(mpctx->dispatch);
- mp_switch_track(mpctx, STREAM_VIDEO, NULL, 0);
+ struct track *track = mpctx->vo_chain ? mpctx->vo_chain->track : NULL;
uninit_video_out(mpctx);
+ if (track) {
+ mpctx->error_playing = MPV_ERROR_VO_INIT_FAILED;
+ error_on_track(mpctx, track);
+ }
mp_dispatch_unlock(mpctx->dispatch);
}
diff --git a/player/video.c b/player/video.c
index 69f3d8cc9e..342ff66ce4 100644
--- a/player/video.c
+++ b/player/video.c
@@ -410,6 +410,10 @@ int init_video_decoder(struct MPContext *mpctx, struct track *track)
d_video->header = track->stream;
d_video->codec = track->stream->codec;
d_video->fps = d_video->header->codec->fps;
+
+ // Note: at least mpv_opengl_cb_uninit_gl() relies on being able to get
+ // rid of all references to the VO by destroying the VO chain. Thus,
+ // decoders not linked to vo_chain must not use the hwdec context.
if (mpctx->vo_chain)
d_video->hwdec_devs = mpctx->vo_chain->hwdec_devs;