vlc | branch: master | Felix Paul Kühne <[email protected]> | Thu Sep 3 10:58:43 2015 +0200| [c39e826c00df41faa6df5cab67dfdda0669d9535] | committer: Felix Paul Kühne
caopengllayer: drop legacy NSAutoreleasePool pattern > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c39e826c00df41faa6df5cab67dfdda0669d9535 --- modules/video_output/caopengllayer.m | 167 +++++++++++++++++----------------- 1 file changed, 84 insertions(+), 83 deletions(-) diff --git a/modules/video_output/caopengllayer.m b/modules/video_output/caopengllayer.m index 6e80ec9..6637765 100644 --- a/modules/video_output/caopengllayer.m +++ b/modules/video_output/caopengllayer.m @@ -114,95 +114,96 @@ static int Open (vlc_object_t *p_this) if (sys == NULL) return VLC_EGENERIC; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - id container = var_CreateGetAddress(vd, "drawable-nsobject"); - if (container) - vout_display_DeleteWindow(vd, NULL); - else { - sys->embed = vout_display_NewWindow(vd, VOUT_WINDOW_TYPE_NSOBJECT); - if (sys->embed) - container = sys->embed->handle.nsobject; - - if (!container) { - msg_Err(vd, "No drawable-nsobject found!"); - goto bailout; + @autoreleasepool { + id container = var_CreateGetAddress(vd, "drawable-nsobject"); + if (container) + vout_display_DeleteWindow(vd, NULL); + else { + sys->embed = vout_display_NewWindow(vd, VOUT_WINDOW_TYPE_NSOBJECT); + if (sys->embed) + container = sys->embed->handle.nsobject; + + if (!container) { + msg_Err(vd, "No drawable-nsobject found!"); + goto bailout; + } } - } - /* store for later, released in Close() */ - sys->container = [container retain]; + /* store for later, released in Close() */ + sys->container = [container retain]; + + [CATransaction begin]; + sys->cgLayer = [[VLCCAOpenGLLayer alloc] init]; + [sys->cgLayer setVoutDisplay:vd]; + + [sys->cgLayer performSelectorOnMainThread:@selector(display) + withObject:nil + waitUntilDone:YES]; + + if ([container respondsToSelector:@selector(addVoutLayer:)]) { + msg_Dbg(vd, "container implements implicit protocol"); + [container addVoutLayer:sys->cgLayer]; + } else if ([container respondsToSelector:@selector(addSublayer:)] || + [container isKindOfClass:[CALayer class]]) { + msg_Dbg(vd, "container doesn't implement implicit protocol, fallback mode used"); + [container addSublayer:sys->cgLayer]; + } else { + msg_Err(vd, "Provided NSObject container isn't compatible"); + [sys->cgLayer release]; + sys->cgLayer = nil; + [CATransaction commit]; + goto bailout; + } + [CATransaction commit]; - [CATransaction begin]; - sys->cgLayer = [[VLCCAOpenGLLayer alloc] init]; - [sys->cgLayer setVoutDisplay:vd]; + if (!sys->cgLayer) + goto bailout; - [sys->cgLayer performSelectorOnMainThread:@selector(display) withObject:nil waitUntilDone:YES]; + if (!sys->glContext) + msg_Warn(vd, "we might not have an OpenGL context yet"); + + /* Initialize common OpenGL video display */ + sys->gl.lock = OpenglLock; + sys->gl.unlock = OpenglUnlock; + sys->gl.swap = OpenglSwap; + sys->gl.getProcAddress = OurGetProcAddress; + sys->gl.sys = sys; + + const vlc_fourcc_t *subpicture_chromas; + video_format_t fmt = vd->fmt; + sys->vgl = vout_display_opengl_New(&vd->fmt, &subpicture_chromas, &sys->gl); + if (!sys->vgl) { + msg_Err(vd, "Error while initializing opengl display."); + sys->gl.sys = NULL; + goto bailout; + } - if ([container respondsToSelector:@selector(addVoutLayer:)]) { - msg_Dbg(vd, "container implements implicit protocol"); - [container addVoutLayer:sys->cgLayer]; - } else if ([container respondsToSelector:@selector(addSublayer:)] || [container isKindOfClass:[CALayer class]]) { - msg_Dbg(vd, "container doesn't implement implicit protocol, fallback mode used"); - [container addSublayer:sys->cgLayer]; - } else { - msg_Err(vd, "Provided NSObject container isn't compatible"); - [sys->cgLayer release]; - sys->cgLayer = nil; - [CATransaction commit]; - goto bailout; - } - [CATransaction commit]; - - if (!sys->cgLayer) - goto bailout; - - if (!sys->glContext) - msg_Warn(vd, "we might not have an OpenGL context yet"); - - /* Initialize common OpenGL video display */ - sys->gl.lock = OpenglLock; - sys->gl.unlock = OpenglUnlock; - sys->gl.swap = OpenglSwap; - sys->gl.getProcAddress = OurGetProcAddress; - sys->gl.sys = sys; - - const vlc_fourcc_t *subpicture_chromas; - video_format_t fmt = vd->fmt; - sys->vgl = vout_display_opengl_New(&vd->fmt, &subpicture_chromas, &sys->gl); - if (!sys->vgl) { - msg_Err(vd, "Error while initializing opengl display."); - sys->gl.sys = NULL; - goto bailout; + /* setup vout display */ + vout_display_info_t info = vd->info; + info.subpicture_chromas = subpicture_chromas; + info.has_hide_mouse = true; + vd->info = info; + + vd->pool = Pool; + vd->prepare = PictureRender; + vd->display = PictureDisplay; + vd->control = Control; + + /* setup initial state */ + CGSize outputSize; + if ([container respondsToSelector:@selector(currentOutputSize)]) + outputSize = [container currentOutputSize]; + else + outputSize = [sys->container visibleRect].size; + vout_display_SendEventFullscreen(vd, false); + vout_display_SendEventDisplaySize(vd, (int)outputSize.width, (int)outputSize.height); + + return VLC_SUCCESS; + + bailout: + Close(p_this); + return VLC_EGENERIC; } - - /* setup vout display */ - vout_display_info_t info = vd->info; - info.subpicture_chromas = subpicture_chromas; - info.has_hide_mouse = true; - vd->info = info; - - vd->pool = Pool; - vd->prepare = PictureRender; - vd->display = PictureDisplay; - vd->control = Control; - - /* setup initial state */ - CGSize outputSize; - if ([container respondsToSelector:@selector(currentOutputSize)]) - outputSize = [container currentOutputSize]; - else - outputSize = [sys->container visibleRect].size; - vout_display_SendEventFullscreen(vd, false); - vout_display_SendEventDisplaySize(vd, (int)outputSize.width, (int)outputSize.height); - - [pool release]; - return VLC_SUCCESS; - -bailout: - [pool release]; - Close(p_this); - return VLC_EGENERIC; } static void Close (vlc_object_t *p_this) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
