summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-01-21 22:33:28 +0100
committerwm4 <wm4@nowhere>2016-01-22 00:25:44 +0100
commit536efe6faf30964b77e0dd724e1c824e351008e7 (patch)
tree8c9a4a54ed8be5b43e3855d6cb365bc265089459
parent7bb9203f7fec1ad4e40a7ae58d68b604c0a4565e (diff)
downloadmpv-536efe6faf30964b77e0dd724e1c824e351008e7.tar.bz2
mpv-536efe6faf30964b77e0dd724e1c824e351008e7.tar.xz
player: fix some oversights in video refactoring
vo_chain_uninit() isn't supposed to care much about the decoder (although decoders and outputs still go strictly together, so there is not much of an actual difference now). Also unset track.d_video correctly. Remove a stale declaration from dec_video.h as well.
-rw-r--r--player/video.c15
-rw-r--r--video/decode/dec_video.h5
2 files changed, 10 insertions, 10 deletions
diff --git a/player/video.c b/player/video.c
index 8b766eac47..21629b8990 100644
--- a/player/video.c
+++ b/player/video.c
@@ -280,11 +280,7 @@ void uninit_video_out(struct MPContext *mpctx)
static void vo_chain_uninit(struct vo_chain *vo_c)
{
mp_image_unrefp(&vo_c->input_mpi);
- if (vo_c) {
- vf_destroy(vo_c->vf);
- if (vo_c->video_src)
- video_uninit(vo_c->video_src);
- }
+ vf_destroy(vo_c->vf);
talloc_free(vo_c);
// this does not free the VO
}
@@ -292,7 +288,16 @@ static void vo_chain_uninit(struct vo_chain *vo_c)
void uninit_video_chain(struct MPContext *mpctx)
{
if (mpctx->vo_chain) {
+ struct track *track = mpctx->current_track[0][STREAM_VIDEO];
+ assert(track);
+ assert(track->d_video == mpctx->vo_chain->video_src);
+
reset_video_state(mpctx);
+
+ video_uninit(track->d_video);
+ track->d_video = NULL;
+ mpctx->vo_chain->video_src = NULL;
+
vo_chain_uninit(mpctx->vo_chain);
mpctx->vo_chain = NULL;
mpctx->video_status = STATUS_EOF;
diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h
index 3aba448219..012f42c510 100644
--- a/video/decode/dec_video.h
+++ b/video/decode/dec_video.h
@@ -94,11 +94,6 @@ void video_set_start(struct dec_video *d_video, double start_pts);
#define VIDEO_SKIP -2
int video_get_frame(struct dec_video *d_video, struct mp_image **out_mpi);
-struct demux_packet;
-struct mp_image *video_decode(struct dec_video *d_video,
- struct demux_packet *packet,
- int drop_frame);
-
int video_vd_control(struct dec_video *d_video, int cmd, void *arg);
void video_reset(struct dec_video *d_video);
void video_reset_aspect(struct dec_video *d_video);