From a439177a5874b5e654e2b50b1ba9e2f1e41aeee9 Mon Sep 17 00:00:00 2001 From: Palana Date: Wed, 26 Mar 2014 01:24:54 +0100 Subject: [PATCH] Release IOSurface only after it is no longer in use (e.g. by a texture) --- test/test-input/test-desktop.m | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/test-input/test-desktop.m b/test/test-input/test-desktop.m index 41026e31e..bcd508bb9 100644 --- a/test/test-input/test-desktop.m +++ b/test/test-input/test-desktop.m @@ -39,6 +39,12 @@ static void destroy_display_stream(struct display_capture *dc) dc->current = NULL; } + if (dc->prev) { + IOSurfaceDecrementUseCount(dc->prev); + CFRelease(dc->prev); + dc->prev = NULL; + } + if (dc->disp) { CFRelease(dc->disp); dc->disp = NULL; @@ -182,13 +188,19 @@ static void display_capture_video_render(void *data, effect_t effect) pthread_mutex_lock(&dc->mutex); - if (dc->prev != dc->current) { + if (dc->current && dc->prev != dc->current) { if (dc->tex) texture_rebind_iosurface(dc->tex, dc->current); else dc->tex = gs_create_texture_from_iosurface( dc->current); + + if (dc->prev) { + IOSurfaceDecrementUseCount(dc->prev); + CFRelease(dc->prev); + } dc->prev = dc->current; + dc->current = NULL; } if (!dc->tex) goto fail;