diff options
author | Aman Gupta <aman@tmm1.net> | 2017-07-06 10:49:54 -0700 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2017-10-09 18:36:54 +0200 |
commit | 6f0fdac6f16880ef46cbcfb399fd6beec5afe735 (patch) | |
tree | e22655c08046e79f85e63bedeb87087420660068 /video/out/vo.c | |
parent | d08e407c9eb9b3fb020efa8f1516a68497389416 (diff) | |
download | mpv-6f0fdac6f16880ef46cbcfb399fd6beec5afe735.tar.bz2 mpv-6f0fdac6f16880ef46cbcfb399fd6beec5afe735.tar.xz |
vo: add VO_CAP_NOREDRAW for upcoming vo_mediacodec_embed
MediaCodec uses a fixed number of output buffers to hold frames, and
expects that output buffers will be released as soon as possible. Once
rendered, the underlying frame is automatically released and cannot be
reused or rerendered.
The new VO_CAP_NOREDRAW forces mpv to release frames immediately after
they are rendered or dropped, to ensure that MediaCodec decoder does not
run out of buffers and stall out.
Diffstat (limited to 'video/out/vo.c')
-rw-r--r-- | video/out/vo.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/video/out/vo.c b/video/out/vo.c index d761300a47..6f0dbb3d33 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -882,6 +882,11 @@ static bool render_frame(struct vo *vo) update_vsync_timing_after_swap(vo); } + if (vo->driver->caps & VO_CAP_NOREDRAW) { + talloc_free(in->current_frame); + in->current_frame = NULL; + } + if (in->dropped_frame) { MP_STATS(vo, "drop-vo"); } else { @@ -903,7 +908,7 @@ static void do_redraw(struct vo *vo) { struct vo_internal *in = vo->in; - if (!vo->config_ok) + if (!vo->config_ok || (vo->driver->caps & VO_CAP_NOREDRAW)) return; pthread_mutex_lock(&in->lock); |