* access.c: access capabilities for dvdplay plugin.
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: access.c,v 1.12 2003/03/09 19:25:09 gbazin Exp $
+ * $Id: access.c,v 1.14 2003/03/24 14:18:28 hartman Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
# include <strings.h>
#endif
-#if defined( WIN32 )
-# include <io.h> /* read() */
-#endif
-
#include "dvd.h"
#include "es.h"
#include "tools.h"
if( p_dvd->vmg == NULL )
{
- msg_Err( p_input, "cannot open %s", psz_source );
+ msg_Warn( p_input, "cannot open %s", psz_source );
free( psz_source );
free( p_dvd );
return -1;
/* Area 0 for menu */
area[0]->i_plugin_data = 0;
+ input_DelArea( p_input, p_input->stream.pp_areas[0] );
+ input_AddArea( p_input, 0, 1 );
for( i = 1 ; i <= i_title_nr ; i++ )
{
- input_AddArea( p_input );
-
- /* Titles id */
- area[i]->i_id = i;
-
- /* Number of chapters */
- area[i]->i_part_nb = dvdplay_chapter_nr( p_dvd->vmg, i );
-
+ input_AddArea( p_input, i, dvdplay_chapter_nr( p_dvd->vmg, i ) );
area[i]->i_plugin_data = 0;
}
#undef area
{
dvd_data_t * p_dvd;
int i_angle;
+ vlc_value_t val;
p_dvd = (dvd_data_t*)(p_input->p_access_data);
i_angle = p_program->i_number;
msg_Dbg( p_input, "angle %d selected", i_angle );
}
+
+ /* Update the navigation variables without triggering a callback */
+ val.i_int = p_program->i_number;
+ var_Change( p_input, "program", VLC_VAR_SETVALUE, &val );
}
return 0;
static int dvdplay_SetArea( input_thread_t * p_input, input_area_t * p_area )
{
dvd_data_t * p_dvd;
+ vlc_value_t val;
p_dvd = (dvd_data_t*)p_input->p_access_data;
LB2OFF( dvdplay_position( p_dvd->vmg ) ) - p_area->i_start;
p_input->stream.b_changed = 1;
+ /* Update the navigation variables without triggering a callback */
+ val.i_int = p_area->i_part;
+ var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val );
+
return 0;
}
case NEW_VTS:
break;
case NEW_FILE:
-
break;
case NEW_PGC:
/* prevent intf to try to seek by default */
/* warn interface that something has changed */
p_input->stream.b_changed = 1;
+
+ /* Update the navigation variables without triggering a callback */
+ val.i_int = p_input->stream.p_selected_area->i_part;
+ var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val );
break;
case NEW_CELL:
p_dvd->b_end_of_cell = 0;
{
dvd_data_t * p_dvd;
int i_angle_nb, i_angle;
+ vlc_value_t val;
int i;
p_dvd = (dvd_data_t*)p_input->p_access_data;
/* No PSM to read in DVD mode, we already have all information */
p_input->stream.p_selected_program->b_is_ok = 1;
+ /* Update the navigation variables without triggering a callback */
+ val.i_int = p_area->i_id;
+ var_Change( p_input, "title", VLC_VAR_SETVALUE, &val );
+ var_Change( p_input, "chapter", VLC_VAR_CLEARCHOICES, NULL );
+ for( i = 1; (unsigned int)i <= p_area->i_part_nb; i++ )
+ {
+ val.i_int = i;
+ var_Change( p_input, "chapter", VLC_VAR_ADDCHOICE, &val );
+ }
+
+ /* Update the navigation variables without triggering a callback */
+ val.i_int = p_area->i_part;
+ var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val );
+
return 0;
}
return 0;
}
-