Commit 79053042 authored by Rocky Bernstein's avatar Rocky Bernstein

Some cleanup and unification with xine vcd plugin.

parent 8b492795
...@@ -87,11 +87,11 @@ static access_t *p_vcd_access = NULL; ...@@ -87,11 +87,11 @@ static access_t *p_vcd_access = NULL;
static void static void
cdio_log_handler (cdio_log_level_t level, const char message[]) cdio_log_handler (cdio_log_level_t level, const char message[])
{ {
const vcdplayer_t *p_vcd = (vcdplayer_t *)p_vcd_access->p_sys; const vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
switch (level) { switch (level) {
case CDIO_LOG_DEBUG: case CDIO_LOG_DEBUG:
case CDIO_LOG_INFO: case CDIO_LOG_INFO:
if (p_vcd->i_debug & INPUT_DBG_CDIO) if (p_vcdplayer->i_debug & INPUT_DBG_CDIO)
msg_Dbg( p_vcd_access, message); msg_Dbg( p_vcd_access, message);
break; break;
case CDIO_LOG_WARN: case CDIO_LOG_WARN:
...@@ -113,11 +113,11 @@ cdio_log_handler (cdio_log_level_t level, const char message[]) ...@@ -113,11 +113,11 @@ cdio_log_handler (cdio_log_level_t level, const char message[])
static void static void
vcd_log_handler (vcd_log_level_t level, const char message[]) vcd_log_handler (vcd_log_level_t level, const char message[])
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_vcd_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
switch (level) { switch (level) {
case VCD_LOG_DEBUG: case VCD_LOG_DEBUG:
case VCD_LOG_INFO: case VCD_LOG_INFO:
if (p_vcd->i_debug & INPUT_DBG_VCDINFO) if (p_vcdplayer->i_debug & INPUT_DBG_VCDINFO)
msg_Dbg( p_vcd_access, message); msg_Dbg( p_vcd_access, message);
break; break;
case VCD_LOG_WARN: case VCD_LOG_WARN:
...@@ -142,16 +142,16 @@ vcd_log_handler (vcd_log_level_t level, const char message[]) ...@@ -142,16 +142,16 @@ vcd_log_handler (vcd_log_level_t level, const char message[])
static block_t * static block_t *
VCDReadBlock( access_t * p_access ) VCDReadBlock( access_t * p_access )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
const int i_blocks = p_vcdplayer->i_blocks_per_read;
block_t *p_block; block_t *p_block;
const int i_blocks = p_vcd->i_blocks_per_read;
int i_read; int i_read;
uint8_t * p_buf; uint8_t *p_buf;
i_read = 0; i_read = 0;
dbg_print( (INPUT_DBG_LSN), "lsn: %lu", dbg_print( (INPUT_DBG_LSN), "lsn: %lu",
(long unsigned int) p_vcd->i_lsn ); (long unsigned int) p_vcdplayer->i_lsn );
/* Allocate a block for the reading */ /* Allocate a block for the reading */
if( !( p_block = block_New( p_access, i_blocks * M2F2_SECTOR_SIZE ) ) ) if( !( p_block = block_New( p_access, i_blocks * M2F2_SECTOR_SIZE ) ) )
...@@ -213,7 +213,7 @@ VCDReadBlock( access_t * p_access ) ...@@ -213,7 +213,7 @@ VCDReadBlock( access_t * p_access )
p_vcd->in_still = VLC_FALSE; p_vcd->in_still = VLC_FALSE;
dbg_print(INPUT_DBG_STILL, "still wait time done"); dbg_print(INPUT_DBG_STILL, "still wait time done");
#else #else
vcdIntfStillTime(p_vcd->p_intf, *p_buf); vcdIntfStillTime(p_vcdplayer->p_intf, *p_buf);
#endif #endif
#if 1 #if 1
...@@ -235,16 +235,17 @@ VCDReadBlock( access_t * p_access ) ...@@ -235,16 +235,17 @@ VCDReadBlock( access_t * p_access )
p_buf += M2F2_SECTOR_SIZE; p_buf += M2F2_SECTOR_SIZE;
/* Update seekpoint */ /* Update seekpoint */
if ( VCDINFO_ITEM_TYPE_ENTRY == p_vcd->play_item.type ) if ( VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type )
{ {
unsigned int i_entry = p_vcd->play_item.num+1; unsigned int i_entry = p_vcdplayer->play_item.num+1;
lsn_t i_lsn = vcdinfo_get_entry_lba(p_vcd->vcd, i_entry); lsn_t i_lsn = vcdinfo_get_entry_lba(p_vcdplayer->vcd, i_entry);
if ( p_vcd->i_lsn >= i_lsn && i_lsn != VCDINFO_NULL_LBA ) if ( p_vcdplayer->i_lsn >= i_lsn && i_lsn != VCDINFO_NULL_LBA )
{ {
const track_t i_track = p_vcd->i_track; const track_t i_track = p_vcdplayer->i_track;
p_vcd->play_item.num = i_entry; p_vcdplayer->play_item.num = i_entry;
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "entry change" ); dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "entry change" );
VCDSetOrigin( p_access, i_lsn, i_track, &(p_vcd->play_item) ); VCDSetOrigin( p_access, i_lsn, i_track,
&(p_vcdplayer->play_item) );
} }
} }
} }
...@@ -262,30 +263,30 @@ VCDSeek( access_t * p_access, int64_t i_pos ) ...@@ -262,30 +263,30 @@ VCDSeek( access_t * p_access, int64_t i_pos )
if (!p_access || !p_access->p_sys) return VLC_EGENERIC; if (!p_access || !p_access->p_sys) return VLC_EGENERIC;
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_vcd_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
const input_title_t *t = p_vcd->p_title[p_access->info.i_title]; const input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
unsigned int i_entry = VCDINFO_INVALID_ENTRY;
int i_seekpoint; int i_seekpoint;
unsigned int i_entry=VCDINFO_INVALID_ENTRY;
/* Next sector to read */ /* Next sector to read */
p_access->info.i_pos = i_pos; p_access->info.i_pos = i_pos;
p_vcd->i_lsn = (i_pos / (int64_t)M2F2_SECTOR_SIZE) + p_vcdplayer->i_lsn = (i_pos / (int64_t)M2F2_SECTOR_SIZE) +
p_vcd->track_lsn; p_vcdplayer->track_lsn;
switch (p_vcd->play_item.type) { switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
case VCDINFO_ITEM_TYPE_ENTRY: case VCDINFO_ITEM_TYPE_ENTRY:
break ; break ;
default: default:
p_vcd->b_valid_ep = VLC_FALSE; p_vcdplayer->b_valid_ep = VLC_FALSE;
} }
/* Find entry */ /* Find entry */
if( p_vcd->b_valid_ep ) if( p_vcdplayer->b_valid_ep )
{ {
for( i_entry = 0 ; i_entry < p_vcd->i_entries ; i_entry ++ ) for( i_entry = 0 ; i_entry < p_vcdplayer->i_entries ; i_entry ++ )
{ {
if( p_vcd->i_lsn < p_vcd->p_entries[i_entry] ) if( p_vcdplayer->i_lsn < p_vcdplayer->p_entries[i_entry] )
{ {
VCDUpdateVar( p_access, i_entry, VLC_VAR_SETVALUE, VCDUpdateVar( p_access, i_entry, VLC_VAR_SETVALUE,
"chapter", _("Entry"), "Setting entry" ); "chapter", _("Entry"), "Setting entry" );
...@@ -297,15 +298,15 @@ VCDSeek( access_t * p_access, int64_t i_pos ) ...@@ -297,15 +298,15 @@ VCDSeek( access_t * p_access, int64_t i_pos )
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
itemid.num = i_entry; itemid.num = i_entry;
itemid.type = VCDINFO_ITEM_TYPE_ENTRY; itemid.type = VCDINFO_ITEM_TYPE_ENTRY;
VCDSetOrigin(p_access, p_vcd->i_lsn, p_vcd->i_track, VCDSetOrigin(p_access, p_vcdplayer->i_lsn, p_vcdplayer->i_track,
&itemid); &itemid);
} }
} }
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_SEEK), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_SEEK),
"orig %lu, cur: %lu, offset: %lld, entry %d", "orig %lu, cur: %lu, offset: %lld, entry %d",
(long unsigned int) p_vcd->origin_lsn, (long unsigned int) p_vcdplayer->origin_lsn,
(long unsigned int) p_vcd->i_lsn, i_pos, (long unsigned int) p_vcdplayer->i_lsn, i_pos,
i_entry ); i_entry );
/* Find seekpoint */ /* Find seekpoint */
...@@ -340,11 +341,12 @@ VCDEntryPoints( access_t * p_access ) ...@@ -340,11 +341,12 @@ VCDEntryPoints( access_t * p_access )
if (!p_access || !p_access->p_sys) return VLC_FALSE; if (!p_access || !p_access->p_sys) return VLC_FALSE;
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
const unsigned int i_entries = vcdinfo_get_num_entries(p_vcd->vcd); const unsigned int i_entries =
vcdinfo_get_num_entries(p_vcdplayer->vcd);
const track_t i_last_track const track_t i_last_track
= cdio_get_num_tracks(vcdinfo_get_cd_image(p_vcd->vcd)) = cdio_get_num_tracks(vcdinfo_get_cd_image(p_vcdplayer->vcd))
+ cdio_get_first_track_num(vcdinfo_get_cd_image(p_vcd->vcd)); + cdio_get_first_track_num(vcdinfo_get_cd_image(p_vcdplayer->vcd));
unsigned int i; unsigned int i;
if (0 == i_entries) { if (0 == i_entries) {
...@@ -352,43 +354,43 @@ VCDEntryPoints( access_t * p_access ) ...@@ -352,43 +354,43 @@ VCDEntryPoints( access_t * p_access )
return VLC_FALSE; return VLC_FALSE;
} }
p_vcd->p_entries = malloc( sizeof( lsn_t ) * i_entries ); p_vcdplayer->p_entries = malloc( sizeof( lsn_t ) * i_entries );
if( p_vcd->p_entries == NULL ) if( p_vcdplayer->p_entries == NULL )
{ {
LOG_ERR ("not enough memory for entry points treatment" ); LOG_ERR ("not enough memory for entry points treatment" );
return VLC_FALSE; return VLC_FALSE;
} }
p_vcd->i_entries = i_entries; p_vcdplayer->i_entries = i_entries;
for( i = 0 ; i < i_entries ; i++ ) for( i = 0 ; i < i_entries ; i++ )
{ {
const track_t i_track = vcdinfo_get_track(p_vcd->vcd, i); const track_t i_track = vcdinfo_get_track(p_vcdplayer->vcd, i);
if( i_track <= i_last_track ) { if( i_track <= i_last_track ) {
seekpoint_t *s = vlc_seekpoint_New(); seekpoint_t *s = vlc_seekpoint_New();
char psz_entry[100]; char psz_entry[100];
snprintf(psz_entry, sizeof(psz_entry), "%s%02d", _("Entry "), i ); snprintf(psz_entry, sizeof(psz_entry), "%s%02d", _("Entry "), i );
p_vcd->p_entries[i] = vcdinfo_get_entry_lba(p_vcd->vcd, i); p_vcdplayer->p_entries[i] = vcdinfo_get_entry_lba(p_vcdplayer->vcd, i);
s->psz_name = strdup(psz_entry); s->psz_name = strdup(psz_entry);
s->i_byte_offset = s->i_byte_offset =
(p_vcd->p_entries[i] - vcdinfo_get_track_lba(p_vcd->vcd, i_track)) (p_vcdplayer->p_entries[i] - vcdinfo_get_track_lba(p_vcdplayer->vcd, i_track))
* M2F2_SECTOR_SIZE; * M2F2_SECTOR_SIZE;
dbg_print( INPUT_DBG_MRL, dbg_print( INPUT_DBG_MRL,
"%s, lsn %d, byte_offset %ld", "%s, lsn %d, byte_offset %ld",
s->psz_name, p_vcd->p_entries[i], s->psz_name, p_vcdplayer->p_entries[i],
(unsigned long int) s->i_byte_offset); (unsigned long int) s->i_byte_offset);
TAB_APPEND( p_vcd->p_title[i_track-1]->i_seekpoint, TAB_APPEND( p_vcdplayer->p_title[i_track-1]->i_seekpoint,
p_vcd->p_title[i_track-1]->seekpoint, s ); p_vcdplayer->p_title[i_track-1]->seekpoint, s );
} else } else
msg_Warn( p_access, "wrong track number found in entry points" ); msg_Warn( p_access, "wrong track number found in entry points" );
} }
p_vcd->b_valid_ep = VLC_TRUE; p_vcdplayer->b_valid_ep = VLC_TRUE;
return VLC_TRUE; return VLC_TRUE;
} }
} }
...@@ -399,19 +401,19 @@ VCDEntryPoints( access_t * p_access ) ...@@ -399,19 +401,19 @@ VCDEntryPoints( access_t * p_access )
static vlc_bool_t static vlc_bool_t
VCDSegments( access_t * p_access ) VCDSegments( access_t * p_access )
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
unsigned int i; unsigned int i;
input_title_t *t; input_title_t *t;
p_vcd->i_segments = vcdinfo_get_num_segments(p_vcd->vcd); p_vcdplayer->i_segments = vcdinfo_get_num_segments(p_vcdplayer->vcd);
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_MRL), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_MRL),
"Segments: %d", p_vcd->i_segments); "Segments: %d", p_vcdplayer->i_segments);
if ( 0 == p_vcd->i_segments ) return VLC_FALSE; if ( 0 == p_vcdplayer->i_segments ) return VLC_FALSE;
t = p_vcd->p_title[p_vcd->i_titles] = vlc_input_title_New(); t = p_vcdplayer->p_title[p_vcdplayer->i_titles] = vlc_input_title_New();
p_vcd->i_titles++; p_vcdplayer->i_titles++;
t->i_size = 0; /* Not sure Segments have a size associated */ t->i_size = 0; /* Not sure Segments have a size associated */
t->psz_name = strdup(_("Segments")); t->psz_name = strdup(_("Segments"));
...@@ -419,18 +421,19 @@ VCDSegments( access_t * p_access ) ...@@ -419,18 +421,19 @@ VCDSegments( access_t * p_access )
/* We have one additional segment allocated so we can get the size /* We have one additional segment allocated so we can get the size
by subtracting seg[i+1] - seg[i]. by subtracting seg[i+1] - seg[i].
*/ */
p_vcd->p_segments = malloc( sizeof( lsn_t ) * (p_vcd->i_segments+1) ); p_vcdplayer->p_segments =
if( p_vcd->p_segments == NULL ) malloc( sizeof( lsn_t ) * (p_vcdplayer->i_segments+1) );
if( p_vcdplayer->p_segments == NULL )
{ {
LOG_ERR ("not enough memory for segment treatment" ); LOG_ERR ("not enough memory for segment treatment" );
return VLC_FALSE; return VLC_FALSE;
} }
for( i = 0 ; i < p_vcd->i_segments ; i++ ) for( i = 0 ; i < p_vcdplayer->i_segments ; i++ )
{ {
char psz_segment[100]; char psz_segment[100];
seekpoint_t *s = vlc_seekpoint_New(); seekpoint_t *s = vlc_seekpoint_New();
p_vcd->p_segments[i] = vcdinfo_get_seg_lsn(p_vcd->vcd, i); p_vcdplayer->p_segments[i] = vcdinfo_get_seg_lsn(p_vcdplayer->vcd, i);
snprintf( psz_segment, sizeof(psz_segment), "%s%02d", _("Segment "), snprintf( psz_segment, sizeof(psz_segment), "%s%02d", _("Segment "),
i ); i );
...@@ -440,9 +443,10 @@ VCDSegments( access_t * p_access ) ...@@ -440,9 +443,10 @@ VCDSegments( access_t * p_access )
TAB_APPEND( t->i_seekpoint, t->seekpoint, s ); TAB_APPEND( t->i_seekpoint, t->seekpoint, s );
} }
p_vcd->p_segments[p_vcd->i_segments] = p_vcdplayer->p_segments[p_vcdplayer->i_segments] =
p_vcd->p_segments[p_vcd->i_segments-1]+ p_vcdplayer->p_segments[p_vcdplayer->i_segments-1]+
vcdinfo_get_seg_sector_count(p_vcd->vcd, p_vcd->i_segments-1); vcdinfo_get_seg_sector_count(p_vcdplayer->vcd,
p_vcdplayer->i_segments-1);
return VLC_TRUE; return VLC_TRUE;
} }
...@@ -465,15 +469,17 @@ VCDTitles( access_t * p_access ) ...@@ -465,15 +469,17 @@ VCDTitles( access_t * p_access )
if (!p_access || !p_access->p_sys) return VLC_EGENERIC; if (!p_access || !p_access->p_sys) return VLC_EGENERIC;
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
track_t i; track_t i;
p_vcd->i_titles = 0; p_vcdplayer->i_titles = 0;
for( i = 1 ; i <= p_vcd->i_tracks ; i++ ) for( i = 1 ; i <= p_vcdplayer->i_tracks ; i++ )
{ {
input_title_t *t = p_vcd->p_title[i-1] = vlc_input_title_New(); input_title_t *t = p_vcdplayer->p_title[i-1] =
vlc_input_title_New();
char psz_track[100]; char psz_track[100];
uint32_t i_secsize = vcdinfo_get_track_sect_count( p_vcd->vcd, i ); uint32_t i_secsize =
vcdinfo_get_track_sect_count( p_vcdplayer->vcd, i );
snprintf( psz_track, sizeof(psz_track), "%s%02d", _("Track "), snprintf( psz_track, sizeof(psz_track), "%s%02d", _("Track "),
i ); i );
...@@ -484,7 +490,7 @@ VCDTitles( access_t * p_access ) ...@@ -484,7 +490,7 @@ VCDTitles( access_t * p_access )
dbg_print( INPUT_DBG_MRL, "track[%d] i_size: %lld", dbg_print( INPUT_DBG_MRL, "track[%d] i_size: %lld",
i, t->i_size ); i, t->i_size );
p_vcd->i_titles++; p_vcdplayer->i_titles++;
} }
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -497,21 +503,21 @@ VCDTitles( access_t * p_access ) ...@@ -497,21 +503,21 @@ VCDTitles( access_t * p_access )
static vlc_bool_t static vlc_bool_t
VCDLIDs( access_t * p_access ) VCDLIDs( access_t * p_access )
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
input_title_t *t; input_title_t *t;
unsigned int i_lid, i_title; unsigned int i_lid, i_title;
p_vcd->i_lids = vcdinfo_get_num_LIDs(p_vcd->vcd); p_vcdplayer->i_lids = vcdinfo_get_num_LIDs(p_vcdplayer->vcd);
p_vcd->i_lid = VCDINFO_INVALID_ENTRY; p_vcdplayer->i_lid = VCDINFO_INVALID_ENTRY;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_MRL), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_MRL),
"LIDs: %d", p_vcd->i_lids); "LIDs: %d", p_vcdplayer->i_lids);
if ( 0 == p_vcd->i_lids ) return VLC_FALSE; if ( 0 == p_vcdplayer->i_lids ) return VLC_FALSE;
if (vcdinfo_read_psd (p_vcd->vcd)) { if (vcdinfo_read_psd (p_vcdplayer->vcd)) {
vcdinfo_visit_lot (p_vcd->vcd, VLC_FALSE); vcdinfo_visit_lot (p_vcdplayer->vcd, VLC_FALSE);
#if FIXED #if FIXED
/* /*
...@@ -520,8 +526,8 @@ VCDLIDs( access_t * p_access ) ...@@ -520,8 +526,8 @@ VCDLIDs( access_t * p_access )
selection features in the extended PSD haven't been implemented, selection features in the extended PSD haven't been implemented,
it's best then to not try to read this at all. it's best then to not try to read this at all.
*/ */
if (vcdinfo_get_psd_x_size(p_vcd->vcd)) if (vcdinfo_get_psd_x_size(p_vcdplayer->vcd))
vcdinfo_visit_lot (p_vcd->vcd, VLC_TRUE); vcdinfo_visit_lot (p_vcdplayer->vcd, VLC_TRUE);
#endif #endif
} }
...@@ -530,8 +536,8 @@ VCDLIDs( access_t * p_access ) ...@@ -530,8 +536,8 @@ VCDLIDs( access_t * p_access )
t->b_menu = VLC_TRUE; t->b_menu = VLC_TRUE;
t->psz_name = strdup( "LIDs" ); t->psz_name = strdup( "LIDs" );
i_title = p_vcd->i_tracks; i_title = p_vcdplayer->i_tracks;
for( i_lid = 1 ; i_lid <= p_vcd->i_lids ; i_lid++ ) for( i_lid = 1 ; i_lid <= p_vcdplayer->i_lids ; i_lid++ )
{ {
char psz_lid[100]; char psz_lid[100];
seekpoint_t *s = vlc_seekpoint_New(); seekpoint_t *s = vlc_seekpoint_New();
...@@ -547,10 +553,10 @@ VCDLIDs( access_t * p_access ) ...@@ -547,10 +553,10 @@ VCDLIDs( access_t * p_access )
} }
#if DYNAMICALLY_ALLOCATED #if DYNAMICALLY_ALLOCATED
TAB_APPEND( p_vcd->i_titles, p_vcd->p_title, t ); TAB_APPEND( p_vcdplayer->i_titles, p_vcdplayer->p_title, t );
#else #else
p_vcd->p_title[p_vcd->i_titles] = t; p_vcdplayer->p_title[p_vcdplayer->i_titles] = t;
p_vcd->i_titles++; p_vcdplayer->i_titles++;
#endif #endif
return VLC_TRUE; return VLC_TRUE;
...@@ -563,7 +569,7 @@ static char * ...@@ -563,7 +569,7 @@ static char *
VCDParse( access_t * p_access, /*out*/ vcdinfo_itemid_t * p_itemid, VCDParse( access_t * p_access, /*out*/ vcdinfo_itemid_t * p_itemid,
/*out*/ vlc_bool_t *play_single_item ) /*out*/ vlc_bool_t *play_single_item )
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
char *psz_parser; char *psz_parser;
char *psz_source; char *psz_source;
char *psz_next; char *psz_next;
...@@ -683,7 +689,7 @@ void ...@@ -683,7 +689,7 @@ void
VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track, VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
const vcdinfo_itemid_t *p_itemid ) const vcdinfo_itemid_t *p_itemid )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_LSN), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_LSN),
"i_lsn: %lu, track: %d", (long unsigned int) i_lsn, "i_lsn: %lu, track: %d", (long unsigned int) i_lsn,
...@@ -691,18 +697,18 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track, ...@@ -691,18 +697,18 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
vcdplayer_set_origin(p_access, i_lsn, i_track, p_itemid); vcdplayer_set_origin(p_access, i_lsn, i_track, p_itemid);
p_access->info.i_pos = ( i_lsn - p_vcd->track_lsn ) p_access->info.i_pos = ( i_lsn - p_vcdplayer->track_lsn )
* M2F2_SECTOR_SIZE; * M2F2_SECTOR_SIZE;
p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE
| INPUT_UPDATE_SEEKPOINT; | INPUT_UPDATE_SEEKPOINT;
switch (p_vcd->play_item.type) { switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_ENTRY: case VCDINFO_ITEM_TYPE_ENTRY:
VCDUpdateVar( p_access, p_itemid->num, VLC_VAR_SETVALUE, VCDUpdateVar( p_access, p_itemid->num, VLC_VAR_SETVALUE,
"chapter", _("Entry"), "Setting entry/segment"); "chapter", _("Entry"), "Setting entry/segment");
p_access->info.i_title = i_track-1; p_access->info.i_title = i_track-1;
p_access->info.i_size = p_vcd->p_title[i_track-1]->i_size; p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
p_access->info.i_seekpoint = p_itemid->num; p_access->info.i_seekpoint = p_itemid->num;
break; break;
...@@ -713,21 +719,21 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track, ...@@ -713,21 +719,21 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
and they must here. The segment seekpoints are stored after and they must here. The segment seekpoints are stored after
the entry seekpoints and (zeroed) lid seekpoints. the entry seekpoints and (zeroed) lid seekpoints.
*/ */
p_access->info.i_title = p_vcd->i_titles - 1; p_access->info.i_title = p_vcdplayer->i_titles - 1;
p_access->info.i_size = 150 * M2F2_SECTOR_SIZE; p_access->info.i_size = 150 * M2F2_SECTOR_SIZE;
p_access->info.i_seekpoint = p_vcd->i_entries p_access->info.i_seekpoint = p_vcdplayer->i_entries
+ p_vcd->i_lids + p_itemid->num; + p_vcdplayer->i_lids + p_itemid->num;
break; break;
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
p_access->info.i_title = i_track-1; p_access->info.i_title = i_track-1;
p_access->info.i_size = p_vcd->p_title[i_track-1]->i_size; p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
p_access->info.i_seekpoint = vcdinfo_track_get_entry(p_vcd->vcd, p_access->info.i_seekpoint = vcdinfo_track_get_entry(p_vcdplayer->vcd,
i_track); i_track);
break; break;
default: default:
msg_Warn( p_access, "can't set origin for play type %d", msg_Warn( p_access, "can't set origin for play type %d",
p_vcd->play_item.type ); p_vcdplayer->play_item.type );
} }
...@@ -743,7 +749,7 @@ static vcdinfo_obj_t * ...@@ -743,7 +749,7 @@ static vcdinfo_obj_t *
vcd_Open( vlc_object_t *p_this, const char *psz_dev ) vcd_Open( vlc_object_t *p_this, const char *psz_dev )
{ {
access_t *p_access = (access_t *)p_this; access_t *p_access = (access_t *)p_this;
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
vcdinfo_obj_t *p_vcdobj; vcdinfo_obj_t *p_vcdobj;
char *actual_dev; char *actual_dev;
unsigned int i; unsigned int i;
...@@ -764,41 +770,43 @@ vcd_Open( vlc_object_t *p_this, const char *psz_dev ) ...@@ -764,41 +770,43 @@ vcd_Open( vlc_object_t *p_this, const char *psz_dev )
Save summary info on tracks, segments and entries... Save summary info on tracks, segments and entries...
*/ */
if ( 0 < (p_vcd->i_tracks = vcdinfo_get_num_tracks(p_vcdobj)) ) { if ( 0 < (p_vcdplayer->i_tracks = vcdinfo_get_num_tracks(p_vcdobj)) ) {
p_vcd->track = (vcdplayer_play_item_info_t *) p_vcdplayer->track = (vcdplayer_play_item_info_t *)
calloc(p_vcd->i_tracks, sizeof(vcdplayer_play_item_info_t)); calloc(p_vcdplayer->i_tracks, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcd->i_tracks; i++) { for (i=0; i<p_vcdplayer->i_tracks; i++) {
unsigned int track_num=i+1; unsigned int track_num=i+1;
p_vcd->track[i].size = p_vcdplayer->track[i].size =
vcdinfo_get_track_sect_count(p_vcdobj, track_num); vcdinfo_get_track_sect_count(p_vcdobj, track_num);
p_vcd->track[i].start_LSN = p_vcdplayer->track[i].start_LSN =
vcdinfo_get_track_lba(p_vcdobj, track_num); vcdinfo_get_track_lba(p_vcdobj, track_num);
} }
} else } else
p_vcd->track = NULL; p_vcdplayer->track = NULL;
if ( 0 < (p_vcd->i_entries = vcdinfo_get_num_entries(p_vcdobj)) ) { if ( 0 < (p_vcdplayer->i_entries = vcdinfo_get_num_entries(p_vcdobj)) ) {
p_vcd->entry = (vcdplayer_play_item_info_t *) p_vcdplayer->entry = (vcdplayer_play_item_info_t *)
calloc(p_vcd->i_entries, sizeof(vcdplayer_play_item_info_t)); calloc(p_vcdplayer->i_entries, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcd->i_entries; i++) { for (i=0; i<p_vcdplayer->i_entries; i++) {
p_vcd->entry[i].size = vcdinfo_get_entry_sect_count(p_vcdobj, i); p_vcdplayer->entry[i].size =
p_vcd->entry[i].start_LSN = vcdinfo_get_entry_lba(p_vcdobj, i); vcdinfo_get_entry_sect_count(p_vcdobj, i);
p_vcdplayer->entry[i].start_LSN = vcdinfo_get_entry_lba(p_vcdobj, i);
} }
} else } else
p_vcd->entry = NULL; p_vcdplayer->entry = NULL;
if ( 0 < (p_vcd->i_segments = vcdinfo_get_num_segments(p_vcdobj)) ) { if ( 0 < (p_vcdplayer->i_segments = vcdinfo_get_num_segments(p_vcdobj)) ) {
p_vcd->segment = (vcdplayer_play_item_info_t *) p_vcdplayer->segment = (vcdplayer_play_item_info_t *)
calloc(p_vcd->i_segments, sizeof(vcdplayer_play_item_info_t)); calloc(p_vcdplayer->i_segments, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcd->i_segments; i++) { for (i=0; i<p_vcdplayer->i_segments; i++) {
p_vcd->segment[i].size = vcdinfo_get_seg_sector_count(p_vcdobj, i); p_vcdplayer->segment[i].size =
p_vcd->segment[i].start_LSN = vcdinfo_get_seg_lsn(p_vcdobj, i); vcdinfo_get_seg_sector_count(p_vcdobj, i);
p_vcdplayer->segment[i].start_LSN = vcdinfo_get_seg_lsn(p_vcdobj, i);
} }
} else } else
p_vcd->segment = NULL; p_vcdplayer->segment = NULL;
return p_vcdobj; return p_vcdobj;
...@@ -815,7 +823,7 @@ VCDUpdateVar( access_t *p_access, int i_num, int i_action, ...@@ -815,7 +823,7 @@ VCDUpdateVar( access_t *p_access, int i_num, int i_action,
vlc_value_t val; vlc_value_t val;
val.i_int = i_num; val.i_int = i_num;
if (p_access) { if (p_access) {
const vcdplayer_t *p_vcd = (vcdplayer_t *)p_vcd_access->p_sys; const vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
dbg_print( INPUT_DBG_PBC, "%s %d", p_debug_label, i_num ); dbg_print( INPUT_DBG_PBC, "%s %d", p_debug_label, i_num );
} }
if (p_label) { if (p_label) {
...@@ -844,7 +852,7 @@ int ...@@ -844,7 +852,7 @@ int
VCDOpen ( vlc_object_t *p_this ) VCDOpen ( vlc_object_t *p_this )
{ {
access_t *p_access = (access_t *)p_this; access_t *p_access = (access_t *)p_this;
vcdplayer_t *p_vcd; vcdplayer_t *p_vcdplayer;
char *psz_source; char *psz_source;
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
vlc_bool_t play_single_item = VLC_FALSE; vlc_bool_t play_single_item = VLC_FALSE;
...@@ -861,15 +869,15 @@ VCDOpen ( vlc_object_t *p_this ) ...@@ -861,15 +869,15 @@ VCDOpen ( vlc_object_t *p_this )
p_access->info.i_title = 0; p_access->info.i_title = 0;
p_access->info.i_seekpoint = 0; p_access->info.i_seekpoint = 0;
p_vcd = malloc( sizeof(vcdplayer_t) ); p_vcdplayer = malloc( sizeof(vcdplayer_t) );
if( p_vcd == NULL ) if( p_vcdplayer == NULL )
{ {
LOG_ERR ("out of memory" ); LOG_ERR ("out of memory" );
return VLC_ENOMEM; return VLC_ENOMEM;
} }
p_access->p_sys = (access_sys_t *) p_vcd; p_access->p_sys = (access_sys_t *) p_vcdplayer;
/* Set where to log errors messages from libcdio. */ /* Set where to log errors messages from libcdio. */
p_vcd_access = p_access; p_vcd_access = p_access;
...@@ -880,43 +888,45 @@ VCDOpen ( vlc_object_t *p_this ) ...@@ -880,43 +888,45 @@ VCDOpen ( vlc_object_t *p_this )
if ( NULL == psz_source ) if ( NULL == psz_source )
{ {
free( p_vcd ); free( p_vcdplayer );
return( VLC_EGENERIC ); return( VLC_EGENERIC );
} }
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "source: %s: mrl: %s", dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "source: %s: mrl: %s",
psz_source, p_access->psz_path ); psz_source, p_access->psz_path );
p_vcd->psz_source = strdup(psz_source); p_vcdplayer->psz_source = strdup(psz_source);
p_vcd->i_debug = config_GetInt( p_this, p_vcdplayer->i_debug = config_GetInt( p_this,
MODULE_STRING "-debug" ); MODULE_STRING "-debug" );
p_vcd->i_blocks_per_read = config_GetInt( p_this, MODULE_STRING p_vcdplayer->i_blocks_per_read = config_GetInt( p_this, MODULE_STRING
"-blocks-per-read" ); "-blocks-per-read" );
p_vcd->in_still = VLC_FALSE; p_vcdplayer->in_still = VLC_FALSE;
p_vcd->play_item.type = VCDINFO_ITEM_TYPE_NOTFOUND; p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_NOTFOUND;
p_vcd->p_input = vlc_object_find( p_access, VLC_OBJECT_INPUT, p_vcdplayer->p_input = vlc_object_find( p_access,
VLC_OBJECT_INPUT,
FIND_PARENT ); FIND_PARENT );
p_vcd->p_demux = vlc_object_find( p_access, VLC_OBJECT_DEMUX, p_vcdplayer->p_demux = vlc_object_find( p_access,
VLC_OBJECT_DEMUX,
FIND_PARENT ); FIND_PARENT );
p_vcd->p_meta = vlc_meta_New(); p_vcdplayer->p_meta = vlc_meta_New();
p_vcd->p_segments = NULL; p_vcdplayer->p_segments = NULL;
p_vcd->p_entries = NULL; p_vcdplayer->p_entries = NULL;
/* set up input */ /* set up input */
if( !(p_vcd->vcd = vcd_Open( p_this, psz_source )) ) if( !(p_vcdplayer->vcd = vcd_Open( p_this, psz_source )) )
{ {
msg_Warn( p_access, "could not open %s", psz_source ); msg_Warn( p_access, "could not open %s", psz_source );
goto err_exit; goto err_exit;
} }
p_vcd->b_svd= (vlc_bool_t) vcdinfo_get_tracksSVD(p_vcd->vcd);; p_vcdplayer->b_svd= (vlc_bool_t) vcdinfo_get_tracksSVD(p_vcdplayer->vcd);;
/* Get track information. */ /* Get track information. */
p_vcd->i_tracks = vcdinfo_get_num_tracks(p_vcd->vcd); p_vcdplayer->i_tracks = vcdinfo_get_num_tracks(p_vcdplayer->vcd);
if( p_vcd->i_tracks < 1 || CDIO_INVALID_TRACK == p_vcd->i_tracks ) { if( p_vcdplayer->i_tracks < 1 || CDIO_INVALID_TRACK == p_vcdplayer->i_tracks ) {
vcdinfo_close( p_vcd->vcd ); vcdinfo_close( p_vcdplayer->vcd );
LOG_ERR ("no movie tracks found" ); LOG_ERR ("no movie tracks found" );
goto err_exit; goto err_exit;
} }
...@@ -928,7 +938,7 @@ VCDOpen ( vlc_object_t *p_this ) ...@@ -928,7 +938,7 @@ VCDOpen ( vlc_object_t *p_this )
if( ! VCDEntryPoints( p_access ) ) if( ! VCDEntryPoints( p_access ) )
{ {
msg_Warn( p_access, "could not read entry points, will not use them" ); msg_Warn( p_access, "could not read entry points, will not use them" );
p_vcd->b_valid_ep = VLC_FALSE; p_vcdplayer->b_valid_ep = VLC_FALSE;
} }
/* Initialize LID info and add that as a menu item */ /* Initialize LID info and add that as a menu item */
...@@ -938,8 +948,9 @@ VCDOpen ( vlc_object_t *p_this ) ...@@ -938,8 +948,9 @@ VCDOpen ( vlc_object_t *p_this )
} }
/* Do we set PBC (via LID) on? */ /* Do we set PBC (via LID) on? */
p_vcd->i_lid = p_vcdplayer->i_lid =
( VCDINFO_ITEM_TYPE_LID == itemid.type && p_vcd->i_lids > itemid.num ) ( VCDINFO_ITEM_TYPE_LID == itemid.type
&& p_vcdplayer->i_lids > itemid.num )
? itemid.num ? itemid.num
: VCDINFO_INVALID_ENTRY; : VCDINFO_INVALID_ENTRY;
...@@ -956,12 +967,12 @@ VCDOpen ( vlc_object_t *p_this ) ...@@ -956,12 +967,12 @@ VCDOpen ( vlc_object_t *p_this )
play_single_item ); play_single_item );
#endif #endif
p_vcd->p_intf = intf_Create( p_access, "vcdx" ); p_vcdplayer->p_intf = intf_Create( p_access, "vcdx" );
p_vcd->p_intf->b_block = VLC_FALSE; p_vcdplayer->p_intf->b_block = VLC_FALSE;
p_vcd->p_access = p_access; p_vcdplayer->p_access = p_access;
#ifdef FIXED #ifdef FIXED
intf_RunThread( p_vcd->p_intf ); intf_RunThread( p_vcdplayer->p_intf );
#endif #endif
free( psz_source ); free( psz_source );
...@@ -969,7 +980,7 @@ VCDOpen ( vlc_object_t *p_this ) ...@@ -969,7 +980,7 @@ VCDOpen ( vlc_object_t *p_this )
return VLC_SUCCESS; return VLC_SUCCESS;
err_exit: err_exit:
free( psz_source ); free( psz_source );
free( p_vcd ); free( p_vcdplayer );
return VLC_EGENERIC; return VLC_EGENERIC;
} }
...@@ -980,20 +991,20 @@ void ...@@ -980,20 +991,20 @@ void
VCDClose ( vlc_object_t *p_this ) VCDClose ( vlc_object_t *p_this )
{ {
access_t *p_access = (access_t *)p_this; access_t *p_access = (access_t *)p_this;
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "VCDClose" ); dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "VCDClose" );
vcdinfo_close( p_vcd->vcd ); vcdinfo_close( p_vcdplayer->vcd );
FREE_AND_NULL( p_vcd->p_entries ); FREE_AND_NULL( p_vcdplayer->p_entries );
FREE_AND_NULL( p_vcd->p_segments ); FREE_AND_NULL( p_vcdplayer->p_segments );
FREE_AND_NULL( p_vcd->psz_source ); FREE_AND_NULL( p_vcdplayer->psz_source );
FREE_AND_NULL( p_vcd->track ); FREE_AND_NULL( p_vcdplayer->track );
FREE_AND_NULL( p_vcd->segment ); FREE_AND_NULL( p_vcdplayer->segment );
FREE_AND_NULL( p_vcd->entry ); FREE_AND_NULL( p_vcdplayer->entry );
free( p_vcd ); free( p_vcdplayer );
p_access->p_sys = NULL; p_access->p_sys = NULL;
p_vcd_access = NULL; p_vcd_access = NULL;
} }
...@@ -1005,7 +1016,7 @@ VCDClose ( vlc_object_t *p_this ) ...@@ -1005,7 +1016,7 @@ VCDClose ( vlc_object_t *p_this )
*****************************************************************************/ *****************************************************************************/
static int VCDControl( access_t *p_access, int i_query, va_list args ) static int VCDControl( access_t *p_access, int i_query, va_list args )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
int *pi_int; int *pi_int;
int i; int i;
...@@ -1023,8 +1034,8 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1023,8 +1034,8 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
dbg_print( INPUT_DBG_EVENT, "get meta info" ); dbg_print( INPUT_DBG_EVENT, "get meta info" );
if ( p_vcd->p_meta ) { if ( p_vcdplayer->p_meta ) {
*pp_meta = vlc_meta_Duplicate( p_vcd->p_meta ); *pp_meta = vlc_meta_Duplicate( p_vcdplayer->p_meta );
dbg_print( INPUT_DBG_META, "%s", "Meta copied" ); dbg_print( INPUT_DBG_META, "%s", "Meta copied" );
} else } else
msg_Warn( p_access, "tried to copy NULL meta info" ); msg_Warn( p_access, "tried to copy NULL meta info" );
...@@ -1050,7 +1061,7 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1050,7 +1061,7 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
/* */ /* */
case ACCESS_GET_MTU: case ACCESS_GET_MTU:
pi_int = (int*)va_arg( args, int * ); pi_int = (int*)va_arg( args, int * );
*pi_int = (p_vcd->i_blocks_per_read * M2F2_SECTOR_SIZE); *pi_int = (p_vcdplayer->i_blocks_per_read * M2F2_SECTOR_SIZE);
dbg_print( INPUT_DBG_EVENT, "GET MTU: %d", *pi_int ); dbg_print( INPUT_DBG_EVENT, "GET MTU: %d", *pi_int );
break; break;
...@@ -1073,7 +1084,7 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1073,7 +1084,7 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
case ACCESS_GET_TITLE_INFO: case ACCESS_GET_TITLE_INFO:
{ {
unsigned int psz_mrl_max = strlen(VCD_MRL_PREFIX) unsigned int psz_mrl_max = strlen(VCD_MRL_PREFIX)
+ strlen(p_vcd->psz_source) + sizeof("@E999")+3; + strlen(p_vcdplayer->psz_source) + sizeof("@E999")+3;
input_title_t ***ppp_title input_title_t ***ppp_title
= (input_title_t***)va_arg( args, input_title_t*** ); = (input_title_t***)va_arg( args, input_title_t*** );
char *psz_mrl = malloc( psz_mrl_max ); char *psz_mrl = malloc( psz_mrl_max );
...@@ -1082,33 +1093,34 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1082,33 +1093,34 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
pi_int = (int*)va_arg( args, int* ); pi_int = (int*)va_arg( args, int* );
dbg_print( INPUT_DBG_EVENT, "GET TITLE: i_titles %d", dbg_print( INPUT_DBG_EVENT, "GET TITLE: i_titles %d",
p_vcd->i_titles ); p_vcdplayer->i_titles );
if( psz_mrl == NULL ) { if( psz_mrl == NULL ) {
msg_Warn( p_access, "out of memory" ); msg_Warn( p_access, "out of memory" );
} else { } else {
snprintf(psz_mrl, psz_mrl_max, "%s%s", snprintf(psz_mrl, psz_mrl_max, "%s%s",
VCD_MRL_PREFIX, p_vcd->psz_source); VCD_MRL_PREFIX, p_vcdplayer->psz_source);
VCDMetaInfo( p_access, psz_mrl ); VCDMetaInfo( p_access, psz_mrl );
free(psz_mrl); free(psz_mrl);
} }
/* Duplicate title info */ /* Duplicate title info */
if( p_vcd->i_titles == 0 ) if( p_vcdplayer->i_titles == 0 )
{ {
*pi_int = 0; ppp_title = NULL; *pi_int = 0; ppp_title = NULL;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
*pi_int = p_vcd->i_titles; *pi_int = p_vcdplayer->i_titles;
*ppp_title = malloc(sizeof( input_title_t **) * p_vcd->i_titles ); *ppp_title = malloc( sizeof( input_title_t **)
* p_vcdplayer->i_titles );
if (!*ppp_title) return VLC_ENOMEM; if (!*ppp_title) return VLC_ENOMEM;
for( i = 0; i < p_vcd->i_titles; i++ ) for( i = 0; i < p_vcdplayer->i_titles; i++ )
{ {
if ( p_vcd->p_title[i] ) if ( p_vcdplayer->p_title[i] )
(*ppp_title)[i] = (*ppp_title)[i] =
vlc_input_title_Duplicate( p_vcd->p_title[i] ); vlc_input_title_Duplicate( p_vcdplayer->p_title[i] );
} }
} }
break; break;
...@@ -1122,7 +1134,7 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1122,7 +1134,7 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
track_t i_track = i+1; track_t i_track = i+1;
unsigned int i_entry = unsigned int i_entry =
vcdinfo_track_get_entry( p_vcd->vcd, i_track); vcdinfo_track_get_entry( p_vcdplayer->vcd, i_track);
/* FIXME! For now we are assuming titles are only /* FIXME! For now we are assuming titles are only
tracks and that track == title+1 */ tracks and that track == title+1 */
...@@ -1130,14 +1142,14 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1130,14 +1142,14 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
itemid.type = VCDINFO_ITEM_TYPE_TRACK; itemid.type = VCDINFO_ITEM_TYPE_TRACK;
VCDSetOrigin(p_access, VCDSetOrigin(p_access,
vcdinfo_get_entry_lba(p_vcd->vcd, i_entry), vcdinfo_get_entry_lba(p_vcdplayer->vcd, i_entry),
i_track, &itemid ); i_track, &itemid );
} }
break; break;
case ACCESS_SET_SEEKPOINT: case ACCESS_SET_SEEKPOINT:
{ {
input_title_t *t = p_vcd->p_title[p_access->info.i_title]; input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
unsigned int i = (unsigned int)va_arg( args, unsigned int ); unsigned int i = (unsigned int)va_arg( args, unsigned int );
dbg_print( INPUT_DBG_EVENT, "set seekpoint %d", i ); dbg_print( INPUT_DBG_EVENT, "set seekpoint %d", i );
...@@ -1152,27 +1164,28 @@ static int VCDControl( access_t *p_access, int i_query, va_list args ) ...@@ -1152,27 +1164,28 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
We need to generalize all of this. We need to generalize all of this.
*/ */
if (i < p_vcd->i_entries) if (i < p_vcdplayer->i_entries)
{ {
p_vcd->play_item.num = i; p_vcdplayer->play_item.num = i;
p_vcd->play_item.type = VCDINFO_ITEM_TYPE_ENTRY; p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_ENTRY;
lsn = vcdinfo_get_entry_lba(p_vcd->vcd, i); lsn = vcdinfo_get_entry_lba(p_vcdplayer->vcd, i);
} else if ( i < p_vcd->i_entries + p_vcd->i_lids ) } else if ( i < p_vcdplayer->i_entries + p_vcdplayer->i_lids )
{ {
p_vcd->play_item.num = i = i - p_vcd->i_entries; p_vcdplayer->play_item.num = i
p_vcd->play_item.type = VCDINFO_ITEM_TYPE_LID; = i - p_vcdplayer->i_entries;
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_LID;
lsn = 0; lsn = 0;
} else } else
{ {
p_vcd->play_item.num = i = i - p_vcd->i_entries p_vcdplayer->play_item.num = i
- p_vcd->i_lids; = i - p_vcdplayer->i_entries - p_vcdplayer->i_lids;
p_vcd->play_item.type = VCDINFO_ITEM_TYPE_SEGMENT; p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_SEGMENT;
lsn = vcdinfo_get_seg_lsn(p_vcd->vcd, i); lsn = vcdinfo_get_seg_lsn(p_vcdplayer->vcd, i);
} }
VCDSetOrigin( p_access, VCDSetOrigin( p_access,
vcdinfo_get_entry_lba(p_vcd->vcd, i), vcdinfo_get_entry_lba(p_vcdplayer->vcd, i),
i_track, &(p_vcd->play_item) ); i_track, &(p_vcdplayer->play_item) );
} }
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
...@@ -40,10 +40,11 @@ static inline void ...@@ -40,10 +40,11 @@ static inline void
MetaInfoAddStr(access_t *p_access, char *psz_cat, MetaInfoAddStr(access_t *p_access, char *psz_cat,
char *title, const char *psz) char *title, const char *psz)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
if ( psz ) { if ( psz ) {
dbg_print( INPUT_DBG_META, "cat %s, field: %s: %s", psz_cat, title, psz); dbg_print( INPUT_DBG_META, "cat %s, field: %s: %s", psz_cat, title, psz);
input_Control( p_vcd->p_input, INPUT_ADD_INFO, psz_cat, title, "%s", psz); input_Control( p_vcdplayer->p_input, INPUT_ADD_INFO, psz_cat, title, "%s",
psz);
} }
} }
...@@ -51,17 +52,19 @@ MetaInfoAddStr(access_t *p_access, char *psz_cat, ...@@ -51,17 +52,19 @@ MetaInfoAddStr(access_t *p_access, char *psz_cat,
static inline void static inline void
MetaInfoAddNum(access_t *p_access, char *psz_cat, char *title, int num) MetaInfoAddNum(access_t *p_access, char *psz_cat, char *title, int num)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
dbg_print( INPUT_DBG_META, "cat %s, field %s: %d", psz_cat, title, num); dbg_print( INPUT_DBG_META, "cat %s, field %s: %d", psz_cat, title, num);
input_Control( p_vcd->p_input, INPUT_ADD_INFO, psz_cat, title, "%d", num ); input_Control( p_vcdplayer->p_input, INPUT_ADD_INFO, psz_cat, title,
"%d", num );
} }
static inline void static inline void
MetaInfoAddHex(access_t *p_access, char *psz_cat, char *title, int hex) MetaInfoAddHex(access_t *p_access, char *psz_cat, char *title, int hex)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
dbg_print( INPUT_DBG_META, "cat %s, field %s: %d", psz_cat, title, hex); dbg_print( INPUT_DBG_META, "cat %s, field %s: %d", psz_cat, title, hex);
input_Control( p_vcd->p_input, INPUT_ADD_INFO, psz_cat, title, "%x", hex ); input_Control( p_vcdplayer->p_input, INPUT_ADD_INFO, psz_cat, title,
"%x", hex );
} }
#define addstr(title, str) \ #define addstr(title, str) \
...@@ -76,47 +79,47 @@ MetaInfoAddHex(access_t *p_access, char *psz_cat, char *title, int hex) ...@@ -76,47 +79,47 @@ MetaInfoAddHex(access_t *p_access, char *psz_cat, char *title, int hex)
void void
VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl ) VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl )
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *) p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
unsigned int i_entries = vcdinfo_get_num_entries(p_vcd->vcd); unsigned int i_entries = vcdinfo_get_num_entries(p_vcdplayer->vcd);
unsigned int last_entry = 0; unsigned int last_entry = 0;
char *psz_cat; char *psz_cat;
track_t i_track; track_t i_track;
psz_cat = _("Disc"); psz_cat = _("Disc");
addstr( _("VCD Format"), vcdinfo_get_format_version_str(p_vcd->vcd) ); addstr( _("VCD Format"), vcdinfo_get_format_version_str(p_vcdplayer->vcd) );
addstr( _("Album"), vcdinfo_get_album_id(p_vcd->vcd)); addstr( _("Album"), vcdinfo_get_album_id(p_vcdplayer->vcd));
addstr( _("Application"), vcdinfo_get_application_id(p_vcd->vcd) ); addstr( _("Application"), vcdinfo_get_application_id(p_vcdplayer->vcd) );
addstr( _("Preparer"), vcdinfo_get_preparer_id(p_vcd->vcd) ); addstr( _("Preparer"), vcdinfo_get_preparer_id(p_vcdplayer->vcd) );
addnum( _("Vol #"), vcdinfo_get_volume_num(p_vcd->vcd) ); addnum( _("Vol #"), vcdinfo_get_volume_num(p_vcdplayer->vcd) );
addnum( _("Vol max #"), vcdinfo_get_volume_count(p_vcd->vcd) ); addnum( _("Vol max #"), vcdinfo_get_volume_count(p_vcdplayer->vcd) );
addstr( _("Volume Set"), vcdinfo_get_volumeset_id(p_vcd->vcd) ); addstr( _("Volume Set"), vcdinfo_get_volumeset_id(p_vcdplayer->vcd) );
addstr( _("Volume"), vcdinfo_get_volume_id(p_vcd->vcd) ); addstr( _("Volume"), vcdinfo_get_volume_id(p_vcdplayer->vcd) );
addstr( _("Publisher"), vcdinfo_get_publisher_id(p_vcd->vcd) ); addstr( _("Publisher"), vcdinfo_get_publisher_id(p_vcdplayer->vcd) );
addstr( _("System Id"), vcdinfo_get_system_id(p_vcd->vcd) ); addstr( _("System Id"), vcdinfo_get_system_id(p_vcdplayer->vcd) );
addnum( "LIDs", vcdinfo_get_num_LIDs(p_vcd->vcd) ); addnum( "LIDs", vcdinfo_get_num_LIDs(p_vcdplayer->vcd) );
addnum( _("Entries"), vcdinfo_get_num_entries(p_vcd->vcd) ); addnum( _("Entries"), vcdinfo_get_num_entries(p_vcdplayer->vcd) );
addnum( _("Segments"), vcdinfo_get_num_segments(p_vcd->vcd) ); addnum( _("Segments"), vcdinfo_get_num_segments(p_vcdplayer->vcd) );
addnum( _("Tracks"), vcdinfo_get_num_tracks(p_vcd->vcd) ); addnum( _("Tracks"), vcdinfo_get_num_tracks(p_vcdplayer->vcd) );
/* Spit out track information. Could also include MSF info. /* Spit out track information. Could also include MSF info.
Also build title table. Also build title table.
*/ */
#define TITLE_MAX 30 #define TITLE_MAX 30
for( i_track = 1 ; i_track < p_vcd->i_tracks ; i_track++ ) { for( i_track = 1 ; i_track < p_vcdplayer->i_tracks ; i_track++ ) {
unsigned int audio_type = vcdinfo_get_track_audio_type(p_vcd->vcd, unsigned int audio_type = vcdinfo_get_track_audio_type(p_vcdplayer->vcd,
i_track); i_track);
uint32_t i_secsize = vcdinfo_get_track_sect_count(p_vcd->vcd, i_track); uint32_t i_secsize = vcdinfo_get_track_sect_count(p_vcdplayer->vcd, i_track);
if (p_vcd->b_svd) { if (p_vcdplayer->b_svd) {
addnum(_("Audio Channels"), addnum(_("Audio Channels"),
vcdinfo_audio_type_num_channels(p_vcd->vcd, audio_type) ); vcdinfo_audio_type_num_channels(p_vcdplayer->vcd, audio_type) );
} }
addnum(_("First Entry Point"), last_entry ); addnum(_("First Entry Point"), last_entry );
for ( ; last_entry < i_entries for ( ; last_entry < i_entries
&& vcdinfo_get_track(p_vcd->vcd, last_entry) == i_track; && vcdinfo_get_track(p_vcdplayer->vcd, last_entry) == i_track;
last_entry++ ) ; last_entry++ ) ;
addnum(_("Last Entry Point"), last_entry-1 ); addnum(_("Last Entry Point"), last_entry-1 );
addnum(_("Track size (in sectors)"), i_secsize ); addnum(_("Track size (in sectors)"), i_secsize );
...@@ -124,11 +127,11 @@ VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl ) ...@@ -124,11 +127,11 @@ VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl )
{ {
lid_t i_lid; lid_t i_lid;
for( i_lid = 1 ; i_lid <= p_vcd->i_lids ; i_lid++ ) { for( i_lid = 1 ; i_lid <= p_vcdplayer->i_lids ; i_lid++ ) {
PsdListDescriptor_t pxd; PsdListDescriptor_t pxd;
char psz_cat[20]; char psz_cat[20];
snprintf(psz_cat, sizeof(psz_cat), "LID %d", i_lid); snprintf(psz_cat, sizeof(psz_cat), "LID %d", i_lid);
if (vcdinfo_lid_get_pxd(p_vcd->vcd, &pxd, i_lid)) { if (vcdinfo_lid_get_pxd(p_vcdplayer->vcd, &pxd, i_lid)) {
switch (pxd.descriptor_type) { switch (pxd.descriptor_type) {
case PSD_TYPE_END_LIST: case PSD_TYPE_END_LIST:
addstr(_("type"), _("end")); addstr(_("type"), _("end"));
...@@ -168,11 +171,11 @@ VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl ) ...@@ -168,11 +171,11 @@ VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl )
if ( CDIO_INVALID_TRACK != i_track ) if ( CDIO_INVALID_TRACK != i_track )
{ {
char *psz_name = char *psz_name =
VCDFormatStr( p_access, p_vcd, VCDFormatStr( p_access, p_vcdplayer,
config_GetPsz( p_access, MODULE_STRING "-title-format" ), config_GetPsz( p_access, MODULE_STRING "-title-format" ),
psz_mrl, &(p_vcd->play_item) ); psz_mrl, &(p_vcdplayer->play_item) );
input_Control( p_vcd->p_input, INPUT_SET_NAME, psz_name ); input_Control( p_vcdplayer->p_input, INPUT_SET_NAME, psz_name );
} }
} }
...@@ -228,7 +231,7 @@ VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl ) ...@@ -228,7 +231,7 @@ VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl )
%% : a % %% : a %
*/ */
char * char *
VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcdplayer,
const char format_str[], const char *mrl, const char format_str[], const char *mrl,
const vcdinfo_itemid_t *itemid) const vcdinfo_itemid_t *itemid)
{ {
...@@ -258,20 +261,20 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, ...@@ -258,20 +261,20 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd,
saw_control_prefix = !saw_control_prefix; saw_control_prefix = !saw_control_prefix;
break; break;
case 'A': case 'A':
add_format_str_info(vcdinfo_strip_trail(vcdinfo_get_album_id(p_vcd->vcd), add_format_str_info(vcdinfo_strip_trail(vcdinfo_get_album_id(p_vcdplayer->vcd),
MAX_ALBUM_LEN)); MAX_ALBUM_LEN));
break; break;
case 'c': case 'c':
add_format_num_info(vcdinfo_get_volume_num(p_vcd->vcd), "%d"); add_format_num_info(vcdinfo_get_volume_num(p_vcdplayer->vcd), "%d");
break; break;
case 'C': case 'C':
add_format_num_info(vcdinfo_get_volume_count(p_vcd->vcd), "%d"); add_format_num_info(vcdinfo_get_volume_count(p_vcdplayer->vcd), "%d");
break; break;
case 'F': case 'F':
add_format_str_info(vcdinfo_get_format_version_str(p_vcd->vcd)); add_format_str_info(vcdinfo_get_format_version_str(p_vcdplayer->vcd));
break; break;
case 'I': case 'I':
...@@ -306,9 +309,9 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, ...@@ -306,9 +309,9 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd,
break; break;
case 'L': case 'L':
if (vcdplayer_pbc_is_on(p_vcd)) { if (vcdplayer_pbc_is_on(p_vcdplayer)) {
char num_str[40]; char num_str[40];
sprintf(num_str, "%s %d", _("List ID"), p_vcd->i_lid); sprintf(num_str, "%s %d", _("List ID"), p_vcdplayer->i_lid);
strncat(tp, num_str, TEMP_STR_LEN-(tp-temp_str)); strncat(tp, num_str, TEMP_STR_LEN-(tp-temp_str));
tp += strlen(num_str); tp += strlen(num_str);
} }
...@@ -324,11 +327,11 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, ...@@ -324,11 +327,11 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd,
break; break;
case 'p': case 'p':
add_format_str_info(vcdinfo_get_preparer_id(p_vcd->vcd)); add_format_str_info(vcdinfo_get_preparer_id(p_vcdplayer->vcd));
break; break;
case 'P': case 'P':
add_format_str_info(vcdinfo_get_publisher_id(p_vcd->vcd)); add_format_str_info(vcdinfo_get_publisher_id(p_vcdplayer->vcd));
break; break;
case 'S': case 'S':
...@@ -336,7 +339,7 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, ...@@ -336,7 +339,7 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd,
char seg_type_str[10]; char seg_type_str[10];
sprintf(seg_type_str, " %s", sprintf(seg_type_str, " %s",
vcdinfo_video_type2str(p_vcd->vcd, itemid->num)); vcdinfo_video_type2str(p_vcdplayer->vcd, itemid->num));
strncat(tp, seg_type_str, TEMP_STR_LEN-(tp-temp_str)); strncat(tp, seg_type_str, TEMP_STR_LEN-(tp-temp_str));
tp += strlen(seg_type_str); tp += strlen(seg_type_str);
} }
...@@ -344,15 +347,15 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, ...@@ -344,15 +347,15 @@ VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd,
break; break;
case 'T': case 'T':
add_format_num_info(p_vcd->i_track, "%d"); add_format_num_info(p_vcdplayer->i_track, "%d");
break; break;
case 'V': case 'V':
add_format_str_info(vcdinfo_get_volumeset_id(p_vcd->vcd)); add_format_str_info(vcdinfo_get_volumeset_id(p_vcdplayer->vcd));
break; break;
case 'v': case 'v':
add_format_str_info(vcdinfo_get_volume_id(p_vcd->vcd)); add_format_str_info(vcdinfo_get_volume_id(p_vcdplayer->vcd));
break; break;
default: default:
...@@ -368,22 +371,22 @@ void ...@@ -368,22 +371,22 @@ void
VCDUpdateTitle( access_t *p_access ) VCDUpdateTitle( access_t *p_access )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
unsigned int psz_mrl_max = strlen(VCD_MRL_PREFIX) unsigned int psz_mrl_max = strlen(VCD_MRL_PREFIX)
+ strlen(p_vcd->psz_source) + sizeof("@E999")+3; + strlen(p_vcdplayer->psz_source) + sizeof("@E999")+3;
char *psz_mrl = malloc( psz_mrl_max ); char *psz_mrl = malloc( psz_mrl_max );
if( psz_mrl ) if( psz_mrl )
{ {
char *psz_name; char *psz_name;
snprintf(psz_mrl, psz_mrl_max, "%s%s", snprintf(psz_mrl, psz_mrl_max, "%s%s",
VCD_MRL_PREFIX, p_vcd->psz_source); VCD_MRL_PREFIX, p_vcdplayer->psz_source);
psz_name = VCDFormatStr( p_access, p_vcd, psz_name = VCDFormatStr( p_access, p_vcdplayer,
config_GetPsz( p_access, MODULE_STRING config_GetPsz( p_access, MODULE_STRING
"-title-format" ), "-title-format" ),
psz_mrl, &(p_vcd->play_item) ); psz_mrl, &(p_vcdplayer->play_item) );
input_Control( p_vcd->p_input, INPUT_SET_NAME, psz_name ); input_Control( p_vcdplayer->p_input, INPUT_SET_NAME, psz_name );
free(psz_mrl); free(psz_mrl);
} }
} }
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
void VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl ); void VCDMetaInfo( access_t *p_access, /*const*/ char *psz_mrl );
char * VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcd, char * VCDFormatStr(const access_t *p_access, vcdplayer_t *p_vcdplayer,
const char format_str[], const char *mrl, const char format_str[], const char *mrl,
const vcdinfo_itemid_t *itemid); const vcdinfo_itemid_t *itemid);
......
...@@ -93,7 +93,7 @@ RunIntf( intf_thread_t *p_intf ) ...@@ -93,7 +93,7 @@ RunIntf( intf_thread_t *p_intf )
vlc_object_t * p_vout = NULL; vlc_object_t * p_vout = NULL;
mtime_t mtime = 0; mtime_t mtime = 0;
mtime_t mlast = 0; mtime_t mlast = 0;
vcdplayer_t * p_vcd; vcdplayer_t * p_vcdplayer;
input_thread_t * p_input; input_thread_t * p_input;
access_t * p_access; access_t * p_access;
...@@ -109,13 +109,13 @@ RunIntf( intf_thread_t *p_intf ) ...@@ -109,13 +109,13 @@ RunIntf( intf_thread_t *p_intf )
p_input = p_intf->p_sys->p_input; p_input = p_intf->p_sys->p_input;
while ( !p_intf->p_sys->p_vcd ) while ( !p_intf->p_sys->p_vcdplayer )
{ {
msleep( INTF_IDLE_SLEEP ); msleep( INTF_IDLE_SLEEP );
} }
p_vcd = p_intf->p_sys->p_vcd; p_vcdplayer = p_intf->p_sys->p_vcdplayer;
p_access = p_vcd->p_access; p_access = p_vcdplayer->p_access;
dbg_print( INPUT_DBG_CALL, "intf initialized" ); dbg_print( INPUT_DBG_CALL, "intf initialized" );
...@@ -210,13 +210,14 @@ RunIntf( intf_thread_t *p_intf ) ...@@ -210,13 +210,14 @@ RunIntf( intf_thread_t *p_intf )
case ACTIONID_NAV_ACTIVATE: case ACTIONID_NAV_ACTIVATE:
{ {
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
itemid.type=p_vcd->play_item.type; itemid.type=p_vcdplayer->play_item.type;
dbg_print( INPUT_DBG_EVENT, "ACTIONID_NAV_ACTIVATE" ); dbg_print( INPUT_DBG_EVENT, "ACTIONID_NAV_ACTIVATE" );
if ( vcdplayer_pbc_is_on( p_vcd ) && number_addend != 0 ) { if ( vcdplayer_pbc_is_on( p_vcdplayer )
lid_t next_num=vcdinfo_selection_get_lid(p_vcd->vcd, && number_addend != 0 ) {
p_vcd->i_lid, lid_t next_num=vcdinfo_selection_get_lid(p_vcdplayer->vcd,
p_vcdplayer->i_lid,
number_addend); number_addend);
if (VCDINFO_INVALID_LID != next_num) { if (VCDINFO_INVALID_LID != next_num) {
itemid.num = next_num; itemid.num = next_num;
...@@ -327,7 +328,7 @@ static int InitThread( intf_thread_t * p_intf ) ...@@ -327,7 +328,7 @@ static int InitThread( intf_thread_t * p_intf )
vlc_mutex_lock( &p_intf->change_lock ); vlc_mutex_lock( &p_intf->change_lock );
p_intf->p_sys->p_input = p_input; p_intf->p_sys->p_input = p_input;
p_intf->p_sys->p_vcd = NULL; p_intf->p_sys->p_vcdplayer = NULL;
p_intf->p_sys->b_move = VLC_FALSE; p_intf->p_sys->b_move = VLC_FALSE;
p_intf->p_sys->b_click = VLC_FALSE; p_intf->p_sys->b_click = VLC_FALSE;
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
struct intf_sys_t struct intf_sys_t
{ {
input_thread_t *p_input; input_thread_t *p_input;
vcdplayer_t *p_vcd; vcdplayer_t *p_vcdplayer;
vlc_bool_t b_still; /* True if we are in a still frame */ vlc_bool_t b_still; /* True if we are in a still frame */
vlc_bool_t b_infinite_still; /* True if still wait time is infinite */ vlc_bool_t b_infinite_still; /* True if still wait time is infinite */
......
...@@ -54,9 +54,9 @@ extern void VCDSetOrigin ( access_t *p_access, lsn_t i_lsn, track_t i_track, ...@@ -54,9 +54,9 @@ extern void VCDSetOrigin ( access_t *p_access, lsn_t i_lsn, track_t i_track,
Return true if playback control (PBC) is on Return true if playback control (PBC) is on
*/ */
bool bool
vcdplayer_pbc_is_on( const vcdplayer_t *p_vcd ) vcdplayer_pbc_is_on( const vcdplayer_t *p_vcdplayer )
{ {
return VCDINFO_INVALID_ENTRY != p_vcd->i_lid; return VCDINFO_INVALID_ENTRY != p_vcdplayer->i_lid;
} }
/* Given an itemid, return the size for the object (via information /* Given an itemid, return the size for the object (via information
...@@ -64,17 +64,17 @@ vcdplayer_pbc_is_on( const vcdplayer_t *p_vcd ) ...@@ -64,17 +64,17 @@ vcdplayer_pbc_is_on( const vcdplayer_t *p_vcd )
static size_t static size_t
vcdplayer_get_item_size(access_t * p_access, vcdinfo_itemid_t itemid) vcdplayer_get_item_size(access_t * p_access, vcdinfo_itemid_t itemid)
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
switch (itemid.type) { switch (itemid.type) {
case VCDINFO_ITEM_TYPE_ENTRY: case VCDINFO_ITEM_TYPE_ENTRY:
return p_vcd->entry[itemid.num].size; return p_vcdplayer->entry[itemid.num].size;
break; break;
case VCDINFO_ITEM_TYPE_SEGMENT: case VCDINFO_ITEM_TYPE_SEGMENT:
return p_vcd->segment[itemid.num].size; return p_vcdplayer->segment[itemid.num].size;
break; break;
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
return p_vcd->track[itemid.num-1].size; return p_vcdplayer->track[itemid.num-1].size;
break; break;
case VCDINFO_ITEM_TYPE_LID: case VCDINFO_ITEM_TYPE_LID:
/* Play list number (LID) */ /* Play list number (LID) */
...@@ -92,12 +92,12 @@ static void ...@@ -92,12 +92,12 @@ static void
vcdplayer_update_entry( access_t * p_access, uint16_t ofs, vcdplayer_update_entry( access_t * p_access, uint16_t ofs,
uint16_t *entry, const char *label) uint16_t *entry, const char *label)
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
if ( ofs == VCDINFO_INVALID_OFFSET ) { if ( ofs == VCDINFO_INVALID_OFFSET ) {
*entry = VCDINFO_INVALID_ENTRY; *entry = VCDINFO_INVALID_ENTRY;
} else { } else {
vcdinfo_offset_t *off = vcdinfo_get_offset_t(p_vcd->vcd, ofs); vcdinfo_offset_t *off = vcdinfo_get_offset_t(p_vcdplayer->vcd, ofs);
if (off != NULL) { if (off != NULL) {
*entry = off->lid; *entry = off->lid;
dbg_print(INPUT_DBG_PBC, "%s: LID %d", label, off->lid); dbg_print(INPUT_DBG_PBC, "%s: LID %d", label, off->lid);
...@@ -116,10 +116,10 @@ vcdplayer_update_entry( access_t * p_access, uint16_t ofs, ...@@ -116,10 +116,10 @@ vcdplayer_update_entry( access_t * p_access, uint16_t ofs,
vcdplayer_read_status_t vcdplayer_read_status_t
vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
/* Not in playback control. Do we advance automatically or stop? */ /* Not in playback control. Do we advance automatically or stop? */
switch (p_vcd->play_item.type) { switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
case VCDINFO_ITEM_TYPE_ENTRY: { case VCDINFO_ITEM_TYPE_ENTRY: {
if ( ! vcdplayer_play_next( p_access ) ) if ( ! vcdplayer_play_next( p_access ) )
...@@ -131,7 +131,7 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) ...@@ -131,7 +131,7 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time )
case VCDINFO_ITEM_TYPE_SPAREID2: case VCDINFO_ITEM_TYPE_SPAREID2:
dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN),
"SPAREID2" ); "SPAREID2" );
if (p_vcd->in_still) if (p_vcdplayer->in_still)
{ {
dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN),
"End of still spareid2" ); "End of still spareid2" );
...@@ -148,7 +148,7 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) ...@@ -148,7 +148,7 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time )
case VCDINFO_ITEM_TYPE_SEGMENT: case VCDINFO_ITEM_TYPE_SEGMENT:
/* Hack: Just go back and do still again */ /* Hack: Just go back and do still again */
/* FIXME */ /* FIXME */
if (p_vcd->in_still) if (p_vcdplayer->in_still)
{ {
dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN),
"End of still Segment" ); "End of still Segment" );
...@@ -166,21 +166,21 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) ...@@ -166,21 +166,21 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time )
static void static void
_vcdplayer_set_track(access_t * p_access, track_t i_track) _vcdplayer_set_track(access_t * p_access, track_t i_track)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
if (i_track < 1 || i_track > p_vcd->i_tracks) if (i_track < 1 || i_track > p_vcdplayer->i_tracks)
return; return;
else { else {
vcdinfo_obj_t *p_obj = p_vcd->vcd; vcdinfo_obj_t *p_obj = p_vcdplayer->vcd;
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
itemid.num = i_track; itemid.num = i_track;
itemid.type = VCDINFO_ITEM_TYPE_TRACK; itemid.type = VCDINFO_ITEM_TYPE_TRACK;
p_vcd->in_still = 0; p_vcdplayer->in_still = 0;
VCDSetOrigin(p_access, vcdinfo_get_track_lsn(p_obj, i_track), VCDSetOrigin(p_access, vcdinfo_get_track_lsn(p_obj, i_track),
i_track, &itemid); i_track, &itemid);
dbg_print(INPUT_DBG_LSN, "LSN: %u", p_vcd->i_lsn); dbg_print(INPUT_DBG_LSN, "LSN: %u", p_vcdplayer->i_lsn);
} }
} }
...@@ -190,9 +190,9 @@ _vcdplayer_set_track(access_t * p_access, track_t i_track) ...@@ -190,9 +190,9 @@ _vcdplayer_set_track(access_t * p_access, track_t i_track)
static void static void
_vcdplayer_set_entry(access_t * p_access, unsigned int num) _vcdplayer_set_entry(access_t * p_access, unsigned int num)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
vcdinfo_obj_t *p_obj = p_vcd->vcd; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd;
unsigned int num_entries = vcdinfo_get_num_entries(p_obj); unsigned int num_entries = vcdinfo_get_num_entries(p_vcdinfo);
if (num >= num_entries) { if (num >= num_entries) {
LOG_ERR("%s %d", _("bad entry number"), num); LOG_ERR("%s %d", _("bad entry number"), num);
...@@ -202,13 +202,13 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num) ...@@ -202,13 +202,13 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num)
itemid.num = num; itemid.num = num;
itemid.type = VCDINFO_ITEM_TYPE_ENTRY; itemid.type = VCDINFO_ITEM_TYPE_ENTRY;
p_vcd->in_still = 0; p_vcdplayer->in_still = 0;
VCDSetOrigin(p_access, vcdinfo_get_entry_lba(p_obj, num), VCDSetOrigin(p_access, vcdinfo_get_entry_lba(p_vcdinfo, num),
vcdinfo_get_track(p_obj, num), &itemid); vcdinfo_get_track(p_vcdinfo, num), &itemid);
dbg_print(INPUT_DBG_LSN, "LSN: %u, track_end LSN: %u", dbg_print(INPUT_DBG_LSN, "LSN: %u, track_end LSN: %u",
p_vcd->i_lsn, p_vcd->track_end_lsn); p_vcdplayer->i_lsn, p_vcdplayer->track_end_lsn);
} }
} }
...@@ -218,17 +218,17 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num) ...@@ -218,17 +218,17 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num)
static void static void
_vcdplayer_set_segment(access_t * p_access, unsigned int num) _vcdplayer_set_segment(access_t * p_access, unsigned int num)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
vcdinfo_obj_t *p_obj = p_vcd->vcd; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd;
segnum_t num_segs = vcdinfo_get_num_segments(p_obj); segnum_t i_segs = vcdinfo_get_num_segments(p_vcdinfo);
if (num >= num_segs) { if (num >= i_segs) {
LOG_ERR("%s %d", _("bad segment number"), num); LOG_ERR("%s %d", _("bad segment number"), num);
return; return;
} else { } else {
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
if (VCDINFO_NULL_LSN==p_vcd->i_lsn) { if (VCDINFO_NULL_LSN==p_vcdplayer->i_lsn) {
LOG_ERR("%s %d", LOG_ERR("%s %d",
_("Error in getting current segment number"), num); _("Error in getting current segment number"), num);
return; return;
...@@ -237,9 +237,9 @@ _vcdplayer_set_segment(access_t * p_access, unsigned int num) ...@@ -237,9 +237,9 @@ _vcdplayer_set_segment(access_t * p_access, unsigned int num)
itemid.num = num; itemid.num = num;
itemid.type = VCDINFO_ITEM_TYPE_SEGMENT; itemid.type = VCDINFO_ITEM_TYPE_SEGMENT;
VCDSetOrigin(p_access, vcdinfo_get_seg_lsn(p_obj, num), 0, &itemid); VCDSetOrigin(p_access, vcdinfo_get_seg_lsn(p_vcdinfo, num), 0, &itemid);
dbg_print(INPUT_DBG_LSN, "LSN: %u", p_vcd->i_lsn); dbg_print(INPUT_DBG_LSN, "LSN: %u", p_vcdplayer->i_lsn);
} }
} }
...@@ -248,26 +248,26 @@ _vcdplayer_set_segment(access_t * p_access, unsigned int num) ...@@ -248,26 +248,26 @@ _vcdplayer_set_segment(access_t * p_access, unsigned int num)
static bool static bool
vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
vcdinfo_obj_t *p_obj = p_vcd->vcd; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd;
dbg_print(INPUT_DBG_CALL, "called itemid.num: %d, itemid.type: %d", dbg_print(INPUT_DBG_CALL, "called itemid.num: %d, itemid.type: %d",
itemid.num, itemid.type); itemid.num, itemid.type);
p_vcd->in_still = 0; p_vcdplayer->in_still = 0;
switch (itemid.type) { switch (itemid.type) {
case VCDINFO_ITEM_TYPE_SEGMENT: case VCDINFO_ITEM_TYPE_SEGMENT:
{ {
vcdinfo_video_segment_type_t segtype vcdinfo_video_segment_type_t segtype
= vcdinfo_get_video_type(p_obj, itemid.num); = vcdinfo_get_video_type(p_vcdinfo, itemid.num);
segnum_t num_segs = vcdinfo_get_num_segments(p_obj); segnum_t i_segs = vcdinfo_get_num_segments(p_vcdinfo);
dbg_print(INPUT_DBG_PBC, "%s (%d), itemid.num: %d", dbg_print(INPUT_DBG_PBC, "%s (%d), itemid.num: %d",
vcdinfo_video_type2str(p_obj, itemid.num), vcdinfo_video_type2str(p_vcdinfo, itemid.num),
(int) segtype, itemid.num); (int) segtype, itemid.num);
if (itemid.num >= num_segs) return false; if (itemid.num >= i_segs) return false;
_vcdplayer_set_segment(p_access, itemid.num); _vcdplayer_set_segment(p_access, itemid.num);
switch (segtype) switch (segtype)
...@@ -276,10 +276,10 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) ...@@ -276,10 +276,10 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
case VCDINFO_FILES_VIDEO_NTSC_STILL2: case VCDINFO_FILES_VIDEO_NTSC_STILL2:
case VCDINFO_FILES_VIDEO_PAL_STILL: case VCDINFO_FILES_VIDEO_PAL_STILL:
case VCDINFO_FILES_VIDEO_PAL_STILL2: case VCDINFO_FILES_VIDEO_PAL_STILL2:
p_vcd->in_still = -5; p_vcdplayer->in_still = -5;
break; break;
default: default:
p_vcd->in_still = 0; p_vcdplayer->in_still = 0;
} }
break; break;
...@@ -287,13 +287,13 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) ...@@ -287,13 +287,13 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
dbg_print(INPUT_DBG_PBC, "track %d", itemid.num); dbg_print(INPUT_DBG_PBC, "track %d", itemid.num);
if (itemid.num < 1 || itemid.num > p_vcd->i_tracks) return false; if (itemid.num < 1 || itemid.num > p_vcdplayer->i_tracks) return false;
_vcdplayer_set_track(p_access, itemid.num); _vcdplayer_set_track(p_access, itemid.num);
break; break;
case VCDINFO_ITEM_TYPE_ENTRY: case VCDINFO_ITEM_TYPE_ENTRY:
{ {
unsigned int num_entries = vcdinfo_get_num_entries(p_obj); unsigned int num_entries = vcdinfo_get_num_entries(p_vcdinfo);
dbg_print(INPUT_DBG_PBC, "entry %d", itemid.num); dbg_print(INPUT_DBG_PBC, "entry %d", itemid.num);
if (itemid.num >= num_entries) return false; if (itemid.num >= num_entries) return false;
_vcdplayer_set_entry(p_access, itemid.num); _vcdplayer_set_entry(p_access, itemid.num);
...@@ -301,13 +301,13 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) ...@@ -301,13 +301,13 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
} }
case VCDINFO_ITEM_TYPE_LID: case VCDINFO_ITEM_TYPE_LID:
LOG_ERR("%s", _("Should have converted p_vcd above")); LOG_ERR("%s", _("Should have converted p_vcdplayer above"));
return false; return false;
break; break;
case VCDINFO_ITEM_TYPE_NOTFOUND: case VCDINFO_ITEM_TYPE_NOTFOUND:
dbg_print(INPUT_DBG_PBC, "play nothing"); dbg_print(INPUT_DBG_PBC, "play nothing");
p_vcd->i_lsn = p_vcd->end_lsn; p_vcdplayer->i_lsn = p_vcdplayer->end_lsn;
return false; return false;
default: default:
...@@ -315,19 +315,19 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) ...@@ -315,19 +315,19 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
return false; return false;
} }
p_vcd->play_item = itemid; p_vcdplayer->play_item = itemid;
/* Some players like xine, have a fifo queue of audio and video buffers /* Some players like xine, have a fifo queue of audio and video buffers
that need to be flushed when playing a new selection. */ that need to be flushed when playing a new selection. */
/* if (p_vcd->flush_buffers) /* if (p_vcdplayer->flush_buffers)
p_vcd->flush_buffers(); */ p_vcdplayer->flush_buffers(); */
return true; return true;
} }
/* /*
Set's start origin and size for subsequent seeks. Set's start origin and size for subsequent seeks.
input: p_vcd->i_lsn, p_vcd->play_item input: p_vcdplayer->i_lsn, p_vcdplayer->play_item
changed: p_vcd->origin_lsn, p_vcd->end_lsn changed: p_vcdplayer->origin_lsn, p_vcdplayer->end_lsn
*/ */
/* FIXME: add parameters lsn, i_track, p_itemid and set accordingly. */ /* FIXME: add parameters lsn, i_track, p_itemid and set accordingly. */
...@@ -335,59 +335,60 @@ void ...@@ -335,59 +335,60 @@ void
vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track, vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
const vcdinfo_itemid_t *p_itemid) const vcdinfo_itemid_t *p_itemid)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
const size_t i_size= vcdplayer_get_item_size(p_access, *p_itemid); const size_t i_size= vcdplayer_get_item_size(p_access, *p_itemid);
p_vcd->play_item.num = p_itemid->num; p_vcdplayer->play_item.num = p_itemid->num;
p_vcd->play_item.type = p_itemid->type; p_vcdplayer->play_item.type = p_itemid->type;
p_vcd->i_lsn = i_lsn; p_vcdplayer->i_lsn = i_lsn;
p_vcd->end_lsn = p_vcd->i_lsn + i_size; p_vcdplayer->end_lsn = p_vcdplayer->i_lsn + i_size;
p_vcd->origin_lsn = p_vcd->i_lsn; p_vcdplayer->origin_lsn = p_vcdplayer->i_lsn;
p_vcd->i_track = i_track; p_vcdplayer->i_track = i_track;
p_vcd->track_lsn = vcdinfo_get_track_lba(p_vcd->vcd, i_track); p_vcdplayer->track_lsn = vcdinfo_get_track_lba(p_vcdplayer->vcd, i_track);
dbg_print((INPUT_DBG_CALL|INPUT_DBG_LSN), dbg_print((INPUT_DBG_CALL|INPUT_DBG_LSN),
"lsn %u, end LSN: %u item.num %d, item.type %d", "lsn %u, end LSN: %u item.num %d, item.type %d",
p_vcd->i_lsn, p_vcd->end_lsn, p_vcdplayer->i_lsn, p_vcdplayer->end_lsn,
p_vcd->play_item.num, p_vcd->play_item.type); p_vcdplayer->play_item.num, p_vcdplayer->play_item.type);
} }
/* /*!
Get the next play-item in the list given in the LIDs. Note play-item Get the next play-item in the list given in the LIDs. Note play-item
here refers to list of play-items for a single LID It shouldn't be here refers to list of play-items for a single LID It shouldn't be
confused with a user's list of favorite things to play or the confused with a user's list of favorite things to play or the
"next" field of a LID which moves us to a different LID. "next" field of a LID which moves us to a different LID.
*/ */
static bool static bool
_vcdplayer_inc_play_item(access_t *p_access) vcdplayer_inc_play_item(access_t *p_access)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys;
vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
int noi; int noi;
dbg_print(INPUT_DBG_CALL, "called pli: %d", p_vcd->pdi); dbg_print(INPUT_DBG_CALL, "called pli: %d", p_vcdplayer->pdi);
if ( NULL == p_vcd || NULL == p_vcd->pxd.pld ) return false; if ( NULL == p_vcdplayer || NULL == p_vcdplayer->pxd.pld ) return false;
noi = vcdinf_pld_get_noi(p_vcd->pxd.pld); noi = vcdinf_pld_get_noi(p_vcdplayer->pxd.pld);
if ( noi <= 0 ) return false; if ( noi <= 0 ) return false;
/* Handle delays like autowait or wait here? */ /* Handle delays like autowait or wait here? */
p_vcd->pdi++; p_vcdplayer->pdi++;
if ( p_vcd->pdi < 0 || p_vcd->pdi >= noi ) return false; if ( p_vcdplayer->pdi < 0 || p_vcdplayer->pdi >= noi ) return false;
else { else {
uint16_t trans_itemid_num=vcdinf_pld_get_play_item(p_vcd->pxd.pld, uint16_t trans_itemid_num=vcdinf_pld_get_play_item(p_vcdplayer->pxd.pld,
p_vcd->pdi); p_vcdplayer->pdi);
vcdinfo_itemid_t trans_itemid; vcdinfo_itemid_t trans_itemid;
if (VCDINFO_INVALID_ITEMID == trans_itemid_num) return false; if (VCDINFO_INVALID_ITEMID == trans_itemid_num) return false;
vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid); vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid);
dbg_print(INPUT_DBG_PBC, " play-item[%d]: %s", dbg_print(INPUT_DBG_PBC, " play-item[%d]: %s",
p_vcd->pdi, vcdinfo_pin2str (trans_itemid_num)); p_vcdplayer->pdi, vcdinfo_pin2str (trans_itemid_num));
return vcdplayer_play_single_item(p_access, trans_itemid); return vcdplayer_play_single_item(p_access, trans_itemid);
} }
} }
...@@ -395,43 +396,43 @@ _vcdplayer_inc_play_item(access_t *p_access) ...@@ -395,43 +396,43 @@ _vcdplayer_inc_play_item(access_t *p_access)
void void
vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid) vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid)
{ {
vcdplayer_t *p_vcd = (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
dbg_print(INPUT_DBG_CALL, "called itemid.num: %d itemid.type: %d", dbg_print(INPUT_DBG_CALL, "called itemid.num: %d itemid.type: %d",
itemid.num, itemid.type); itemid.num, itemid.type);
if (!vcdplayer_pbc_is_on(p_vcd)) { if (!vcdplayer_pbc_is_on(p_vcdplayer)) {
vcdplayer_play_single_item(p_access, itemid); vcdplayer_play_single_item(p_access, itemid);
} else { } else {
/* PBC on - Itemid.num is LID. */ /* PBC on - Itemid.num is LID. */
vcdinfo_obj_t *obj = p_vcd->vcd; vcdinfo_obj_t *obj = p_vcdplayer->vcd;
if (obj == NULL) return; if (obj == NULL) return;
p_vcd->i_lid = itemid.num; p_vcdplayer->i_lid = itemid.num;
vcdinfo_lid_get_pxd(obj, &(p_vcd->pxd), itemid.num); vcdinfo_lid_get_pxd(obj, &(p_vcdplayer->pxd), itemid.num);
switch (p_vcd->pxd.descriptor_type) { switch (p_vcdplayer->pxd.descriptor_type) {
case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_SELECTION_LIST:
case PSD_TYPE_EXT_SELECTION_LIST: { case PSD_TYPE_EXT_SELECTION_LIST: {
vcdinfo_itemid_t trans_itemid; vcdinfo_itemid_t trans_itemid;
uint16_t trans_itemid_num; uint16_t trans_itemid_num;
if (p_vcd->pxd.psd == NULL) return; if (p_vcdplayer->pxd.psd == NULL) return;
trans_itemid_num = vcdinf_psd_get_itemid(p_vcd->pxd.psd); trans_itemid_num = vcdinf_psd_get_itemid(p_vcdplayer->pxd.psd);
vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid); vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid);
p_vcd->loop_count = 1; p_vcdplayer->i_loop = 1;
p_vcd->loop_item = trans_itemid; p_vcdplayer->loop_item = trans_itemid;
vcdplayer_play_single_item(p_access, trans_itemid); vcdplayer_play_single_item(p_access, trans_itemid);
break; break;
} }
case PSD_TYPE_PLAY_LIST: { case PSD_TYPE_PLAY_LIST: {
if (p_vcd->pxd.pld == NULL) return; if (p_vcdplayer->pxd.pld == NULL) return;
p_vcd->pdi = -1; p_vcdplayer->pdi = -1;
_vcdplayer_inc_play_item(p_access); vcdplayer_inc_play_item(p_access);
break; break;
} }
...@@ -448,7 +449,7 @@ vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid) ...@@ -448,7 +449,7 @@ vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid)
vcdplayer_read_status_t vcdplayer_read_status_t
vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
/* We are in playback control. */ /* We are in playback control. */
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
...@@ -456,18 +457,18 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -456,18 +457,18 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
/* The end of an entry is really the end of the associated /* The end of an entry is really the end of the associated
sequence (or track). */ sequence (or track). */
if ( (VCDINFO_ITEM_TYPE_ENTRY == p_vcd->play_item.type) && if ( (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) &&
(p_vcd->i_lsn < p_vcd->end_lsn) ) { (p_vcdplayer->i_lsn < p_vcdplayer->end_lsn) ) {
/* Set up to just continue to the next entry */ /* Set up to just continue to the next entry */
p_vcd->play_item.num++; p_vcdplayer->play_item.num++;
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC),
"continuing into next entry: %u", p_vcd->play_item.num); "continuing into next entry: %u", p_vcdplayer->play_item.num);
vcdplayer_play( p_access, p_vcd->play_item ); vcdplayer_play_single_item( p_access, p_vcdplayer->play_item );
/* p_vcd->update_title(); */ /* p_vcdplayer->update_title(); */
return READ_BLOCK; return READ_BLOCK;
} }
switch (p_vcd->pxd.descriptor_type) { switch (p_vcdplayer->pxd.descriptor_type) {
case PSD_TYPE_END_LIST: case PSD_TYPE_END_LIST:
return READ_END; return READ_END;
break; break;
...@@ -476,8 +477,8 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -476,8 +477,8 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
return READ_BLOCK; return READ_BLOCK;
/* Set up for caller process wait time given. */ /* Set up for caller process wait time given. */
if (p_vcd->in_still) { if (p_vcdplayer->in_still) {
*wait_time = vcdinf_get_wait_time(p_vcd->pxd.pld); *wait_time = vcdinf_get_wait_time(p_vcdplayer->pxd.pld);
dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL), dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL),
"playlist wait time: %d", *wait_time); "playlist wait time: %d", *wait_time);
return READ_STILL_FRAME; return READ_STILL_FRAME;
...@@ -485,7 +486,7 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -485,7 +486,7 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
/* Wait time has been processed; continue with next entry. */ /* Wait time has been processed; continue with next entry. */
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_pld_get_next_offset(p_vcd->pxd.pld), vcdinf_pld_get_next_offset(p_vcdplayer->pxd.pld),
&itemid.num, "next" ); &itemid.num, "next" );
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
...@@ -494,17 +495,17 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -494,17 +495,17 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
case PSD_TYPE_SELECTION_LIST: /* Selection List (+Ext. for SVCD) */ case PSD_TYPE_SELECTION_LIST: /* Selection List (+Ext. for SVCD) */
case PSD_TYPE_EXT_SELECTION_LIST: /* Extended Selection List (VCD2.0) */ case PSD_TYPE_EXT_SELECTION_LIST: /* Extended Selection List (VCD2.0) */
{ {
uint16_t timeout_offs = vcdinf_get_timeout_offset(p_vcd->pxd.psd); uint16_t timeout_offs = vcdinf_get_timeout_offset(p_vcdplayer->pxd.psd);
uint16_t max_loop = vcdinf_get_loop_count(p_vcd->pxd.psd); uint16_t max_loop = vcdinf_get_loop_count(p_vcdplayer->pxd.psd);
vcdinfo_offset_t *offset_timeout_LID = vcdinfo_offset_t *offset_timeout_LID =
vcdinfo_get_offset_t(p_vcd->vcd, timeout_offs); vcdinfo_get_offset_t(p_vcdplayer->vcd, timeout_offs);
dbg_print(INPUT_DBG_PBC, "looped: %d, max_loop %d", dbg_print(INPUT_DBG_PBC, "looped: %d, max_loop %d",
p_vcd->loop_count, max_loop); p_vcdplayer->i_loop, max_loop);
/* Set up for caller process wait time given. */ /* Set up for caller process wait time given. */
if (p_vcd->in_still) { if (p_vcdplayer->in_still) {
*wait_time = vcdinf_get_timeout_time(p_vcd->pxd.psd); *wait_time = vcdinf_get_timeout_time(p_vcdplayer->pxd.psd);
dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL), dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL),
"playlist wait_time: %d", *wait_time); "playlist wait_time: %d", *wait_time);
return READ_STILL_FRAME; return READ_STILL_FRAME;
...@@ -512,11 +513,11 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -512,11 +513,11 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
/* Wait time has been processed; continue with next entry. */ /* Wait time has been processed; continue with next entry. */
/* Handle any looping given. */ /* Handle any looping given. */
if ( max_loop == 0 || p_vcd->loop_count < max_loop ) { if ( max_loop == 0 || p_vcdplayer->i_loop < max_loop ) {
p_vcd->loop_count++; p_vcdplayer->i_loop++;
if (p_vcd->loop_count == 0x7f) p_vcd->loop_count = 0; if (p_vcdplayer->i_loop == 0x7f) p_vcdplayer->i_loop = 0;
VCDSeek( p_access, 0 ); VCDSeek( p_access, 0 );
/* if (p_vcd->in_still) p_vcd->force_redisplay();*/ /* if (p_vcdplayer->in_still) p_vcdplayer->force_redisplay();*/
return READ_BLOCK; return READ_BLOCK;
} }
...@@ -531,14 +532,14 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -531,14 +532,14 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
return READ_BLOCK; return READ_BLOCK;
} else { } else {
int num_selections = vcdinf_get_num_selections(p_vcd->pxd.psd); int i_selections = vcdinf_get_num_selections(p_vcdplayer->pxd.psd);
if (num_selections > 0) { if (i_selections > 0) {
/* Pick a random selection. */ /* Pick a random selection. */
unsigned int bsn=vcdinf_get_bsn(p_vcd->pxd.psd); unsigned int bsn=vcdinf_get_bsn(p_vcdplayer->pxd.psd);
int rand_selection=bsn + int rand_selection=bsn +
(int) ((num_selections+0.0)*rand()/(RAND_MAX+1.0)); (int) ((i_selections+0.0)*rand()/(RAND_MAX+1.0));
lid_t rand_lid=vcdinfo_selection_get_lid (p_vcd->vcd, lid_t rand_lid=vcdinfo_selection_get_lid (p_vcdplayer->vcd,
p_vcd->i_lid, p_vcdplayer->i_lid,
rand_selection); rand_selection);
itemid.num = rand_lid; itemid.num = rand_lid;
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
...@@ -546,7 +547,7 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) ...@@ -546,7 +547,7 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
rand_selection - bsn, rand_lid); rand_selection - bsn, rand_lid);
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
return READ_BLOCK; return READ_BLOCK;
} else if (p_vcd->in_still) { } else if (p_vcdplayer->in_still) {
/* Hack: Just go back and do still again */ /* Hack: Just go back and do still again */
sleep(1); sleep(1);
return READ_STILL_FRAME; return READ_STILL_FRAME;
...@@ -586,16 +587,16 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) ...@@ -586,16 +587,16 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf)
/* p_access->handle_events (); */ /* p_access->handle_events (); */
uint8_t wait_time; uint8_t wait_time;
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
if ( p_vcd->i_lsn > p_vcd->end_lsn ) { if ( p_vcdplayer->i_lsn > p_vcdplayer->end_lsn ) {
vcdplayer_read_status_t read_status; vcdplayer_read_status_t read_status;
/* We've run off of the end of this entry. Do we continue or stop? */ /* We've run off of the end of this entry. Do we continue or stop? */
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC),
"end reached, cur: %u, end: %u\n", p_vcd->i_lsn, p_vcd->end_lsn); "end reached, cur: %u, end: %u\n", p_vcdplayer->i_lsn, p_vcdplayer->end_lsn);
handle_item_continuation: handle_item_continuation:
read_status = vcdplayer_pbc_is_on( p_vcd ) read_status = vcdplayer_pbc_is_on( p_vcdplayer )
? vcdplayer_pbc_nav( p_access, &wait_time ) ? vcdplayer_pbc_nav( p_access, &wait_time )
: vcdplayer_non_pbc_nav( p_access, &wait_time ); : vcdplayer_non_pbc_nav( p_access, &wait_time );
...@@ -617,7 +618,7 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) ...@@ -617,7 +618,7 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf)
*/ */
{ {
CdIo *p_img = vcdinfo_get_cd_image(p_vcd->vcd); CdIo *p_img = vcdinfo_get_cd_image(p_vcdplayer->vcd);
typedef struct { typedef struct {
uint8_t subheader [CDIO_CD_SUBHEADER_SIZE]; uint8_t subheader [CDIO_CD_SUBHEADER_SIZE];
uint8_t data [M2F2_SECTOR_SIZE]; uint8_t data [M2F2_SECTOR_SIZE];
...@@ -626,18 +627,18 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) ...@@ -626,18 +627,18 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf)
vcdsector_t vcd_sector; vcdsector_t vcd_sector;
do { do {
if (cdio_read_mode2_sector(p_img, &vcd_sector, p_vcd->i_lsn, true)!=0) { if (cdio_read_mode2_sector(p_img, &vcd_sector, p_vcdplayer->i_lsn, true)!=0) {
dbg_print(INPUT_DBG_LSN, "read error\n"); dbg_print(INPUT_DBG_LSN, "read error\n");
p_vcd->i_lsn++; p_vcdplayer->i_lsn++;
return READ_ERROR; return READ_ERROR;
} }
p_vcd->i_lsn++; p_vcdplayer->i_lsn++;
if ( p_vcd->i_lsn >= p_vcd->end_lsn ) { if ( p_vcdplayer->i_lsn >= p_vcdplayer->end_lsn ) {
/* We've run off of the end of p_vcd entry. Do we continue or stop? */ /* We've run off of the end of p_vcdplayer entry. Do we continue or stop? */
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC),
"end reached in reading, cur: %u, end: %u\n", "end reached in reading, cur: %u, end: %u\n",
p_vcd->i_lsn, p_vcd->end_lsn); p_vcdplayer->i_lsn, p_vcdplayer->end_lsn);
break; break;
} }
...@@ -647,7 +648,7 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) ...@@ -647,7 +648,7 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf)
*/ */
} while((vcd_sector.subheader[2]&~0x01)==0x60); } while((vcd_sector.subheader[2]&~0x01)==0x60);
if ( p_vcd->i_lsn >= p_vcd->end_lsn ) if ( p_vcdplayer->i_lsn >= p_vcdplayer->end_lsn )
/* We've run off of the end of this entry. Do we continue or stop? */ /* We've run off of the end of this entry. Do we continue or stop? */
goto handle_item_continuation; goto handle_item_continuation;
...@@ -656,48 +657,6 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) ...@@ -656,48 +657,6 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf)
} }
} }
/*!
Get the next play-item in the list given in the LIDs. Note play-item
here refers to list of play-items for a single LID It shouldn't be
confused with a user's list of favorite things to play or the
"next" field of a LID which moves us to a different LID.
*/
bool
vcdplayer_inc_play_item( access_t *p_access )
{
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys;
int noi;
dbg_print(INPUT_DBG_CALL, "called pli: %d", p_vcd->pdi);
if ( NULL == p_vcd || NULL == p_vcd->pxd.pld ) return false;
noi = vcdinf_pld_get_noi(p_vcd->pxd.pld);
if ( noi <= 0 ) return false;
/* Handle delays like autowait or wait here? */
p_vcd->pdi++;
if ( p_vcd->pdi < 0 || p_vcd->pdi >= noi ) return false;
else {
uint16_t trans_itemid_num=vcdinf_pld_get_play_item(p_vcd->pxd.pld,
p_vcd->pdi);
vcdinfo_itemid_t trans_itemid;
if (VCDINFO_INVALID_ITEMID == trans_itemid_num) return false;
vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid);
dbg_print(INPUT_DBG_PBC, " play-item[%d]: %s",
p_vcd->pdi, vcdinfo_pin2str (trans_itemid_num));
vcdplayer_play( p_access, trans_itemid );
return VLC_SUCCESS;
}
}
/*! /*!
Play item assocated with the "default" selection. Play item assocated with the "default" selection.
...@@ -706,46 +665,46 @@ vcdplayer_inc_play_item( access_t *p_access ) ...@@ -706,46 +665,46 @@ vcdplayer_inc_play_item( access_t *p_access )
bool bool
vcdplayer_play_default( access_t * p_access ) vcdplayer_play_default( access_t * p_access )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
if (!p_vcd) { if (!p_vcdplayer) {
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC),
"null p_vcd" ); "null p_vcdplayer" );
return VLC_EGENERIC; return VLC_EGENERIC;
} }
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC),
"current: %d" , p_vcd->play_item.num); "current: %d" , p_vcdplayer->play_item.num);
itemid.type = p_vcd->play_item.type; itemid.type = p_vcdplayer->play_item.type;
if (vcdplayer_pbc_is_on(p_vcd)) { if (vcdplayer_pbc_is_on(p_vcdplayer)) {
#if defined(LIBVCD_VERSION) #if defined(LIBVCD_VERSION)
lid_t lid=vcdinfo_get_multi_default_lid(p_vcd->vcd, p_vcd->i_lid, lid_t lid=vcdinfo_get_multi_default_lid(p_vcdplayer->vcd, p_vcdplayer->i_lid,
p_vcd->i_lsn); p_vcdplayer->i_lsn);
if (VCDINFO_INVALID_LID != lid) { if (VCDINFO_INVALID_LID != lid) {
itemid.num = lid; itemid.num = lid;
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
dbg_print(INPUT_DBG_PBC, "DEFAULT to %d", itemid.num); dbg_print(INPUT_DBG_PBC, "DEFAULT to %d", itemid.num);
} else { } else {
dbg_print(INPUT_DBG_PBC, "no DEFAULT for LID %d", p_vcd->i_lid); dbg_print(INPUT_DBG_PBC, "no DEFAULT for LID %d", p_vcdplayer->i_lid);
} }
#else #else
vcdinfo_lid_get_pxd(p_vcd->vcd, &(p_vcd->pxd), p_vcd->i_lid); vcdinfo_lid_get_pxd(p_vcdplayer->vcd, &(p_vcdplayer->pxd), p_vcdplayer->i_lid);
switch (p_vcd->pxd.descriptor_type) { switch (p_vcdplayer->pxd.descriptor_type) {
case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_SELECTION_LIST:
case PSD_TYPE_EXT_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST:
if (p_vcd->pxd.psd == NULL) return false; if (p_vcdplayer->pxd.psd == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinfo_get_default_offset(p_vcd->vcd, vcdinfo_get_default_offset(p_vcdplayer->vcd,
p_vcd->i_lid), p_vcdplayer->i_lid),
&itemid.num, "default"); &itemid.num, "default");
break; break;
...@@ -763,11 +722,11 @@ vcdplayer_play_default( access_t * p_access ) ...@@ -763,11 +722,11 @@ vcdplayer_play_default( access_t * p_access )
/* PBC is not on. "default" selection beginning of current /* PBC is not on. "default" selection beginning of current
selection . */ selection . */
p_vcd->play_item.num = p_vcd->play_item.num; p_vcdplayer->play_item.num = p_vcdplayer->play_item.num;
} }
/** ??? p_vcd->update_title(); ***/ /** ??? p_vcdplayer->update_title(); ***/
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -781,38 +740,38 @@ vcdplayer_play_default( access_t * p_access ) ...@@ -781,38 +740,38 @@ vcdplayer_play_default( access_t * p_access )
bool bool
vcdplayer_play_next( access_t * p_access ) vcdplayer_play_next( access_t * p_access )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
vcdinfo_obj_t *p_obj; vcdinfo_obj_t *p_vcdinfo;
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
if (!p_vcd) return false; if (!p_vcdplayer) return false;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC),
"current: %d" , p_vcd->play_item.num); "current: %d" , p_vcdplayer->play_item.num);
p_obj = p_vcd->vcd; p_vcdinfo = p_vcdplayer->vcd;
itemid.type = p_vcd->play_item.type; itemid.type = p_vcdplayer->play_item.type;
if (vcdplayer_pbc_is_on(p_vcd)) { if (vcdplayer_pbc_is_on(p_vcdplayer)) {
vcdinfo_lid_get_pxd(p_obj, &(p_vcd->pxd), p_vcd->i_lid); vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), p_vcdplayer->i_lid);
switch (p_vcd->pxd.descriptor_type) { switch (p_vcdplayer->pxd.descriptor_type) {
case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_SELECTION_LIST:
case PSD_TYPE_EXT_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST:
if (p_vcd->pxd.psd == NULL) return false; if (p_vcdplayer->pxd.psd == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_psd_get_next_offset(p_vcd->pxd.psd), vcdinf_psd_get_next_offset(p_vcdplayer->pxd.psd),
&itemid.num, "next"); &itemid.num, "next");
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
break; break;
case PSD_TYPE_PLAY_LIST: case PSD_TYPE_PLAY_LIST:
if (p_vcd->pxd.pld == NULL) return false; if (p_vcdplayer->pxd.pld == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_pld_get_next_offset(p_vcd->pxd.pld), vcdinf_pld_get_next_offset(p_vcdplayer->pxd.pld),
&itemid.num, "next"); &itemid.num, "next");
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
break; break;
...@@ -828,26 +787,26 @@ vcdplayer_play_next( access_t * p_access ) ...@@ -828,26 +787,26 @@ vcdplayer_play_next( access_t * p_access )
int max_entry = 0; int max_entry = 0;
switch (p_vcd->play_item.type) { switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_ENTRY: case VCDINFO_ITEM_TYPE_ENTRY:
case VCDINFO_ITEM_TYPE_SEGMENT: case VCDINFO_ITEM_TYPE_SEGMENT:
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
switch (p_vcd->play_item.type) { switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_ENTRY: case VCDINFO_ITEM_TYPE_ENTRY:
max_entry = p_vcd->i_entries; max_entry = p_vcdplayer->i_entries;
break; break;
case VCDINFO_ITEM_TYPE_SEGMENT: case VCDINFO_ITEM_TYPE_SEGMENT:
max_entry = p_vcd->i_segments; max_entry = p_vcdplayer->i_segments;
break; break;
case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_TRACK:
max_entry = p_vcd->i_tracks; max_entry = p_vcdplayer->i_tracks;
break; break;
default: ; /* Handle exceptional cases below */ default: ; /* Handle exceptional cases below */
} }
if (p_vcd->play_item.num+1 < max_entry) { if (p_vcdplayer->play_item.num+1 < max_entry) {
itemid.num = p_vcd->play_item.num+1; itemid.num = p_vcdplayer->play_item.num+1;
} else { } else {
LOG_WARN( "At the end - non-PBC 'next' not possible here" ); LOG_WARN( "At the end - non-PBC 'next' not possible here" );
return false; return false;
...@@ -866,7 +825,7 @@ vcdplayer_play_next( access_t * p_access ) ...@@ -866,7 +825,7 @@ vcdplayer_play_next( access_t * p_access )
} }
} }
/** ??? p_vcd->update_title(); ***/ /** ??? p_vcdplayer->update_title(); ***/
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -880,33 +839,33 @@ vcdplayer_play_next( access_t * p_access ) ...@@ -880,33 +839,33 @@ vcdplayer_play_next( access_t * p_access )
bool bool
vcdplayer_play_prev( access_t * p_access ) vcdplayer_play_prev( access_t * p_access )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
vcdinfo_obj_t *p_obj = p_vcd->vcd; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd;
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC),
"current: %d" , p_vcd->play_item.num); "current: %d" , p_vcdplayer->play_item.num);
itemid.type = p_vcd->play_item.type; itemid.type = p_vcdplayer->play_item.type;
if (vcdplayer_pbc_is_on(p_vcd)) { if (vcdplayer_pbc_is_on(p_vcdplayer)) {
vcdinfo_lid_get_pxd(p_obj, &(p_vcd->pxd), p_vcd->i_lid); vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), p_vcdplayer->i_lid);
switch (p_vcd->pxd.descriptor_type) { switch (p_vcdplayer->pxd.descriptor_type) {
case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_SELECTION_LIST:
case PSD_TYPE_EXT_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST:
if (p_vcd->pxd.psd == NULL) return false; if (p_vcdplayer->pxd.psd == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_psd_get_prev_offset(p_vcd->pxd.psd), vcdinf_psd_get_prev_offset(p_vcdplayer->pxd.psd),
&itemid.num, "prev"); &itemid.num, "prev");
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
break; break;
case PSD_TYPE_PLAY_LIST: case PSD_TYPE_PLAY_LIST:
if (p_vcd->pxd.pld == NULL) return false; if (p_vcdplayer->pxd.pld == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_pld_get_prev_offset(p_vcd->pxd.pld), vcdinf_pld_get_prev_offset(p_vcdplayer->pxd.pld),
&itemid.num, "prev"); &itemid.num, "prev");
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
break; break;
...@@ -920,11 +879,11 @@ vcdplayer_play_prev( access_t * p_access ) ...@@ -920,11 +879,11 @@ vcdplayer_play_prev( access_t * p_access )
/* PBC is not on. "Prev" selection is play_item.num-1 if possible. */ /* PBC is not on. "Prev" selection is play_item.num-1 if possible. */
int min_entry = (VCDINFO_ITEM_TYPE_ENTRY == p_vcd->play_item.type) int min_entry = (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type)
? 0 : 1; ? 0 : 1;
if (p_vcd->play_item.num > min_entry) { if (p_vcdplayer->play_item.num > min_entry) {
itemid.num = p_vcd->play_item.num-1; itemid.num = p_vcdplayer->play_item.num-1;
} else { } else {
LOG_WARN( "At the beginning - non-PBC 'prev' not possible here" ); LOG_WARN( "At the beginning - non-PBC 'prev' not possible here" );
return false; return false;
...@@ -932,7 +891,7 @@ vcdplayer_play_prev( access_t * p_access ) ...@@ -932,7 +891,7 @@ vcdplayer_play_prev( access_t * p_access )
} }
/** ??? p_vcd->update_title(); ***/ /** ??? p_vcdplayer->update_title(); ***/
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -946,33 +905,33 @@ vcdplayer_play_prev( access_t * p_access ) ...@@ -946,33 +905,33 @@ vcdplayer_play_prev( access_t * p_access )
bool bool
vcdplayer_play_return( access_t * p_access ) vcdplayer_play_return( access_t * p_access )
{ {
vcdplayer_t *p_vcd= (vcdplayer_t *)p_access->p_sys; vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
vcdinfo_obj_t *p_obj = p_vcd->vcd; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd;
vcdinfo_itemid_t itemid; vcdinfo_itemid_t itemid;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC),
"current: %d" , p_vcd->play_item.num); "current: %d" , p_vcdplayer->play_item.num);
itemid.type = p_vcd->play_item.type; itemid.type = p_vcdplayer->play_item.type;
if (vcdplayer_pbc_is_on(p_vcd)) { if (vcdplayer_pbc_is_on(p_vcdplayer)) {
vcdinfo_lid_get_pxd(p_obj, &(p_vcd->pxd), p_vcd->i_lid); vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), p_vcdplayer->i_lid);
switch (p_vcd->pxd.descriptor_type) { switch (p_vcdplayer->pxd.descriptor_type) {
case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_SELECTION_LIST:
case PSD_TYPE_EXT_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST:
if (p_vcd->pxd.psd == NULL) return false; if (p_vcdplayer->pxd.psd == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_psd_get_return_offset(p_vcd->pxd.psd), vcdinf_psd_get_return_offset(p_vcdplayer->pxd.psd),
&itemid.num, "return"); &itemid.num, "return");
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
break; break;
case PSD_TYPE_PLAY_LIST: case PSD_TYPE_PLAY_LIST:
if (p_vcd->pxd.pld == NULL) return false; if (p_vcdplayer->pxd.pld == NULL) return false;
vcdplayer_update_entry( p_access, vcdplayer_update_entry( p_access,
vcdinf_pld_get_return_offset(p_vcd->pxd.pld), vcdinf_pld_get_return_offset(p_vcdplayer->pxd.pld),
&itemid.num, "return"); &itemid.num, "return");
itemid.type = VCDINFO_ITEM_TYPE_LID; itemid.type = VCDINFO_ITEM_TYPE_LID;
break; break;
...@@ -986,12 +945,12 @@ vcdplayer_play_return( access_t * p_access ) ...@@ -986,12 +945,12 @@ vcdplayer_play_return( access_t * p_access )
/* PBC is not on. "Return" selection is min_entry if possible. */ /* PBC is not on. "Return" selection is min_entry if possible. */
p_vcd->play_item.num = (VCDINFO_ITEM_TYPE_ENTRY == p_vcd->play_item.type) p_vcdplayer->play_item.num = (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type)
? 0 : 1; ? 0 : 1;
} }
/** ??? p_vcd->update_title(); ***/ /** ??? p_vcdplayer->update_title(); ***/
vcdplayer_play( p_access, itemid ); vcdplayer_play( p_access, itemid );
return VLC_SUCCESS; return VLC_SUCCESS;
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#define INPUT_DBG_EVENT 2 /* input (keyboard/mouse) events */ #define INPUT_DBG_EVENT 2 /* input (keyboard/mouse) events */
#define INPUT_DBG_MRL 4 /* MRL parsing */ #define INPUT_DBG_MRL 4 /* MRL parsing */
#define INPUT_DBG_EXT 8 /* Calls from external routines */ #define INPUT_DBG_EXT 8 /* Calls from external routines */
#define INPUT_DBG_CALL 16 /* all calls */ #define INPUT_DBG_CALL 16 /* routine calls */
#define INPUT_DBG_LSN 32 /* LSN changes */ #define INPUT_DBG_LSN 32 /* LSN changes */
#define INPUT_DBG_PBC 64 /* Playback control */ #define INPUT_DBG_PBC 64 /* Playback control */
#define INPUT_DBG_CDIO 128 /* Debugging from CDIO */ #define INPUT_DBG_CDIO 128 /* Debugging from CDIO */
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
#define INPUT_DEBUG 1 #define INPUT_DEBUG 1
#if INPUT_DEBUG #if INPUT_DEBUG
#define dbg_print(mask, s, args...) \ #define dbg_print(mask, s, args...) \
if (p_vcd && p_vcd->i_debug & mask) \ if (p_vcdplayer && p_vcdplayer->i_debug & mask) \
msg_Dbg(p_access, "%s: "s, __func__ , ##args) msg_Dbg(p_access, "%s: "s, __func__ , ##args)
#else #else
#define dbg_print(mask, s, args...) #define dbg_print(mask, s, args...)
...@@ -65,26 +65,22 @@ typedef struct { ...@@ -65,26 +65,22 @@ typedef struct {
size_t size; /* size in sector units of play item. */ size_t size; /* size in sector units of play item. */
} vcdplayer_play_item_info_t; } vcdplayer_play_item_info_t;
/* vcdplayer_read return status */
typedef enum {
READ_BLOCK,
READ_STILL_FRAME,
READ_ERROR,
READ_END,
} vcdplayer_read_status_t;
/***************************************************************************** /*****************************************************************************
* vcdplayer_t: VCD information * vcdplayer_t: VCD information
*****************************************************************************/ *****************************************************************************/
typedef struct thread_vcd_data_s typedef struct vcdplayer_input_s
{ {
vcdinfo_obj_t *vcd; /* CD device descriptor */ vcdinfo_obj_t *vcd; /* CD device descriptor */
/* User-settable options */ /*------------------------------------------------------------------
User-settable options
--------------------------------------------------------------*/
unsigned int i_debug; /* Debugging mask */ unsigned int i_debug; /* Debugging mask */
unsigned int i_blocks_per_read; /* number of blocks per read */ unsigned int i_blocks_per_read; /* number of blocks per read */
/* Current State: position */ /*-------------------------------------------------------------
Playback control fields
--------------------------------------------------------------*/
bool in_still; /* true if in still */ bool in_still; /* true if in still */
int i_lid; /* LID that play item is in. Implies int i_lid; /* LID that play item is in. Implies
PBC is on. VCDPLAYER_BAD_ENTRY if PBC is on. VCDPLAYER_BAD_ENTRY if
...@@ -98,11 +94,15 @@ typedef struct thread_vcd_data_s ...@@ -98,11 +94,15 @@ typedef struct thread_vcd_data_s
vcdinfo_itemid_t loop_item; /* Where do we loop back to? vcdinfo_itemid_t loop_item; /* Where do we loop back to?
Meaningful only in a selection Meaningful only in a selection
list */ list */
int loop_count; /* # of times play-item has been int i_loop; /* # of times play-item has been
played. Meaningful only in a played. Meaningful only in a
selection list. */ selection list. */
track_t i_track; /* Current track number */ track_t i_track; /* current track number */
lsn_t i_lsn; /* Current logical sector number */
/*-----------------------------------
location fields
------------------------------------*/
lsn_t i_lsn; /* LSN of where we are right now */
lsn_t end_lsn; /* LSN of end of current lsn_t end_lsn; /* LSN of end of current
entry/segment/track. This block entry/segment/track. This block
can be read (and is not one after can be read (and is not one after
...@@ -118,8 +118,11 @@ typedef struct thread_vcd_data_s ...@@ -118,8 +118,11 @@ typedef struct thread_vcd_data_s
bool b_valid_ep; /* Valid entry points flag */ bool b_valid_ep; /* Valid entry points flag */
bool b_end_of_track; /* If the end of track was reached */ bool b_end_of_track; /* If the end of track was reached */
/* Information about (S)VCD */ /*--------------------------------------------------------------
char * psz_source; /* (S)VCD drive or image filename */ (S)VCD Medium information
---------------------------------------------------------------*/
char *psz_source; /* (S)VCD drive or image filename */
bool b_svd; /* true if we have SVD info */ bool b_svd; /* true if we have SVD info */
vlc_meta_t *p_meta; vlc_meta_t *p_meta;
track_t i_tracks; /* # of playable MPEG tracks. This is track_t i_tracks; /* # of playable MPEG tracks. This is
...@@ -133,7 +136,7 @@ typedef struct thread_vcd_data_s ...@@ -133,7 +136,7 @@ typedef struct thread_vcd_data_s
unsigned int i_lids; /* # of List IDs */ unsigned int i_lids; /* # of List IDs */
/* Tracks, segment, and entry information. The number of entries for /* Tracks, segment, and entry information. The number of entries for
each is given by the corresponding num_* field above. */ each is given by the corresponding i_* field above. */
vcdplayer_play_item_info_t *track; vcdplayer_play_item_info_t *track;
vcdplayer_play_item_info_t *segment; vcdplayer_play_item_info_t *segment;
vcdplayer_play_item_info_t *entry; vcdplayer_play_item_info_t *entry;
...@@ -156,18 +159,23 @@ typedef struct thread_vcd_data_s ...@@ -156,18 +159,23 @@ typedef struct thread_vcd_data_s
} vcdplayer_t; } vcdplayer_t;
/*! /* vcdplayer_read return status */
Get the next play-item in the list given in the LIDs. Note play-item typedef enum {
here refers to list of play-items for a single LID It shouldn't be READ_BLOCK,
confused with a user's list of favorite things to play or the READ_STILL_FRAME,
"next" field of a LID which moves us to a different LID. READ_ERROR,
*/ READ_END,
bool vcdplayer_inc_play_item( access_t *p_access ); } vcdplayer_read_status_t;
/* ----------------------------------------------------------------------
Function Prototypes
-----------------------------------------------------------------------*/
/*! /*!
Return true if playback control (PBC) is on Return true if playback control (PBC) is on
*/ */
bool vcdplayer_pbc_is_on(const vcdplayer_t *p_this); bool vcdplayer_pbc_is_on(const vcdplayer_t *p_vcdplayer);
/*! /*!
Play item assocated with the "default" selection. Play item assocated with the "default" selection.
...@@ -207,11 +215,6 @@ void vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track, ...@@ -207,11 +215,6 @@ void vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
void vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid); void vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid);
vcdplayer_read_status_t vcdplayer_pbc_nav ( access_t * p_access,
uint8_t *wait_time );
vcdplayer_read_status_t vcdplayer_non_pbc_nav ( access_t * p_access,
uint8_t *wait_time );
vcdplayer_read_status_t vcdplayer_read (access_t * p_access_t, uint8_t *p_buf); vcdplayer_read_status_t vcdplayer_read (access_t * p_access_t, uint8_t *p_buf);
#endif /* _VCDPLAYER_H_ */ #endif /* _VCDPLAYER_H_ */
......
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