[vlc-commits] iOS vout: move container view fetching to the main thread
Felix Paul Kühne
git at videolan.org
Mon Sep 12 14:35:04 CEST 2016
vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Fri Sep 9 19:26:44 2016 +0200| [d75d21fe06e1b35d6261d21f45c7962b5db17428] | committer: Felix Paul Kühne
iOS vout: move container view fetching to the main thread
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d75d21fe06e1b35d6261d21f45c7962b5db17428
---
modules/video_output/ios2.m | 99 +++++++++++++++++++++++++--------------------
1 file changed, 56 insertions(+), 43 deletions(-)
diff --git a/modules/video_output/ios2.m b/modules/video_output/ios2.m
index f2413b8..5e56ca5 100644
--- a/modules/video_output/ios2.m
+++ b/modules/video_output/ios2.m
@@ -1,7 +1,7 @@
/*****************************************************************************
* ios2.m: iOS OpenGL ES 2 provider
*****************************************************************************
- * Copyright (C) 2001-2015 VLC authors and VideoLAN
+ * Copyright (C) 2001-2016 VLC authors and VideoLAN
* $Id$
*
* Authors: Pierre d'Herbemont <pdherbemont at videolan dot org>
@@ -194,7 +194,7 @@ vlc_module_end ()
struct vout_display_sys_t
{
VLCOpenGLES2VideoView *glESView;
- UIView* viewContainer;
+ UIView *viewContainer;
UITapGestureRecognizer *tapRecognizer;
vlc_gl_t gl;
@@ -231,50 +231,21 @@ static int Open(vlc_object_t *this)
sys->gl.sys = NULL;
@autoreleasepool {
- /* get the object we will draw into */
- UIView* viewContainer = var_CreateGetAddress (vd, "drawable-nsobject");
- if (unlikely(viewContainer == nil))
- goto bailout;
-
- [viewContainer retain];
-
- @synchronized(viewContainer) {
- if (unlikely(![viewContainer respondsToSelector:@selector(isKindOfClass:)]))
- goto bailout;
-
- if (![viewContainer isKindOfClass:[UIView class]])
- goto bailout;
-
- /* This will be released in Close(), on
- * main thread, after we are done using it. */
- sys->viewContainer = viewContainer;
-
- if (vd->fmt.i_chroma == VLC_CODEC_CVPX_OPAQUE) {
- msg_Dbg(vd, "will use zero-copy rendering");
- sys->zero_copy = true;
- }
+ if (vd->fmt.i_chroma == VLC_CODEC_CVPX_OPAQUE) {
+ msg_Dbg(vd, "will use zero-copy rendering");
+ sys->zero_copy = true;
+ }
- /* setup the actual OpenGL ES view */
- sys->glESView = [[VLCOpenGLES2VideoView alloc] initWithFrame:[viewContainer bounds] zeroCopy:sys->zero_copy voutDisplay:vd];
- sys->glESView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ /* setup the actual OpenGL ES view */
+ sys->glESView = [[VLCOpenGLES2VideoView alloc] initWithFrame:CGRectMake(0.,0.,320.,240.) zeroCopy:sys->zero_copy voutDisplay:vd];
+ sys->glESView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
- if (!sys->glESView)
- goto bailout;
+ if (!sys->glESView)
+ goto bailout;
- [sys->viewContainer performSelectorOnMainThread:@selector(addSubview:)
- withObject:sys->glESView
- waitUntilDone:YES];
-
- /* add tap gesture recognizer for DVD menus and stuff */
- sys->tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:sys->glESView
- action:@selector(tapRecognized:)];
- if (sys->viewContainer.window) {
- if (sys->viewContainer.window.rootViewController) {
- if (sys->viewContainer.window.rootViewController.view)
- [sys->viewContainer.superview addGestureRecognizer:sys->tapRecognizer];
- }
- }
- sys->tapRecognizer.cancelsTouchesInView = NO;
+ [sys->glESView performSelectorOnMainThread:@selector(fetchViewContainer) withObject:nil waitUntilDone:YES];
+ if (!sys->viewContainer) {
+ goto bailout;
}
const vlc_fourcc_t *subpicture_chromas;
@@ -655,6 +626,48 @@ static void ZeroCopyDisplay(vout_display_t *vd, picture_t *pic, subpicture_t *su
return self;
}
+- (void)fetchViewContainer
+{
+ /* get the object we will draw into */
+ UIView *viewContainer = var_CreateGetAddress (_voutDisplay, "drawable-nsobject");
+ if (unlikely(viewContainer == nil))
+ return;
+
+ [viewContainer retain];
+
+ @synchronized(viewContainer) {
+ if (unlikely(![viewContainer respondsToSelector:@selector(isKindOfClass:)]))
+ return;
+
+ if (![viewContainer isKindOfClass:[UIView class]])
+ return;
+
+ vout_display_sys_t *sys = _voutDisplay->sys;
+
+ /* This will be released in Close(), on
+ * main thread, after we are done using it. */
+ sys->viewContainer = viewContainer;
+
+ self.frame = viewContainer.bounds;
+ [self reshape];
+
+ [sys->viewContainer performSelectorOnMainThread:@selector(addSubview:)
+ withObject:self
+ waitUntilDone:YES];
+
+ /* add tap gesture recognizer for DVD menus and stuff */
+ sys->tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
+ action:@selector(tapRecognized:)];
+ if (sys->viewContainer.window) {
+ if (sys->viewContainer.window.rootViewController) {
+ if (sys->viewContainer.window.rootViewController.view)
+ [sys->viewContainer.superview addGestureRecognizer:sys->tapRecognizer];
+ }
+ }
+ sys->tapRecognizer.cancelsTouchesInView = NO;
+ }
+}
+
- (void)dealloc
{
if (_zeroCopy) {
More information about the vlc-commits
mailing list