diff options
author | wm4 <wm4@nowhere> | 2018-01-26 04:36:47 +0100 |
---|---|---|
committer | Kevin Mitchell <kevmitch@gmail.com> | 2018-01-30 03:10:27 -0800 |
commit | 0366ba253159a551127a7d1817a4a000e078d322 (patch) | |
tree | 6264357813da67a293b20f8685031f21371debdb /player/video.c | |
parent | b9f804b566c4c528714e4ec5e63675ad7ba5fefd (diff) | |
download | mpv-0366ba253159a551127a7d1817a4a000e078d322.tar.bz2 mpv-0366ba253159a551127a7d1817a4a000e078d322.tar.xz |
player: replace old lavfi wrapper with new filter code
lavfi.c is not necessary anymore, because f_lavfi.c (which was actually
converted from it) can be used now.
Diffstat (limited to 'player/video.c')
-rw-r--r-- | player/video.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/player/video.c b/player/video.c index 8cf193368c..483043f358 100644 --- a/player/video.c +++ b/player/video.c @@ -102,6 +102,8 @@ static void vo_chain_reset_state(struct vo_chain *vo_c) // Prepare for continued playback after a seek. if (!vo_c->input_mpi && vo_c->cached_coverart) vo_c->input_mpi = mp_image_new_ref(vo_c->cached_coverart); + + vo_c->filter_src_got_eof = false; } void reset_video_state(struct MPContext *mpctx) @@ -152,7 +154,7 @@ static void vo_chain_uninit(struct vo_chain *vo_c) } if (vo_c->filter_src) - lavfi_set_connected(vo_c->filter_src, false); + mp_pin_disconnect(vo_c->filter_src); mp_image_unrefp(&vo_c->input_mpi); mp_image_unrefp(&vo_c->cached_coverart); @@ -212,7 +214,7 @@ int init_video_decoder(struct MPContext *mpctx, struct track *track) err_out: if (track->sink) - lavfi_set_connected(track->sink, false); + mp_pin_disconnect(track->sink); track->sink = NULL; video_uninit(track->d_video); track->d_video = NULL; @@ -356,7 +358,21 @@ static int decode_image(struct MPContext *mpctx) int res = DATA_EOF; if (vo_c->filter_src) { - res = lavfi_request_frame_v(vo_c->filter_src, &vo_c->input_mpi); + struct mp_frame frame = mp_pin_out_read(vo_c->filter_src); + if (frame.type == MP_FRAME_EOF) { + res = DATA_EOF; + vo_c->filter_src_got_eof = true; + } else if (frame.type == MP_FRAME_VIDEO) { + res = DATA_OK; + vo_c->input_mpi = frame.data; + vo_c->filter_src_got_eof = false; + } else if (frame.type) { + MP_ERR(vo_c, "unexpected frame type\n"); + mp_frame_unref(&frame); + res = DATA_EOF; + } else { + res = vo_c->filter_src_got_eof ? DATA_EOF : DATA_WAIT; + } } else if (vo_c->video_src) { struct dec_video *d_video = vo_c->video_src; bool hrseek = mpctx->hrseek_active && mpctx->hrseek_framedrop && |