diff options
-rw-r--r-- | video/out/vo.c | 7 | ||||
-rw-r--r-- | video/out/vo.h | 2 |
2 files changed, 8 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); diff --git a/video/out/vo.h b/video/out/vo.h index 50f6e4942e..fc6cf394e4 100644 --- a/video/out/vo.h +++ b/video/out/vo.h @@ -172,6 +172,8 @@ enum { VO_CAP_ROTATE90 = 1 << 0, // VO does framedrop itself (vo_vdpau). Untimed/encoding VOs never drop. VO_CAP_FRAMEDROP = 1 << 1, + // VO does not support redraws (vo_mediacodec_embed). + VO_CAP_NOREDRAW = 1 << 2, }; #define VO_MAX_REQ_FRAMES 10 |