* It depends on: libdvdread for ifo files and block reading.
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: input_dvdread.c,v 1.25 2002/03/04 01:53:56 stef Exp $
+ * $Id: input_dvdread.c,v 1.42 2002/07/31 20:56:51 sam Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
#include <stdio.h>
#include <stdlib.h>
-#include <videolan/vlc.h>
+#include <vlc/vlc.h>
+#include <vlc/input.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
# include "input_iovec.h"
#endif
-#include "stream_control.h"
-#include "input_ext-intf.h"
-#include "input_ext-dec.h"
-#include "input_ext-plugins.h"
+#include <dvdread/dvd_reader.h>
+#include <dvdread/ifo_types.h>
+#include <dvdread/ifo_read.h>
+#include <dvdread/nav_read.h>
+#include <dvdread/nav_print.h>
#include "input_dvdread.h"
#include "iso_lang.h"
-#include "debug.h"
-
/* how many blocks DVDRead will read in each loop */
#define DVD_BLOCK_READ_ONCE 64
* Local prototypes
*****************************************************************************/
/* called from outside */
-static int DvdReadInit ( struct input_thread_s * );
-static void DvdReadEnd ( struct input_thread_s * );
-static int DvdReadDemux ( struct input_thread_s * );
-static int DvdReadRewind ( struct input_thread_s * );
-
-static int DvdReadOpen ( struct input_thread_s * );
-static void DvdReadClose ( struct input_thread_s * );
-static int DvdReadSetArea ( struct input_thread_s *, struct input_area_s * );
-static int DvdReadSetProgram( struct input_thread_s *, pgrm_descriptor_t * );
-static int DvdReadRead ( struct input_thread_s *, byte_t *, size_t );
-static void DvdReadSeek ( struct input_thread_s *, off_t );
+static int DvdReadDemux ( input_thread_t * );
+static int DvdReadRewind ( input_thread_t * );
+
+static int DvdReadSetArea ( input_thread_t *, input_area_t * );
+static int DvdReadSetProgram ( input_thread_t *, pgrm_descriptor_t * );
+static int DvdReadRead ( input_thread_t *, byte_t *, size_t );
+static void DvdReadSeek ( input_thread_t *, off_t );
/* called only from here */
static void DvdReadLauchDecoders( input_thread_t * p_input );
static void DvdReadHandleDSI( thread_dvd_data_t * p_dvd, u8 * p_data );
static void DvdReadFindCell ( thread_dvd_data_t * p_dvd );
-/*****************************************************************************
- * Functions exported as capabilities. They are declared as static so that
- * we don't pollute the namespace too much.
- *****************************************************************************/
-void _M( access_getfunctions )( function_list_t * p_function_list )
-{
-#define access p_function_list->functions.access
- access.pf_open = DvdReadOpen;
- access.pf_close = DvdReadClose;
- access.pf_read = DvdReadRead;
- access.pf_set_area = DvdReadSetArea;
- access.pf_set_program = DvdReadSetProgram;
- access.pf_seek = DvdReadSeek;
-#undef access
-}
-
-void _M( demux_getfunctions )( function_list_t * p_function_list )
-{
-#define demux p_function_list->functions.demux
- demux.pf_init = DvdReadInit;
- demux.pf_end = DvdReadEnd;
- demux.pf_demux = DvdReadDemux;
- demux.pf_rewind = DvdReadRewind;
-#undef demux
-}
-
/*
* Data demux functions
*/
/*****************************************************************************
- * DvdReadInit: initializes DVD structures
+ * InitDVD: initializes DVD structures
*****************************************************************************/
-static int DvdReadInit( input_thread_t * p_input )
+int E_(InitDVD) ( vlc_object_t *p_this )
{
- if( strncmp( p_input->p_access_module->psz_name, "dvdread", 7 ) )
+ input_thread_t *p_input = (input_thread_t *)p_this;
+
+ if( p_input->stream.i_method != INPUT_METHOD_DVD )
{
return -1;
}
+ p_input->pf_demux = DvdReadDemux;
+ p_input->pf_rewind = NULL;
+
vlc_mutex_lock( &p_input->stream.stream_lock );
DvdReadLauchDecoders( p_input );
return 0;
}
-/*****************************************************************************
- * DvdReadEnd: frees unused data
- *****************************************************************************/
-static void DvdReadEnd( input_thread_t * p_input )
-{
-}
-
/*****************************************************************************
* DvdReadDemux
*****************************************************************************/
*/
/*****************************************************************************
- * DvdReadOpen: open libdvdread
+ * OpenDVD: open libdvdread
*****************************************************************************/
-static int DvdReadOpen( struct input_thread_s *p_input )
+int E_(OpenDVD) ( vlc_object_t *p_this )
{
- char * psz_parser = p_input->psz_name;
- char * psz_source = p_input->psz_name;
+ input_thread_t * p_input = (input_thread_t *)p_this;
+ char * psz_orig;
+ char * psz_parser;
+ char * psz_source;
char * psz_next;
struct stat stat_info;
thread_dvd_data_t * p_dvd;
dvd_reader_t * p_dvdread;
input_area_t * p_area;
- boolean_t b_need_free = 0;
int i_title = 1;
int i_chapter = 1;
int i_angle = 1;
int i;
+ psz_orig = psz_parser = psz_source = strdup( p_input->psz_name );
+ if( !psz_orig )
+ {
+ return( -1 );
+ }
+
+ p_input->pf_read = DvdReadRead;
+ p_input->pf_seek = DvdReadSeek;
+ p_input->pf_set_area = DvdReadSetArea;
+ p_input->pf_set_program = DvdReadSetProgram;
+
while( *psz_parser && *psz_parser != '@' )
{
psz_parser++;
if( !*psz_source )
{
- psz_source = config_GetPszVariable( INPUT_DVD_DEVICE_VAR );
- b_need_free = 1;
+ if( !p_input->psz_access )
+ {
+ free( psz_orig );
+ return -1;
+ }
+ psz_source = config_GetPsz( p_input, "dvd" );
}
if( stat( psz_source, &stat_info ) == -1 )
{
- intf_ErrMsg( "input error: cannot stat() source `%s' (%s)",
- psz_source, strerror(errno));
+ msg_Err( p_input, "cannot stat() source `%s' (%s)",
+ psz_source, strerror(errno));
return( -1 );
}
if( !S_ISBLK(stat_info.st_mode) &&
!S_ISCHR(stat_info.st_mode) &&
!S_ISDIR(stat_info.st_mode) )
{
- intf_WarnMsg( 3, "input : DvdRead plugin discarded"
- " (not a valid source)" );
+ msg_Warn( p_input, "dvdread module discarded (not a valid source)" );
return -1;
}
- intf_WarnMsg( 2, "input: dvdroot=%s title=%d chapter=%d angle=%d",
- psz_source, i_title, i_chapter, i_angle );
+ msg_Dbg( p_input, "dvdroot=%s title=%d chapter=%d angle=%d",
+ psz_source, i_title, i_chapter, i_angle );
p_dvdread = DVDOpen( psz_source );
- if( b_need_free )
- {
+ /* free allocated strings */
+ if( psz_source != psz_orig )
free( psz_source );
- }
+ free( psz_orig );
if( ! p_dvdread )
{
- intf_ErrMsg( "dvdread error: libdvdcss can't open source" );
+ msg_Err( p_input, "libdvdcss cannot open source" );
return -1;
}
p_dvd = malloc( sizeof(thread_dvd_data_t) );
if( p_dvd == NULL )
{
- intf_ErrMsg( "dvdread error: out of memory" );
+ msg_Err( p_input, "out of memory" );
return -1;
}
p_dvd->p_title = NULL;
p_dvd->p_vts_file = NULL;
- p_dvd->i_title = i_title;
- p_dvd->i_chapter = i_chapter;
- p_dvd->i_angle = i_angle;
p_input->p_access_data = (void *)p_dvd;
/* Ifo allocation & initialisation */
if( ! ( p_dvd->p_vmg_file = ifoOpen( p_dvd->p_dvdread, 0 ) ) )
{
- intf_ErrMsg( "dvdread error: can't open VMG info" );
+ msg_Err( p_input, "cannot open VMG info" );
free( p_dvd );
return -1;
}
- intf_WarnMsg( 2, "dvdread info: VMG opened" );
+ msg_Dbg( p_input, "VMG opened" );
/* Set stream and area data */
vlc_mutex_lock( &p_input->stream.stream_lock );
p_input->stream.i_method = INPUT_METHOD_DVD;
#define tt_srpt p_dvd->p_vmg_file->tt_srpt
- intf_WarnMsg( 2, "dvdread info: number of titles: %d", tt_srpt->nr_of_srpts );
+ msg_Dbg( p_input, "number of titles: %d", tt_srpt->nr_of_srpts );
#define area p_input->stream.pp_areas
/* We start from 1 here since the default area 0
area[i]->i_part_nb = tt_srpt->title[i-1].nr_of_ptts;
area[i]->i_part = 1;
- /* Number of angles */
- area[i]->i_angle_nb = 0;
- area[i]->i_angle = 1;
-
area[i]->i_plugin_data = tt_srpt->title[i-1].title_set_nr;
}
#undef area
+
+ p_dvd->i_title = i_title <= tt_srpt->nr_of_srpts ? i_title : 1;
#undef tt_srpt
- p_input->stream.pp_areas[i_title]->i_part = i_chapter;
+ p_area = p_input->stream.pp_areas[p_dvd->i_title];
+ p_dvd->i_chapter = i_chapter;
- p_area = p_input->stream.pp_areas[i_title];
+ p_dvd->i_chapter = i_chapter < p_area->i_part_nb ? i_chapter : 1;
+ p_area->i_part = p_dvd->i_chapter;
+
+ p_dvd->i_angle = i_angle;
/* set title, chapter, audio and subpic */
if( DvdReadSetArea( p_input, p_area ) )
vlc_mutex_unlock( &p_input->stream.stream_lock );
+ p_input->psz_demux = "dvdread";
+
return 0;
}
/*****************************************************************************
- * DvdReadClose: close libdvdread
+ * CloseDVD: close libdvdread
*****************************************************************************/
-static void DvdReadClose( struct input_thread_s *p_input )
+void E_(CloseDVD) ( vlc_object_t *p_this )
{
- thread_dvd_data_t * p_dvd;
-
- p_dvd = (thread_dvd_data_t *)p_input->p_access_data;
+ input_thread_t * p_input = (input_thread_t *)p_this;
+ thread_dvd_data_t * p_dvd = (thread_dvd_data_t *)p_input->p_access_data;
/* close libdvdread */
DVDCloseFile( p_dvd->p_title );
static int DvdReadSetProgram( input_thread_t * p_input,
pgrm_descriptor_t * p_program )
{
+ if( p_input->stream.p_selected_program != p_program )
+ {
+ thread_dvd_data_t * p_dvd;
+
+ p_dvd = (thread_dvd_data_t*)(p_input->p_access_data);
+ p_dvd->i_angle = p_program->i_number;
+
+ memcpy( p_program, p_input->stream.p_selected_program,
+ sizeof(pgrm_descriptor_t) );
+ p_program->i_number = p_dvd->i_angle;
+ p_input->stream.p_selected_program = p_program;
+
+ msg_Dbg( p_input, "angle %d selected", p_dvd->i_angle );
+ }
+
return 0;
}
/* Change the default area */
p_input->stream.p_selected_area = p_area;
- intf_WarnMsg( 12, "dvdread: open VTS %d, for title %d",
+ msg_Dbg( p_input, "open VTS %d, for title %d",
p_vmg->tt_srpt->title[ p_area->i_id - 1 ].title_set_nr,
p_area->i_id );
if( ! ( p_vts = ifoOpen( p_dvd->p_dvdread,
p_vmg->tt_srpt->title[ p_area->i_id - 1 ].title_set_nr ) ) )
{
- intf_ErrMsg( "dvdread error: fatal error in vts ifo" );
+ msg_Err( p_input, "fatal error in vts ifo" );
ifoClose( p_vmg );
DVDClose( p_dvd->p_dvdread );
return -1;
p_area->i_start =
LB2OFF( p_dvd->p_cur_pgc->cell_playback[ i_cell ].first_sector );
- intf_WarnMsg( 3, "dvdread: start %d vts_title %d pgc %d pgn %d",
- p_area->i_id, p_dvd->i_ttn, pgc_id, pgn );
+ msg_Dbg( p_input, "start %d vts_title %d pgc %d pgn %d",
+ p_area->i_id, p_dvd->i_ttn, pgc_id, pgn );
/*
* Find title end
p_dvd->i_end_block = p_pgc->cell_playback[ i_cell ].last_sector;
p_area->i_size = LB2OFF( p_dvd->i_end_block )- p_area->i_start;
- intf_WarnMsg( 12, "dvdread: start %lld size %lld end %d",
- p_area->i_start , p_area->i_size, p_dvd->i_end_block );
+ msg_Dbg( p_input, "start %lld size %lld end %d",
+ p_area->i_start , p_area->i_size, p_dvd->i_end_block );
/*
* Set properties for current chapter
*/
p_dvd->i_angle_nb = p_vmg->tt_srpt->title[p_area->i_id-1].nr_of_angles;
- if( p_dvd->i_angle > p_area->i_angle_nb )
+ if( p_dvd->i_angle > p_dvd->i_angle_nb )
{
p_dvd->i_angle = 1;
}
- p_area->i_angle = p_dvd->i_angle;
- p_area->i_angle_nb = p_dvd->i_angle_nb;
-
/*
* We've got enough info, time to open the title set data.
*/
p_vmg->tt_srpt->title[ p_area->i_id - 1 ].title_set_nr,
DVD_READ_TITLE_VOBS ) ) )
{
- intf_ErrMsg( "dvdread error: can't open title (VTS_%02d_1.VOB)",
- p_vmg->tt_srpt->title[p_area->i_id-1].title_set_nr );
+ msg_Err( p_input, "cannot open title (VTS_%02d_1.VOB)",
+ p_vmg->tt_srpt->title[p_area->i_id-1].title_set_nr );
ifoClose( p_vts );
ifoClose( p_vmg );
DVDClose( p_dvd->p_dvdread );
/* We don't use input_EndStream here since
* we keep area structures */
- for( i = 0 ; i < p_input->stream.i_selected_es_number ; i++ )
+ while( p_input->stream.i_es_number )
{
- input_UnselectES( p_input, p_input->stream.pp_selected_es[i] );
+ input_DelES( p_input, p_input->stream.pp_es[0] );
}
- free( p_input->stream.pp_selected_es );
- input_DelProgram( p_input, p_input->stream.p_selected_program );
+ while( p_input->stream.i_pgrm_number )
+ {
+ input_DelProgram( p_input, p_input->stream.pp_programs[0] );
+ }
- p_input->stream.pp_selected_es = NULL;
+ if( p_input->stream.pp_selected_es )
+ {
+ free( p_input->stream.pp_selected_es );
+ p_input->stream.pp_selected_es = NULL;
+ }
p_input->stream.i_selected_es_number = 0;
}
- input_AddProgram( p_input, 0, sizeof( stream_ps_data_t ) );
+ input_AddProgram( p_input, 1, sizeof( stream_ps_data_t ) );
p_input->stream.p_selected_program = p_input->stream.pp_programs[0];
+ for( i = 1 ; i < p_dvd->i_angle_nb ; i++ )
+ {
+ input_AddProgram( p_input, i+1, 0 );
+ }
+
+ DvdReadSetProgram( p_input,
+ p_input->stream.pp_programs[p_dvd->i_angle-1] );
+
/* No PSM to read in DVD mode, we already have all information */
p_input->stream.p_selected_program->b_is_ok = 1;
/* ES 0 -> video MPEG2 */
// IfoPrintVideo( p_dvd );
- p_es = input_AddES( p_input, p_input->stream.p_selected_program, 0xe0, 0 );
+ p_es = input_AddES( p_input, NULL, 0xe0, 0 );
p_es->i_stream_id = 0xe0;
- p_es->i_type = MPEG2_VIDEO_ES;
+ p_es->i_fourcc = VLC_FOURCC('m','p','g','v');
p_es->i_cat = VIDEO_ES;
#define audio_control \
i_audio_nb++;
i_position = ( audio_control & 0x7F00 ) >> 8;
- intf_WarnMsg( 12, "dvd audio position %d", i_position );
+ msg_Dbg( p_input, "audio position %d", i_position );
switch( p_vts->vtsi_mat->vts_audio_attr[i-1].audio_format )
{
case 0x00: /* AC3 */
i_id = ( ( 0x80 + i_position ) << 8 ) | 0xbd;
- p_es = input_AddES( p_input,
- p_input->stream.p_selected_program, i_id, 0 );
+ p_es = input_AddES( p_input, NULL, i_id, 0 );
p_es->i_stream_id = 0xbd;
- p_es->i_type = AC3_AUDIO_ES;
- p_es->b_audio = 1;
+ p_es->i_fourcc = VLC_FOURCC('a','5','2',' ');
p_es->i_cat = AUDIO_ES;
- strcpy( p_es->psz_desc, DecodeLanguage( hton16(
- p_vts->vtsi_mat->vts_audio_attr[i-1].lang_code ) ) );
+ strcpy( p_es->psz_desc, DecodeLanguage(
+ p_vts->vtsi_mat->vts_audio_attr[i-1].lang_code ) );
strcat( p_es->psz_desc, " (ac3)" );
break;
case 0x02:
case 0x03: /* MPEG audio */
i_id = 0xc0 + i_position;
- p_es = input_AddES( p_input,
- p_input->stream.p_selected_program, i_id, 0 );
+ p_es = input_AddES( p_input, NULL, i_id, 0 );
p_es->i_stream_id = i_id;
- p_es->i_type = MPEG2_AUDIO_ES;
- p_es->b_audio = 1;
+ p_es->i_fourcc = VLC_FOURCC('m','p','g','a');
p_es->i_cat = AUDIO_ES;
- strcpy( p_es->psz_desc, DecodeLanguage( hton16(
- p_vts->vtsi_mat->vts_audio_attr[i-1].lang_code ) ) );
+ strcpy( p_es->psz_desc, DecodeLanguage(
+ p_vts->vtsi_mat->vts_audio_attr[i-1].lang_code ) );
strcat( p_es->psz_desc, " (mpeg)" );
break;
case 0x04: /* LPCM */
i_id = ( ( 0xa0 + i_position ) << 8 ) | 0xbd;
- p_es = input_AddES( p_input,
- p_input->stream.p_selected_program, i_id, 0 );
+ p_es = input_AddES( p_input, NULL, i_id, 0 );
p_es->i_stream_id = i_id;
- p_es->i_type = LPCM_AUDIO_ES;
- p_es->b_audio = 1;
+ p_es->i_fourcc = VLC_FOURCC('l','p','c','m');
p_es->i_cat = AUDIO_ES;
- strcpy( p_es->psz_desc, DecodeLanguage( hton16(
- p_vts->vtsi_mat->vts_audio_attr[i-1].lang_code ) ) );
+ strcpy( p_es->psz_desc, DecodeLanguage(
+ p_vts->vtsi_mat->vts_audio_attr[i-1].lang_code ) );
strcat( p_es->psz_desc, " (lpcm)" );
break;
case 0x06: /* DTS */
i_id = ( ( 0x88 + i_position ) << 8 ) | 0xbd;
- intf_ErrMsg( "dvd warning: DTS audio not handled yet"
- "(0x%x)", i_id );
+ msg_Err( p_input, "DTS audio not handled yet"
+ "(0x%x)", i_id );
break;
default:
i_id = 0;
- intf_ErrMsg( "dvd warning: unknown audio type %.2x",
- p_vts->vtsi_mat->vts_audio_attr[i-1].audio_format );
+ msg_Err( p_input, "unknown audio type %.2x",
+ p_vts->vtsi_mat->vts_audio_attr[i-1].audio_format );
}
}
}
u16 i_id;
// IfoPrintSpu( p_dvd, i );
- intf_WarnMsg( 12, "dvd spu %d 0x%02x", i, spu_control );
+ msg_Dbg( p_input, "spu %d 0x%02x", i, spu_control );
if( spu_control & 0x80000000 )
{
}
i_id = ( ( 0x20 + i_position ) << 8 ) | 0xbd;
- p_es = input_AddES( p_input,
- p_input->stream.p_selected_program, i_id, 0 );
+ p_es = input_AddES( p_input, NULL, i_id, 0 );
p_es->i_stream_id = 0xbd;
- p_es->i_type = DVD_SPU_ES;
+ p_es->i_fourcc = VLC_FOURCC('s','p','u',' ');
p_es->i_cat = SPU_ES;
- strcpy( p_es->psz_desc, DecodeLanguage( hton16(
- p_vts->vtsi_mat->vts_subp_attr[i-1].lang_code ) ) );
+ strcpy( p_es->psz_desc, DecodeLanguage(
+ p_vts->vtsi_mat->vts_subp_attr[i-1].lang_code ) );
}
}
#undef spu_control
/* FIXME: hack to check that the demuxer is ready, and set
* the decoders */
- if( p_input->p_demux_module )
+ if( p_input->p_demux )
{
DvdReadLauchDecoders( p_input );
}
#undef p_vts
#undef p_vmg
- if( p_area->i_angle != p_dvd->i_angle )
- {
- p_dvd->i_angle = p_area->i_angle;
-
- intf_WarnMsg( 3, "dvd info: angle %d selected", p_area->i_angle );
- }
/* warn interface that something has changed */
p_area->i_tell = LB2OFF( p_dvd->i_next_vobu ) - p_area->i_start;
p_input->stream.b_seekable = 1;
int i_blocks;
int i_read;
int i_read_total;
- boolean_t b_eot = 0;
+ vlc_bool_t b_eot = 0;
p_dvd = (thread_dvd_data_t *)p_input->p_access_data;
p_buf = p_buffer;
if( ( i_read = DVDReadBlocks( p_dvd->p_title, p_dvd->i_next_vobu,
1, p_buf ) ) != 1 )
{
- intf_ErrMsg( "dvdread error: read failed for block %d",
- p_dvd->i_next_vobu );
+ msg_Err( p_input, "read failed for block %d",
+ p_dvd->i_next_vobu );
return -1;
}
i_blocks_once, p_buf );
if( i_read != i_blocks_once )
{
- intf_ErrMsg( "dvdread error: read failed for %d/%d blocks at 0x%02x",
- i_read, i_blocks_once, p_dvd->i_cur_block );
+ msg_Err( p_input, "read failed for %d/%d blocks at 0x%02x",
+ i_read, i_blocks_once, p_dvd->i_cur_block );
return -1;
}
}
/*
- intf_WarnMsg( 12, "dvdread i_blocks: %d len: %d current: 0x%02x", i_read, p_dvd->i_pack_len, p_dvd->i_cur_block );
+ msg_Dbg( p_input, "i_blocks: %d len: %d current: 0x%02x", i_read, p_dvd->i_pack_len, p_dvd->i_cur_block );
*/
vlc_mutex_lock( &p_input->stream.stream_lock );
}
/* EOT */
- intf_WarnMsg( 4, "dvd info: new title" );
+ msg_Dbg( p_input, "new title" );
DvdReadSetArea( p_input, p_input->stream.pp_areas[
p_input->stream.p_selected_area->i_id+1] );
vlc_mutex_unlock( &p_input->stream.stream_lock );
}
/*
- intf_WarnMsg(12, "cell %d i_sub_cell %d chapter %d vobu %d cell_sector %d vobu_sector %d sub_cell_sector %d",
+ msg_Dbg( p_input, "cell %d i_sub_cell %d chapter %d vobu %d cell_sector %d vobu_sector %d sub_cell_sector %d",
i_cell, i_sub_cell,i_chapter, i_vobu,
p_dvd->p_cur_pgc->cell_playback[i_cell].first_sector,
p_dvd->p_vts_file->vts_vobu_admap->vobu_start_sectors[i_vobu],
}
#if 0
- intf_WarnMsg( 12, "scr %d lbn 0x%02x vobu_ea %d vob_id %d c_id %d",
- p_dvd->dsi_pack.dsi_gi.nv_pck_scr,
- p_dvd->dsi_pack.dsi_gi.nv_pck_lbn,
- p_dvd->dsi_pack.dsi_gi.vobu_ea,
- p_dvd->dsi_pack.dsi_gi.vobu_vob_idn,
- p_dvd->dsi_pack.dsi_gi.vobu_c_idn );
-
- intf_WarnMsg( 12, "cat 0x%02x ilvu_ea %d ilvu_sa %d size %d",
- p_dvd->dsi_pack.sml_pbi.category,
- p_dvd->dsi_pack.sml_pbi.ilvu_ea,
- p_dvd->dsi_pack.sml_pbi.ilvu_sa,
- p_dvd->dsi_pack.sml_pbi.size );
-
- intf_WarnMsg( 12, "next_vobu %d next_ilvu1 %d next_ilvu2 %d",
- p_dvd->dsi_pack.vobu_sri.next_vobu & 0x7fffffff,
- p_dvd->dsi_pack.sml_agli.data[ p_dvd->i_angle - 1 ].address,
- p_dvd->dsi_pack.sml_agli.data[ p_dvd->i_angle ].address);
+ msg_Dbg( p_input, 12, "scr %d lbn 0x%02x vobu_ea %d vob_id %d c_id %d",
+ p_dvd->dsi_pack.dsi_gi.nv_pck_scr,
+ p_dvd->dsi_pack.dsi_gi.nv_pck_lbn,
+ p_dvd->dsi_pack.dsi_gi.vobu_ea,
+ p_dvd->dsi_pack.dsi_gi.vobu_vob_idn,
+ p_dvd->dsi_pack.dsi_gi.vobu_c_idn );
+
+ msg_Dbg( p_input, 12, "cat 0x%02x ilvu_ea %d ilvu_sa %d size %d",
+ p_dvd->dsi_pack.sml_pbi.category,
+ p_dvd->dsi_pack.sml_pbi.ilvu_ea,
+ p_dvd->dsi_pack.sml_pbi.ilvu_sa,
+ p_dvd->dsi_pack.sml_pbi.size );
+
+ msg_Dbg( p_input, 12, "next_vobu %d next_ilvu1 %d next_ilvu2 %d",
+ p_dvd->dsi_pack.vobu_sri.next_vobu & 0x7fffffff,
+ p_dvd->dsi_pack.sml_agli.data[ p_dvd->i_angle - 1 ].address,
+ p_dvd->dsi_pack.sml_agli.data[ p_dvd->i_angle ].address);
#endif
}
p_dvd = (thread_dvd_data_t*)(p_input->p_access_data);
- if( p_main->b_video )
+ if( config_GetInt( p_input, "video" ) )
{
input_SelectES( p_input, p_input->stream.pp_es[0] );
}
- if( p_main->b_audio )
+ if( config_GetInt( p_input, "audio" ) )
{
/* For audio: first one if none or a not existing one specified */
- int i_audio = config_GetIntVariable( INPUT_CHANNEL_VAR );
+ int i_audio = config_GetInt( p_input, "audio-channel" );
if( i_audio < 0 /*|| i_audio > i_audio_nb*/ )
{
- config_PutIntVariable( INPUT_CHANNEL_VAR, 1 );
+ config_PutInt( p_input, "audio-channel", 1 );
i_audio = 1;
}
if( i_audio > 0/* && i_audio_nb > 0*/ )
{
- if( config_GetIntVariable( AOUT_SPDIF_VAR ) ||
- ( config_GetIntVariable( INPUT_AUDIO_VAR ) ==
- REQUESTED_AC3 ) )
+ if( config_GetInt( p_input, "audio-type" )
+ == REQUESTED_AC3 )
{
int i_ac3 = i_audio;
- while( ( p_input->stream.pp_es[i_ac3]->i_type !=
- AC3_AUDIO_ES ) && ( i_ac3 <=
+ while( ( p_input->stream.pp_es[i_ac3]->i_fourcc !=
+ VLC_FOURCC('a','5','2',' ') ) && ( i_ac3 <=
p_dvd->p_vts_file->vtsi_mat->nr_of_vts_audio_streams ) )
{
i_ac3++;
}
- if( p_input->stream.pp_es[i_ac3]->i_type == AC3_AUDIO_ES )
+ if( p_input->stream.pp_es[i_ac3]->i_fourcc
+ == VLC_FOURCC('a','5','2',' ') )
{
input_SelectES( p_input,
p_input->stream.pp_es[i_ac3] );
}
}
- if( p_main->b_video )
+ if( config_GetInt( p_input, "video" ) )
{
/* for spu, default is none */
- int i_spu = config_GetIntVariable( INPUT_SUBTITLE_VAR );
+ int i_spu = config_GetInt( p_input, "spu-channel" );
if( i_spu < 0 /*|| i_spu > i_spu_nb*/ )
{
- config_PutIntVariable( INPUT_SUBTITLE_VAR, 0 );
+ config_PutInt( p_input, "spu-channel", 0 );
i_spu = 0;
}
if( i_spu > 0 /*&& i_spu_nb > 0*/ )