Commit ad407ff3 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

modules/video_output/opengllayer.m: Don't free the gl texture in End(), but in...

modules/video_output/opengllayer.m: Don't free the gl texture in End(), but in the releaseGLContext function. Set the original bounds of the CALayer. Protect the removeFromSuperlayer by a CATransaction.
parent a19eff66
...@@ -237,13 +237,19 @@ static void End( vout_thread_t *p_vout ) ...@@ -237,13 +237,19 @@ static void End( vout_thread_t *p_vout )
p_vout->p_sys->b_frame_available = 0; p_vout->p_sys->b_frame_available = 0;
[CATransaction performSelectorOnMainThread:@selector(begin)
withObject:nil waitUntilDone:YES];
[p_sys->o_layer performSelectorOnMainThread:@selector(removeFromSuperlayer) [p_sys->o_layer performSelectorOnMainThread:@selector(removeFromSuperlayer)
withObject:nil waitUntilDone:YES]; withObject:nil waitUntilDone:YES];
[CATransaction performSelectorOnMainThread:@selector(commit)
withObject:nil waitUntilDone:YES];
// Should be done automatically
[p_sys->o_layer release]; [p_sys->o_layer release];
[p_sys->autorealease_pool release]; [p_sys->autorealease_pool release];
/* Free the texture buffer*/ /* Free the texture buffer*/
glDeleteTextures( 2, p_sys->p_textures );
if( p_sys->pp_buffer[0] ) free( p_sys->pp_buffer[0] ); if( p_sys->pp_buffer[0] ) free( p_sys->pp_buffer[0] );
if( p_sys->pp_buffer[1] ) free( p_sys->pp_buffer[1] ); if( p_sys->pp_buffer[1] ) free( p_sys->pp_buffer[1] );
} }
...@@ -304,6 +310,7 @@ static void DisplayVideo( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -304,6 +310,7 @@ static void DisplayVideo( vout_thread_t *p_vout, picture_t *p_pic )
} }
p_sys->b_frame_available = 1; p_sys->b_frame_available = 1;
[p_sys->o_layer setNeedsDisplay];
} }
/***************************************************************************** /*****************************************************************************
...@@ -400,6 +407,8 @@ static int InitTextures( vout_thread_t *p_vout ) ...@@ -400,6 +407,8 @@ static int InitTextures( vout_thread_t *p_vout )
{ {
me.asynchronous = YES; me.asynchronous = YES;
[me setVout: _p_vout]; [me setVout: _p_vout];
me.bounds = CGRectMake( 0.0, 0.0, (float)_p_vout->output.i_height, (float)_p_vout->output.i_width );
} }
return me; return me;
} }
...@@ -492,4 +501,15 @@ static int InitTextures( vout_thread_t *p_vout ) ...@@ -492,4 +501,15 @@ static int InitTextures( vout_thread_t *p_vout )
CGLUnlockContext( context ); CGLUnlockContext( context );
return context; return context;
} }
- (void)releaseCGLContext:(CGLContextObj)glContext
{
CGLLockContext( glContext );
CGLSetCurrentContext( glContext );
glDeleteTextures( 2, p_vout->p_sys->p_textures );
CGLUnlockContext( glContext );
}
@end @end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment