#include <dvdnav/dvdnav.h>
-#include "ps.h"
+#include "../demux/ps.h"
/*****************************************************************************
* Module descriptor
{
demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys;
+ dvdnav_t *p_dvdnav;
int i_title, i_chapter, i_angle;
char *psz_name;
- if( strncmp( p_demux->psz_access, "dvdnav", 6 ) )
+ psz_name = ParseCL( VLC_OBJECT(p_demux), p_demux->psz_path, VLC_TRUE,
+ &i_title, &i_chapter, &i_angle );
+ if( !psz_name )
{
- msg_Warn( p_demux, "dvdnav module discarded" );
return VLC_EGENERIC;
}
- psz_name = ParseCL( VLC_OBJECT(p_demux), p_demux->psz_path, VLC_TRUE,
- &i_title, &i_chapter, &i_angle );
- if( !psz_name )
+ /* Open dvdnav */
+ if( dvdnav_open( &p_dvdnav, psz_name ) != DVDNAV_STATUS_OK )
{
+ msg_Warn( p_demux, "cannot open dvdnav" );
+ free( psz_name );
return VLC_EGENERIC;
}
+ free( psz_name );
- /* fill p_demux field */
+ /* Fill p_demux field */
p_demux->pf_demux = Demux;
p_demux->pf_control = Control;
p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
memset( p_sys, 0, sizeof( demux_sys_t ) );
+ p_sys->dvdnav = p_dvdnav;
p_sys->b_simple =
strcmp( p_demux->psz_access, "dvdnavsimple" ) ? VLC_FALSE : VLC_TRUE;
p_sys->i_aspect = -1;
p_sys->b_es_out_ok = VLC_FALSE;
- /* Open dvdnav */
- if( dvdnav_open( &p_sys->dvdnav, psz_name ) != DVDNAV_STATUS_OK )
- {
- msg_Warn( p_demux, "cannot open dvdnav" );
- free( psz_name );
- return VLC_EGENERIC;
- }
- free( psz_name );
-
if( 1 )
{
// Hack for libdvdnav CVS.
msg_Warn( p_demux, "cannot set PGC positioning flag" );
}
- if( dvdnav_menu_language_select ( p_sys->dvdnav,"en") != DVDNAV_STATUS_OK||
- dvdnav_audio_language_select( p_sys->dvdnav,"en") != DVDNAV_STATUS_OK||
- dvdnav_spu_language_select ( p_sys->dvdnav,"en") != DVDNAV_STATUS_OK )
+ if( dvdnav_menu_language_select (p_sys->dvdnav,"en") != DVDNAV_STATUS_OK ||
+ dvdnav_audio_language_select(p_sys->dvdnav,"en") != DVDNAV_STATUS_OK ||
+ dvdnav_spu_language_select (p_sys->dvdnav,"en") != DVDNAV_STATUS_OK )
{
msg_Warn( p_demux, "something failed while setting en language (%s)",
dvdnav_err_to_string( p_sys->dvdnav ) );
return VLC_EGENERIC;
}
else if( dvdnav_part_play( p_sys->dvdnav, p_demux->info.i_title,
- i ) != DVDNAV_STATUS_OK )
+ i + 1 ) != DVDNAV_STATUS_OK )
{
msg_Warn( p_demux, "cannot set title/chapter" );
return VLC_EGENERIC;
&i_part ) == DVDNAV_STATUS_OK )
{
if( i_title >= 0 && i_title < p_sys->i_title &&
- i_part >= 0 && i_part < p_sys->title[i_title]->i_seekpoint &&
- p_demux->info.i_seekpoint != i_part )
+ i_part >= 1 && i_part <= p_sys->title[i_title]->i_seekpoint &&
+ p_demux->info.i_seekpoint != i_part - 1 )
{
p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT;
- p_demux->info.i_seekpoint = i_part;
+ p_demux->info.i_seekpoint = i_part - 1;
}
}
break;
/* Find out number of titles/chapters */
dvdnav_get_number_of_titles( p_sys->dvdnav, &i_titles );
- for( i = 1; i < i_titles; i++ )
+ for( i = 1; i <= i_titles; i++ )
{
int32_t i_chapters = 0;
int j;