struct vout_sys_t
{
- NSAutoreleasePool * o_pool;
VLCGLView * o_glview;
VLCVoutView * o_vout_view;
bool b_saved_frame;
memset( p_vout->p_sys, 0, sizeof( vout_sys_t ) );
- var_Get( p_vout->p_libvlc, "drawable", &value_drawable );
+ var_Get( p_vout->p_libvlc, "drawable-agl", &value_drawable );
if( value_drawable.i_int != 0 )
{
static const GLint ATTRIBUTES[] = {
if( NULL == pixFormat )
{
msg_Err( p_vout, "no screen renderer available for required attributes." );
+ free( p_vout->p_sys );
return VLC_EGENERIC;
}
if( NULL == p_vout->p_sys->agl_ctx )
{
msg_Err( p_vout, "cannot create AGL context." );
+ free( p_vout->p_sys );
return VLC_EGENERIC;
}
- else {
+ else
+ {
// tell opengl not to sync buffer swap with vertical retrace (too inefficient)
GLint param = 0;
aglSetInteger(p_vout->p_sys->agl_ctx, AGL_SWAP_INTERVAL, ¶m);
/* Check to see if initVout: was successfull */
if( !p_vout->p_sys->o_vout_view )
{
+ free( p_vout->p_sys );
return VLC_EGENERIC;
}
if( p_vout->p_sys->b_embedded )
{
- aglDestroyContext(p_vout->p_sys->agl_ctx);
+ if( p_vout->p_sys->agl_ctx )
+ {
+ aglEnd( p_vout );
+ aglDestroyContext(p_vout->p_sys->agl_ctx);
+ }
}
else if(VLCIntf && vlc_object_alive (VLCIntf))
{
- (void) reshape
{
int x, y;
- vlc_value_t val;
Lock( p_vout );
NSRect bounds = [self bounds];
- var_Get( p_vout, "macosx-stretch", &val );
- if( val.b_bool )
+ if( var_GetBool( p_vout, "macosx-stretch" ) )
{
x = bounds.size.width;
y = bounds.size.height;
static int aglInit( vout_thread_t * p_vout )
{
- vlc_value_t val;
-
Rect viewBounds;
Rect clipBounds;
- var_Get( p_vout->p_libvlc, "drawable", &val );
- p_vout->p_sys->agl_drawable = (AGLDrawable)val.i_int;
+ p_vout->p_sys->agl_drawable = (AGLDrawable)
+ var_GetInteger( p_vout->p_libvlc, "drawable-agl" );
aglSetDrawable(p_vout->p_sys->agl_ctx, p_vout->p_sys->agl_drawable);
- var_Get( p_vout->p_libvlc, "drawable-view-top", &val );
- viewBounds.top = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-view-left", &val );
- viewBounds.left = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-view-bottom", &val );
- viewBounds.bottom = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-view-right", &val );
- viewBounds.right = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-top", &val );
- clipBounds.top = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-left", &val );
- clipBounds.left = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-bottom", &val );
- clipBounds.bottom = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-right", &val );
- clipBounds.right = val.i_int;
+ viewBounds.top = var_GetInteger( p_vout->p_libvlc, "drawable-view-top" );
+ viewBounds.left = var_GetInteger( p_vout->p_libvlc, "drawable-view-left" );
+ viewBounds.bottom = var_GetInteger( p_vout->p_libvlc, "drawable-view-bottom" );
+ viewBounds.right = var_GetInteger( p_vout->p_libvlc, "drawable-view-right" );
+ clipBounds.top = var_GetInteger( p_vout->p_libvlc, "drawable-clip-top" );
+ clipBounds.left = var_GetInteger( p_vout->p_libvlc, "drawable-clip-left" );
+ clipBounds.bottom = var_GetInteger( p_vout->p_libvlc, "drawable-clip-bottom" );
+ clipBounds.right = var_GetInteger( p_vout->p_libvlc, "drawable-clip-right" );
p_vout->p_sys->b_clipped_out = (clipBounds.top == clipBounds.bottom)
|| (clipBounds.left == clipBounds.right);
static void aglEnd( vout_thread_t * p_vout )
{
aglSetCurrentContext(NULL);
- if( p_vout->p_sys->theWindow ) DisposeWindow( p_vout->p_sys->theWindow );
+ if( p_vout->p_sys->theWindow )
+ {
+ DisposeWindow( p_vout->p_sys->theWindow );
+ p_vout->p_sys->theWindow = NULL;
+ }
}
static void aglReshape( vout_thread_t * p_vout )
if( p_vout->b_fullscreen )
{
/* Close the fullscreen window and resume normal drawing */
- vlc_value_t val;
Rect viewBounds;
Rect clipBounds;
- var_Get( p_vout->p_libvlc, "drawable", &val );
- p_vout->p_sys->agl_drawable = (AGLDrawable)val.i_int;
+ p_vout->p_sys->agl_drawable = (AGLDrawable)
+ var_GetInteger( p_vout->p_libvlc, "drawable-agl" );
+
aglSetDrawable(p_vout->p_sys->agl_ctx, p_vout->p_sys->agl_drawable);
- var_Get( p_vout->p_libvlc, "drawable-view-top", &val );
- viewBounds.top = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-view-left", &val );
- viewBounds.left = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-view-bottom", &val );
- viewBounds.bottom = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-view-right", &val );
- viewBounds.right = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-top", &val );
- clipBounds.top = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-left", &val );
- clipBounds.left = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-bottom", &val );
- clipBounds.bottom = val.i_int;
- var_Get( p_vout->p_libvlc, "drawable-clip-right", &val );
- clipBounds.right = val.i_int;
+ viewBounds.top = var_GetInteger( p_vout->p_libvlc, "drawable-view-top" );
+ viewBounds.left = var_GetInteger( p_vout->p_libvlc, "drawable-view-left" );
+ viewBounds.bottom = var_GetInteger( p_vout->p_libvlc, "drawable-view-bottom" );
+ viewBounds.right = var_GetInteger( p_vout->p_libvlc, "drawable-view-right" );
+ clipBounds.top = var_GetInteger( p_vout->p_libvlc, "drawable-clip-top" );
+ clipBounds.left = var_GetInteger( p_vout->p_libvlc, "drawable-clip-left" );
+ clipBounds.bottom = var_GetInteger( p_vout->p_libvlc, "drawable-clip-bottom" );
+ clipBounds.right = var_GetInteger( p_vout->p_libvlc, "drawable-clip-right" );
aglSetCurrentContext(p_vout->p_sys->agl_ctx);
aglSetViewport(p_vout, viewBounds, clipBounds);
- /* Most Carbon APIs are not thread-safe, therefore delagate some GUI visibilty update to the main thread */
- sendEventToMainThread(GetWindowEventTarget(p_vout->p_sys->theWindow), kEventClassVLCPlugin, kEventVLCPluginHideFullscreen);
+ if( p_vout->p_sys->theWindow )
+ {
+ /* Most Carbon APIs are not thread-safe, therefore delagate some GUI visibilty
+ * update to the main thread */
+ sendEventToMainThread(GetWindowEventTarget(p_vout->p_sys->theWindow),
+ kEventClassVLCPlugin, kEventVLCPluginHideFullscreen);
+ }
}
else
{
+ /* Go into fullscreen */
Rect deviceRect;
GDHandle deviceHdl = GetMainDevice();
aglSetViewport(p_vout, deviceRect, deviceRect);
//aglSetFullScreen(p_vout->p_sys->agl_ctx, device_width, device_height, 0, 0);
- /* Most Carbon APIs are not thread-safe, therefore delagate some GUI visibilty update to the main thread */
- sendEventToMainThread(GetWindowEventTarget(p_vout->p_sys->theWindow), kEventClassVLCPlugin, kEventVLCPluginShowFullscreen);
+ if( p_vout->p_sys->theWindow )
+ {
+ /* Most Carbon APIs are not thread-safe, therefore delagate some GUI visibilty
+ * update to the main thread */
+ sendEventToMainThread(GetWindowEventTarget(p_vout->p_sys->theWindow),
+ kEventClassVLCPlugin, kEventVLCPluginShowFullscreen);
+ }
}
aglReshape(p_vout);
aglUnlock( p_vout );
- clipBounds.bottom; // from window bottom edge
rect[2] = clipBounds.right-clipBounds.left; // width
rect[3] = clipBounds.bottom-clipBounds.top; // height
+
aglSetInteger(p_vout->p_sys->agl_ctx, AGL_BUFFER_RECT, rect);
aglEnable(p_vout->p_sys->agl_ctx, AGL_BUFFER_RECT);
}
}
-