Commit e8bf7fa4 authored by Sam Hocevar's avatar Sam Hocevar

  * ./plugins/beos/*: BeOS fixes from Rudolf Cornelissen.
  * ./src/interface/main.c: --desync now really accepts a value in ms.
  * ./plugins/vcd/input_vcd.c: fixed a crash when not opening a VCD.
  * ./src/video_output/vout_subpictures.c: fixed subtitles under BeOS and
    other architectures which don't support overlay.
parent a3ffd588
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* Declaration and extern access to global program object. * Declaration and extern access to global program object.
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: main.h,v 1.27 2001/12/30 07:09:54 sam Exp $ * $Id: main.h,v 1.28 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* *
...@@ -49,7 +49,7 @@ typedef struct main_s ...@@ -49,7 +49,7 @@ typedef struct main_s
boolean_t b_audio; /* is audio output allowed ? */ boolean_t b_audio; /* is audio output allowed ? */
boolean_t b_video; /* is video output allowed ? */ boolean_t b_video; /* is video output allowed ? */
boolean_t b_ac3; boolean_t b_ac3;
int i_desync; /* relative desync of the audio ouput */ mtime_t i_desync; /* relative desync of the audio ouput */
/* Fast memcpy plugin used */ /* Fast memcpy plugin used */
memcpy_module_t memcpy; memcpy_module_t memcpy;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* aout_beos.cpp: BeOS audio output * aout_beos.cpp: BeOS audio output
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN * Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: aout_beos.cpp,v 1.19 2002/01/28 23:08:31 stef Exp $ * $Id: aout_beos.cpp,v 1.20 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Jean-Marc Dressler <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -121,6 +121,11 @@ static int aout_Open( aout_thread_t *p_aout ) ...@@ -121,6 +121,11 @@ static int aout_Open( aout_thread_t *p_aout )
} }
/* Initialize some variables */ /* Initialize some variables */
p_aout->i_format = AOUT_FORMAT_DEFAULT;
p_aout->i_channels = 1 + main_GetIntVariable( AOUT_STEREO_VAR,
AOUT_STEREO_DEFAULT );
p_aout->l_rate = main_GetIntVariable( AOUT_RATE_VAR, AOUT_RATE_DEFAULT );
p_aout->p_sys->p_format->frame_rate = 44100.0; p_aout->p_sys->p_format->frame_rate = 44100.0;
p_aout->p_sys->p_format->channel_count = p_aout->i_channels; p_aout->p_sys->p_format->channel_count = p_aout->i_channels;
p_aout->p_sys->p_format->format = gs_audio_format::B_GS_S16; p_aout->p_sys->p_format->format = gs_audio_format::B_GS_S16;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_beos.cpp: beos video output display method * vout_beos.cpp: beos video output display method
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: vout_beos.cpp,v 1.39 2002/02/08 15:57:29 sam Exp $ * $Id: vout_beos.cpp,v 1.40 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Jean-Marc Dressler <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -589,8 +589,8 @@ void vout_Display( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -589,8 +589,8 @@ void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
static int BeosOpenDisplay( vout_thread_t *p_vout ) static int BeosOpenDisplay( vout_thread_t *p_vout )
{ {
p_vout->p_sys->p_window = new VideoWindow( p_vout->p_sys->p_window = new VideoWindow(
main_GetIntVariable( VOUT_WIDTH_VAR, VOUT_WIDTH_DEFAULT ) + 1, main_GetIntVariable( VOUT_WIDTH_VAR, VOUT_WIDTH_DEFAULT ) - 1,
main_GetIntVariable( VOUT_HEIGHT_VAR, VOUT_HEIGHT_DEFAULT ) + 1, main_GetIntVariable( VOUT_HEIGHT_VAR, VOUT_HEIGHT_DEFAULT ) - 1,
p_vout ); p_vout );
if( p_vout->p_sys->p_window == NULL ) if( p_vout->p_sys->p_window == NULL )
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vpar_headers.c : headers parsing * vpar_headers.c : headers parsing
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: vpar_headers.c,v 1.12 2002/01/14 23:46:35 massiot Exp $ * $Id: vpar_headers.c,v 1.13 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -493,6 +493,8 @@ static void SequenceHeader( vpar_thread_t * p_vpar ) ...@@ -493,6 +493,8 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
{ {
intf_WarnMsg( 1, "vpar: no vout present, spawning one" ); intf_WarnMsg( 1, "vpar: no vout present, spawning one" );
vlc_mutex_unlock( &p_vout_bank->lock );
p_vpar->p_vout = vout_CreateThread( p_vpar->p_vout = vout_CreateThread(
NULL, p_vpar->sequence.i_width, NULL, p_vpar->sequence.i_width,
p_vpar->sequence.i_height, p_vpar->sequence.i_height,
...@@ -503,12 +505,12 @@ static void SequenceHeader( vpar_thread_t * p_vpar ) ...@@ -503,12 +505,12 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
if( p_vpar->p_vout == NULL ) if( p_vpar->p_vout == NULL )
{ {
intf_ErrMsg( "vpar error: can't open vout, aborting" ); intf_ErrMsg( "vpar error: can't open vout, aborting" );
vlc_mutex_unlock( &p_vout_bank->lock );
p_vpar->p_fifo->b_error = 1; p_vpar->p_fifo->b_error = 1;
return; return;
} }
vlc_mutex_lock( &p_vout_bank->lock );
p_vout_bank->pp_vout[ p_vout_bank->i_count ] = p_vpar->p_vout; p_vout_bank->pp_vout[ p_vout_bank->i_count ] = p_vpar->p_vout;
p_vout_bank->i_count++; p_vout_bank->i_count++;
} }
......
...@@ -229,6 +229,14 @@ static void VCDInit( input_thread_t * p_input ) ...@@ -229,6 +229,14 @@ static void VCDInit( input_thread_t * p_input )
p_input->b_error = 1; p_input->b_error = 1;
return; return;
} }
else if( p_vcd->nb_tracks <= 1 )
{
intf_ErrMsg( "input error: no movie tracks found" );
input_BuffersEnd( p_input->p_method_data );
free( p_vcd );
p_input->b_error = 1;
return;
}
p_vcd->p_sectors = ioctl_GetSectors( p_input->i_handle ); p_vcd->p_sectors = ioctl_GetSectors( p_input->i_handle );
if ( p_vcd->p_sectors == NULL ) if ( p_vcd->p_sectors == NULL )
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* and spawn threads. * and spawn threads.
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: main.c,v 1.148 2002/02/06 20:44:23 gbazin Exp $ * $Id: main.c,v 1.149 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -753,7 +753,7 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -753,7 +753,7 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] )
main_PutIntVariable( AOUT_VOLUME_VAR, atoi(optarg) ); main_PutIntVariable( AOUT_VOLUME_VAR, atoi(optarg) );
break; break;
case OPT_DESYNC: /* --desync */ case OPT_DESYNC: /* --desync */
p_main->i_desync = atoi(optarg); p_main->i_desync = (mtime_t)atoi(optarg) * (mtime_t)1000;
break; break;
/* Video options */ /* Video options */
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_pictures.c : picture management functions * vout_pictures.c : picture management functions
***************************************************************************** *****************************************************************************
* Copyright (C) 2000 VideoLAN * Copyright (C) 2000 VideoLAN
* $Id: vout_pictures.c,v 1.13 2002/02/08 15:57:29 sam Exp $ * $Id: vout_pictures.c,v 1.14 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -327,7 +327,6 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -327,7 +327,6 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
* displaying it if there are subtitles. */ * displaying it if there are subtitles. */
if( p_subpic != NULL ) if( p_subpic != NULL )
{ {
//printf("memcpy (refcount != 0)\n");
/* We have subtitles. First copy the picture to /* We have subtitles. First copy the picture to
* the spare direct buffer, then render the * the spare direct buffer, then render the
* subtitles. */ * subtitles. */
...@@ -341,14 +340,12 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -341,14 +340,12 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
/* No subtitles, picture is in a directbuffer so /* No subtitles, picture is in a directbuffer so
* we can display it directly even if it is still * we can display it directly even if it is still
* in use. */ * in use. */
//printf("direct (refcount == 0)\n");
return p_pic; return p_pic;
} }
/* Picture is in a direct buffer but isn't used by the /* Picture is in a direct buffer but isn't used by the
* decoder. We can safely render subtitles on it and * decoder. We can safely render subtitles on it and
* display it. */ * display it. */
//printf("direct (refcount == 0)\n");
vout_RenderSubPictures( p_vout, p_pic, p_subpic ); vout_RenderSubPictures( p_vout, p_pic, p_subpic );
return p_pic; return p_pic;
...@@ -361,7 +358,6 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -361,7 +358,6 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
/* Picture is not in a direct buffer, but is exactly the /* Picture is not in a direct buffer, but is exactly the
* same size as the direct buffers. A memcpy() is enough, * same size as the direct buffers. A memcpy() is enough,
* then render the subtitles. */ * then render the subtitles. */
//printf("memcpy (not a direct buffer)\n");
vout_CopyPicture( p_pic, PP_OUTPUTPICTURE[0] ); vout_CopyPicture( p_pic, PP_OUTPUTPICTURE[0] );
vout_RenderSubPictures( p_vout, PP_OUTPUTPICTURE[0], p_subpic ); vout_RenderSubPictures( p_vout, PP_OUTPUTPICTURE[0], p_subpic );
...@@ -376,11 +372,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -376,11 +372,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
/* This usually means software YUV, or hardware YUV with a /* This usually means software YUV, or hardware YUV with a
* different chroma. */ * different chroma. */
/* XXX: render to the first direct buffer */ /* We render subtitles and convert image to the first direct buffer */
//printf("render (not a direct buffer)\n");
p_vout->chroma.pf_convert( p_vout, p_pic, &p_vout->p_picture[0] );
vout_RenderSubPictures( p_vout, p_pic, p_subpic ); vout_RenderSubPictures( p_vout, p_pic, p_subpic );
p_vout->chroma.pf_convert( p_vout, p_pic, &p_vout->p_picture[0] );
return &p_vout->p_picture[0]; return &p_vout->p_picture[0];
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_subpictures.c : subpicture management functions * vout_subpictures.c : subpicture management functions
***************************************************************************** *****************************************************************************
* Copyright (C) 2000 VideoLAN * Copyright (C) 2000 VideoLAN
* $Id: vout_subpictures.c,v 1.6 2002/01/21 00:52:07 sam Exp $ * $Id: vout_subpictures.c,v 1.7 2002/02/13 22:10:40 sam Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -38,10 +38,8 @@ ...@@ -38,10 +38,8 @@
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
static void vout_RenderRGBSPU( const vout_thread_t *p_vout, picture_t *p_pic, static void vout_RenderSPU( const vout_thread_t *p_vout, picture_t *p_pic,
const subpicture_t *p_spu ); const subpicture_t *p_spu );
static void vout_RenderYUVSPU( const vout_thread_t *p_vout, picture_t *p_pic,
const subpicture_t *p_spu );
/* FIXME: fake palette - the real one has to be sought in the .IFO */ /* FIXME: fake palette - the real one has to be sought in the .IFO */
static int p_palette[4] = { 0x0000, 0x0000, 0xffff, 0x8888 }; static int p_palette[4] = { 0x0000, 0x0000, 0xffff, 0x8888 };
...@@ -264,8 +262,7 @@ void vout_RenderSubPictures( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -264,8 +262,7 @@ void vout_RenderSubPictures( vout_thread_t *p_vout, picture_t *p_pic,
switch( p_subpic->i_type ) switch( p_subpic->i_type )
{ {
case DVD_SUBPICTURE: /* DVD subpicture unit */ case DVD_SUBPICTURE: /* DVD subpicture unit */
vout_RenderRGBSPU( p_vout, p_pic, p_subpic ); vout_RenderSPU( p_vout, p_pic, p_subpic );
vout_RenderYUVSPU( p_vout, p_pic, p_subpic );
break; break;
#if 0 #if 0
...@@ -421,6 +418,7 @@ subpicture_t *vout_SortSubPictures( vout_thread_t *p_vout, ...@@ -421,6 +418,7 @@ subpicture_t *vout_SortSubPictures( vout_thread_t *p_vout,
return p_subpic; return p_subpic;
} }
#if 0 /* code removed because we should use the FOURCC value instead */
/***************************************************************************** /*****************************************************************************
* vout_RenderRGBSPU: draw an SPU on a picture * vout_RenderRGBSPU: draw an SPU on a picture
***************************************************************************** *****************************************************************************
...@@ -432,7 +430,6 @@ subpicture_t *vout_SortSubPictures( vout_thread_t *p_vout, ...@@ -432,7 +430,6 @@ subpicture_t *vout_SortSubPictures( vout_thread_t *p_vout,
static void vout_RenderRGBSPU( const vout_thread_t *p_vout, picture_t *p_pic, static void vout_RenderRGBSPU( const vout_thread_t *p_vout, picture_t *p_pic,
const subpicture_t *p_spu ) const subpicture_t *p_spu )
{ {
#if 0
int i_len, i_color; int i_len, i_color;
u16 *p_source = (u16 *)p_spu->p_data; u16 *p_source = (u16 *)p_spu->p_data;
...@@ -526,19 +523,19 @@ static void vout_RenderRGBSPU( const vout_thread_t *p_vout, picture_t *p_pic, ...@@ -526,19 +523,19 @@ static void vout_RenderRGBSPU( const vout_thread_t *p_vout, picture_t *p_pic,
} }
} }
} }
#endif
} }
#endif
/***************************************************************************** /*****************************************************************************
* vout_RenderYUVSPU: draw an SPU on an YUV overlay * vout_RenderSPU: draw an SPU on an YUV overlay
***************************************************************************** *****************************************************************************
* This is a fast implementation of the subpicture drawing code. The data * This is a fast implementation of the subpicture drawing code. The data
* has been preprocessed once in spu_decoder.c, so we don't need to parse the * has been preprocessed once in spu_decoder.c, so we don't need to parse the
* RLE buffer again and again. Most sanity checks are done in spu_decoder.c * RLE buffer again and again. Most sanity checks are done in spu_decoder.c
* so that this routine can be as fast as possible. * so that this routine can be as fast as possible.
*****************************************************************************/ *****************************************************************************/
static void vout_RenderYUVSPU( const vout_thread_t *p_vout, picture_t *p_pic, static void vout_RenderSPU( const vout_thread_t *p_vout, picture_t *p_pic,
const subpicture_t *p_spu ) const subpicture_t *p_spu )
{ {
int i_len, i_color; int i_len, i_color;
u16 *p_source = (u16 *)p_spu->p_data; u16 *p_source = (u16 *)p_spu->p_data;
......
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