X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_output%2Fggi.c;h=ad1137aa3a349b4aea7bc8a926b44e04d7f1116d;hb=90aa71ca584cbf721c06d3046e0afff795fa065c;hp=4635d5ccccaaf20830de2cb812b42cc7f6463435;hpb=3aabcacdb96cc8e8cce0a101e9b79b721544b7f1;p=vlc diff --git a/modules/video_output/ggi.c b/modules/video_output/ggi.c index 4635d5cccc..ad1137aa3a 100644 --- a/modules/video_output/ggi.c +++ b/modules/video_output/ggi.c @@ -1,17 +1,17 @@ /***************************************************************************** * ggi.c : GGI plugin for vlc ***************************************************************************** - * Copyright (C) 2000, 2001 VideoLAN - * $Id: ggi.c,v 1.3 2003/02/02 00:46:58 sam Exp $ + * Copyright (C) 2000-2009 the VideoLAN team + * $Id$ * * Authors: Vincent Seguin * Samuel Hocevar - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -19,21 +19,22 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ -#include -#include /* ENOMEM */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #include -#include -#include -#include +#include +#include +#include +#include /***************************************************************************** * Local prototypes @@ -42,29 +43,29 @@ static int Create ( vlc_object_t * ); static void Destroy ( vlc_object_t * ); static int Init ( vout_thread_t * ); -static void End ( vout_thread_t * ); -static int Manage ( vout_thread_t * ); -static void Display ( vout_thread_t *, picture_t * ); +static void End ( vout_thread_t * ); +static int Manage ( vout_thread_t * ); +static void Display ( vout_thread_t *, picture_t * ); static int OpenDisplay ( vout_thread_t * ); static void CloseDisplay ( vout_thread_t * ); -static void SetPalette ( vout_thread_t *, u16 *, u16 *, u16 * ); +static void SetPalette ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * ); /***************************************************************************** * Module descriptor *****************************************************************************/ -#define DISPLAY_TEXT N_("X11 display name") -#define DISPLAY_LONGTEXT N_("Specify the X11 hardware display you want to use."\ - "\nBy default VLC will use the value of the DISPLAY"\ - " environment variable.") - -vlc_module_begin(); - add_category_hint( N_("Miscellaneous"), NULL ); - add_string( "ggi-display", NULL, NULL, DISPLAY_TEXT, DISPLAY_LONGTEXT ); - set_description( "General Graphics Interface video output" ); - set_capability( "video output", 30 ); - set_callbacks( Create, Destroy ); -vlc_module_end(); +#define DISPLAY_TEXT N_("X11 display") +#define DISPLAY_LONGTEXT N_( \ + "X11 hardware display to use.\n" \ + "By default, VLC will use the value of the DISPLAY " \ + "environment variable.") + +vlc_module_begin () + add_string( "ggi-display", NULL, NULL, DISPLAY_TEXT, DISPLAY_LONGTEXT, true ) + set_description( "General Graphics Interface video output" ) + set_capability( "video output", 30 ) + set_callbacks( Create, Destroy ) +vlc_module_end () /***************************************************************************** * vout_sys_t: video output GGI method descriptor @@ -74,7 +75,7 @@ vlc_module_end(); *****************************************************************************/ struct vout_sys_t { - /* GGI system informations */ + /* GGI system information */ ggi_visual_t p_display; /* display device */ ggi_mode mode; /* mode descriptor */ @@ -84,7 +85,7 @@ struct vout_sys_t ggi_directbuffer * pp_buffer[2]; /* buffers */ int i_index; - vlc_bool_t b_must_acquire; /* must be acquired before writing */ + bool b_must_acquire; /* must be acquired before writing */ }; /***************************************************************************** @@ -101,17 +102,14 @@ static int Create( vlc_object_t *p_this ) /* Allocate structure */ p_vout->p_sys = malloc( sizeof( vout_sys_t ) ); if( p_vout->p_sys == NULL ) - { - msg_Err( p_vout, "out of memory" ); - return( 1 ); - } + return VLC_ENOMEM; /* Open and initialize device */ if( OpenDisplay( p_vout ) ) { msg_Err( p_vout, "cannot initialize GGI display" ); free( p_vout->p_sys ); - return( 1 ); + return VLC_EGENERIC; } p_vout->pf_init = Init; @@ -120,7 +118,7 @@ static int Create( vlc_object_t *p_this ) p_vout->pf_render = NULL; p_vout->pf_display = Display; - return( 0 ); + return VLC_SUCCESS; } /***************************************************************************** @@ -145,21 +143,21 @@ static int Init( vout_thread_t *p_vout ) switch( p_vout->p_sys->i_bits_per_pixel ) { case 8: - p_vout->output.i_chroma = VLC_FOURCC('R','G','B','2'); + p_vout->output.i_chroma = VLC_CODEC_RGB8; p_vout->output.pf_setpalette = SetPalette; break; case 15: - p_vout->output.i_chroma = VLC_FOURCC('R','V','1','5'); break; + p_vout->output.i_chroma = VLC_CODEC_RGB15; break; case 16: - p_vout->output.i_chroma = VLC_FOURCC('R','V','1','6'); break; + p_vout->output.i_chroma = VLC_CODEC_RGB16; break; case 24: - p_vout->output.i_chroma = VLC_FOURCC('R','V','2','4'); break; + p_vout->output.i_chroma = VLC_CODEC_RGB24; break; case 32: - p_vout->output.i_chroma = VLC_FOURCC('R','V','3','2'); break; + p_vout->output.i_chroma = VLC_CODEC_RGB32; break; default: msg_Err( p_vout, "unknown screen depth %i", p_vout->p_sys->i_bits_per_pixel ); - return 0; + return VLC_EGENERIC; } /* Only useful for bits_per_pixel != 8 */ @@ -181,7 +179,7 @@ static int Init( vout_thread_t *p_vout ) if( p_pic == NULL ) { - return 0; + return VLC_EGENERIC; } /* We know the chroma, allocate a buffer which will be used @@ -190,6 +188,7 @@ static int Init( vout_thread_t *p_vout ) p_pic->p->p_pixels = p_b[ 0 ]->write; p_pic->p->i_pixel_pitch = p_b[ 0 ]->buffer.plb.pixelformat->size / 8; p_pic->p->i_lines = p_vout->p_sys->mode.visible.y; + p_pic->p->i_visible_lines = p_vout->p_sys->mode.visible.y; p_pic->p->i_pitch = p_b[ 0 ]->buffer.plb.stride; @@ -228,7 +227,7 @@ static int Init( vout_thread_t *p_vout ) /* Set asynchronous display mode -- usually quite faster */ ggiAddFlags( p_vout->p_sys->p_display, GGIFLAG_ASYNC ); - return( 0 ); + return VLC_SUCCESS; #undef p_b } @@ -254,9 +253,9 @@ static void End( vout_thread_t *p_vout ) * Terminate an output method created by Create *****************************************************************************/ static void Destroy( vlc_object_t *p_this ) -{ - vout_thread_t *p_vout = (vout_thread_t *)p_this; - +{ + vout_thread_t *p_vout = (vout_thread_t *)p_this; + CloseDisplay( p_vout ); free( p_vout->p_sys ); @@ -266,19 +265,18 @@ static void Destroy( vlc_object_t *p_this ) * Manage: handle GGI events ***************************************************************************** * This function should be called regularly by video output thread. It returns - * a non null value if an error occured. + * a non null value if an error occurred. *****************************************************************************/ static int Manage( vout_thread_t *p_vout ) { struct timeval tv = { 0, 1000 }; /* 1 millisecond */ gii_event_mask mask; gii_event event; - vlc_value_t val; mask = emKeyboard | emPtrButtonPress | emPtrButtonRelease; ggiEventPoll( p_vout->p_sys->p_display, mask, &tv ); - + while( ggiEventsQueued( p_vout->p_sys->p_display, mask) ) { ggiEventRead( p_vout->p_sys->p_display, &event, mask); @@ -292,7 +290,7 @@ static int Manage( vout_thread_t *p_vout ) case 'q': case 'Q': case GIIUC_Escape: - p_vout->p_vlc->b_die = 1; + libvlc_Quit( p_vout->p_libvlc ); break; default: @@ -305,21 +303,11 @@ static int Manage( vout_thread_t *p_vout ) switch( event.pbutton.button ) { case GII_PBUTTON_LEFT: - val.b_bool = VLC_TRUE; - var_Set( p_vout, "mouse-clicked", val ); + var_SetBool( p_vout, "mouse-clicked", true ); break; case GII_PBUTTON_RIGHT: - { - intf_thread_t *p_intf; - p_intf = vlc_object_find( p_vout, VLC_OBJECT_INTF, - FIND_ANYWHERE ); - if( p_intf ) - { - p_intf->b_menu_change = 1; - vlc_object_release( p_intf ); - } - } + var_SetBool( p_vout->p_libvlc, "intf-popupmenu", true ); break; } break; @@ -385,20 +373,20 @@ static int OpenDisplay( vout_thread_t *p_vout ) if( ggiInit() ) { msg_Err( p_vout, "cannot initialize GGI library" ); - return( 1 ); + return VLC_EGENERIC; } /* Open display */ - psz_display = config_GetPsz( p_vout, "ggi_display" ); + psz_display = config_GetPsz( p_vout, "ggi-display" ); p_vout->p_sys->p_display = ggiOpen( psz_display, NULL ); - if( psz_display ) free( psz_display ); + free( psz_display ); if( p_vout->p_sys->p_display == NULL ) { msg_Err( p_vout, "cannot open GGI default display" ); ggiExit(); - return( 1 ); + return VLC_EGENERIC; } /* Find most appropriate mode */ @@ -422,7 +410,7 @@ static int OpenDisplay( vout_thread_t *p_vout ) msg_Err( p_vout, "cannot set GGI mode" ); ggiClose( p_vout->p_sys->p_display ); ggiExit(); - return( 1 ); + return VLC_EGENERIC; } /* Check buffers properties */ @@ -438,7 +426,7 @@ static int OpenDisplay( vout_thread_t *p_vout ) msg_Err( p_vout, "double buffering is not possible" ); ggiClose( p_vout->p_sys->p_display ); ggiExit(); - return( 1 ); + return VLC_EGENERIC; } /* Check buffer properties */ @@ -451,7 +439,7 @@ static int OpenDisplay( vout_thread_t *p_vout ) msg_Err( p_vout, "incorrect video memory type" ); ggiClose( p_vout->p_sys->p_display ); ggiExit(); - return( 1 ); + return VLC_EGENERIC; } /* Check if buffer needs to be acquired before write */ @@ -472,7 +460,7 @@ static int OpenDisplay( vout_thread_t *p_vout ) msg_Err( p_vout, "cannot set colors" ); ggiClose( p_vout->p_sys->p_display ); ggiExit(); - return( 1 ); + return VLC_EGENERIC; } /* Set clipping for text */ @@ -483,13 +471,13 @@ static int OpenDisplay( vout_thread_t *p_vout ) msg_Err( p_vout, "cannot set clipping" ); ggiClose( p_vout->p_sys->p_display ); ggiExit(); - return( 1 ); + return VLC_EGENERIC; } /* FIXME: set palette in 8bpp */ p_vout->p_sys->i_bits_per_pixel = p_b[ 0 ]->buffer.plb.pixelformat->depth; - return( 0 ); + return VLC_SUCCESS; #undef p_b } @@ -511,11 +499,12 @@ static void CloseDisplay( vout_thread_t *p_vout ) /***************************************************************************** * SetPalette: sets an 8 bpp palette *****************************************************************************/ -static void SetPalette( vout_thread_t *p_vout, u16 *red, u16 *green, u16 *blue ) +static void SetPalette( vout_thread_t *p_vout, + uint16_t *red, uint16_t *green, uint16_t *blue ) { ggi_color colors[256]; int i; - + /* Fill colors with color information */ for( i = 0; i < 256; i++ ) { @@ -528,7 +517,7 @@ static void SetPalette( vout_thread_t *p_vout, u16 *red, u16 *green, u16 *blue ) /* Set palette */ if( ggiSetPalette( p_vout->p_sys->p_display, 0, 256, colors ) < 0 ) { - msg_Err( p_vout, "failed setting palette" ); + msg_Err( p_vout, "failed to set palette" ); } }