/*****************************************************************************
* sdl.c: SDL video output display method
*****************************************************************************
- * Copyright (C) 1998-2001 VideoLAN
- * $Id: sdl.c,v 1.11 2003/03/30 18:14:38 gbazin Exp $
+ * Copyright (C) 1998-2001 the VideoLAN team
+ * $Id$
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Pierre Baillet <oct@zoy.org>
*
* 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.
*****************************************************************************/
/*****************************************************************************
#include <string.h> /* strerror() */
#include <vlc/vlc.h>
-#include <vlc/intf.h>
-#include <vlc/vout.h>
-#include <vlc/aout.h>
+#include <vlc_interface.h>
+#include <vlc_vout.h>
+#include <vlc_aout.h>
#include <sys/types.h>
#ifndef WIN32
#include SDL_INCLUDE_FILE
-#include "netutils.h"
-
-#define SDL_MAX_DIRECTBUFFERS 10
+/* SDL is not able to crop overlays - so use only 1 direct buffer */
+#define SDL_MAX_DIRECTBUFFERS 1
#define SDL_DEFAULT_BPP 16
/*****************************************************************************
* Module descriptor
*****************************************************************************/
vlc_module_begin();
+ set_shortname( "SDL" );
+ set_category( CAT_VIDEO );
+ set_subcategory( SUBCAT_VIDEO_VOUT );
set_description( _("Simple DirectMedia Layer video output") );
set_capability( "video output", 60 );
add_shortcut( "sdl" );
set_callbacks( Open, Close );
/* XXX: check for conflicts with the SDL audio output */
- var_Create( p_module->p_libvlc, "sdl", VLC_VAR_MUTEX );
+ var_Create( p_module->p_libvlc_global, "sdl", VLC_VAR_MUTEX );
+#if defined( __i386__ ) || defined( __x86_64__ )
+ /* On i386, SDL is linked against svgalib */
+ linked_with_a_crap_library_which_uses_atexit();
+#endif
vlc_module_end();
/*****************************************************************************
char *psz_method;
#endif
- var_Get( p_this->p_libvlc, "sdl", &lockval );
+ var_Get( p_this->p_libvlc_global, "sdl", &lockval );
vlc_mutex_lock( lockval.p_address );
if( SDL_WasInit( SDL_INIT_VIDEO ) != 0 )
* Manage: handle Sys 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 )
{
SDL_Event event; /* SDL event */
vlc_value_t val;
- int i_width, i_height, i_x, i_y;
+ unsigned int i_width, i_height, i_x, i_y;
/* Process events */
while( SDL_PollEvent(&event) )
break;
case 4:
- input_Seek( p_vout, 15, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
break;
case 5:
- input_Seek( p_vout, -15, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
break;
}
break;
case SDL_QUIT:
- p_vout->p_vlc->b_die = 1;
+ p_vout->p_libvlc->b_die = 1;
break;
case SDL_KEYDOWN: /* if a key is pressed */
}
else
{
- p_vout->p_vlc->b_die = 1;
+ p_vout->p_libvlc->b_die = 1;
}
break;
case SDLK_q: /* quit */
- p_vout->p_vlc->b_die = 1;
+ p_vout->p_libvlc->b_die = 1;
break;
case SDLK_f: /* switch to fullscreen */
break;
case SDLK_LEFT:
- input_Seek( p_vout, -5, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
break;
case SDLK_RIGHT:
- input_Seek( p_vout, 5, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
break;
case SDLK_UP:
- input_Seek( p_vout, 60, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
break;
case SDLK_DOWN:
- input_Seek( p_vout, -60, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
break;
- case SDLK_F1: network_ChannelJoin( p_vout, 1 ); break;
- case SDLK_F2: network_ChannelJoin( p_vout, 2 ); break;
- case SDLK_F3: network_ChannelJoin( p_vout, 3 ); break;
- case SDLK_F4: network_ChannelJoin( p_vout, 4 ); break;
- case SDLK_F5: network_ChannelJoin( p_vout, 5 ); break;
- case SDLK_F6: network_ChannelJoin( p_vout, 6 ); break;
- case SDLK_F7: network_ChannelJoin( p_vout, 7 ); break;
- case SDLK_F8: network_ChannelJoin( p_vout, 8 ); break;
- case SDLK_F9: network_ChannelJoin( p_vout, 9 ); break;
- case SDLK_F10: network_ChannelJoin( p_vout, 10 ); break;
- case SDLK_F11: network_ChannelJoin( p_vout, 11 ); break;
- case SDLK_F12: network_ChannelJoin( p_vout, 12 ); break;
-
case SDLK_b:
{
audio_volume_t i_volume;
*****************************************************************************/
static void Display( vout_thread_t *p_vout, picture_t *p_pic )
{
- int x, y, w, h;
+ unsigned int x, y, w, h;
SDL_Rect disp;
vout_PlacePicture( p_vout, p_vout->p_sys->i_width, p_vout->p_sys->i_height,
*****************************************************************************/
static int OpenDisplay( vout_thread_t *p_vout )
{
- Uint32 i_flags;
- int i_bpp;
+ uint32_t i_flags;
+ int i_bpp;
/* SDL fucked up fourcc definitions on bigendian machines */
uint32_t i_sdl_chroma;
p_pic->p->p_pixels = p_vout->p_sys->p_display->pixels;
p_pic->p->i_lines = p_vout->p_sys->p_display->h;
+ p_pic->p->i_visible_lines = p_vout->p_sys->p_display->h;
p_pic->p->i_pitch = p_vout->p_sys->p_display->pitch;
p_pic->p->i_visible_pitch =
p_pic->p->i_pixel_pitch * p_vout->p_sys->p_display->w;
p_pic->Y_PIXELS = p_pic->p_sys->p_overlay->pixels[0];
p_pic->p[Y_PLANE].i_lines = p_pic->p_sys->p_overlay->h;
+ p_pic->p[Y_PLANE].i_visible_lines = p_pic->p_sys->p_overlay->h;
p_pic->p[Y_PLANE].i_pitch = p_pic->p_sys->p_overlay->pitches[0];
switch( p_vout->output.i_chroma )
p_pic->U_PIXELS = p_pic->p_sys->p_overlay->pixels[2];
p_pic->p[U_PLANE].i_lines = p_pic->p_sys->p_overlay->h / 2;
+ p_pic->p[U_PLANE].i_visible_lines = p_pic->p_sys->p_overlay->h / 2;
p_pic->p[U_PLANE].i_pitch = p_pic->p_sys->p_overlay->pitches[2];
p_pic->p[U_PLANE].i_pixel_pitch = 1;
p_pic->p[U_PLANE].i_visible_pitch = p_pic->p_sys->p_overlay->w / 2;
p_pic->V_PIXELS = p_pic->p_sys->p_overlay->pixels[1];
p_pic->p[V_PLANE].i_lines = p_pic->p_sys->p_overlay->h / 2;
+ p_pic->p[V_PLANE].i_visible_lines = p_pic->p_sys->p_overlay->h / 2;
p_pic->p[V_PLANE].i_pitch = p_pic->p_sys->p_overlay->pitches[1];
p_pic->p[V_PLANE].i_pixel_pitch = 1;
p_pic->p[V_PLANE].i_visible_pitch = p_pic->p_sys->p_overlay->w / 2;
p_pic->U_PIXELS = p_pic->p_sys->p_overlay->pixels[1];
p_pic->p[U_PLANE].i_lines = p_pic->p_sys->p_overlay->h / 2;
+ p_pic->p[U_PLANE].i_visible_lines = p_pic->p_sys->p_overlay->h / 2;
p_pic->p[U_PLANE].i_pitch = p_pic->p_sys->p_overlay->pitches[1];
p_pic->p[U_PLANE].i_pixel_pitch = 1;
p_pic->p[U_PLANE].i_visible_pitch = p_pic->p_sys->p_overlay->w / 2;
p_pic->V_PIXELS = p_pic->p_sys->p_overlay->pixels[2];
p_pic->p[V_PLANE].i_lines = p_pic->p_sys->p_overlay->h / 2;
+ p_pic->p[V_PLANE].i_visible_lines = p_pic->p_sys->p_overlay->h / 2;
p_pic->p[V_PLANE].i_pitch = p_pic->p_sys->p_overlay->pitches[2];
p_pic->p[V_PLANE].i_pixel_pitch = 1;
p_pic->p[V_PLANE].i_visible_pitch = p_pic->p_sys->p_overlay->w / 2;
/* Set palette */
if( SDL_SetColors( p_vout->p_sys->p_display, colors, 0, 256 ) == 0 )
{
- msg_Err( p_vout, "failed setting palette" );
+ msg_Err( p_vout, "failed to set palette" );
}
}