Commit ded081bc authored by JP Dinger's avatar JP Dinger

vcdx: 100% cosmetics; indentation reformatting.

parent f5078293
......@@ -87,52 +87,50 @@ static access_t *p_vcd_access = NULL;
static void
cdio_log_handler (cdio_log_level_t level, const char message[])
{
const vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
switch (level) {
case CDIO_LOG_DEBUG:
case CDIO_LOG_INFO:
if (p_vcdplayer->i_debug & INPUT_DBG_CDIO)
msg_Dbg( p_vcd_access, "%s", message);
break;
case CDIO_LOG_WARN:
msg_Warn( p_vcd_access, "%s", message);
break;
case CDIO_LOG_ERROR:
case CDIO_LOG_ASSERT:
msg_Err( p_vcd_access, "%s", message);
break;
default:
msg_Warn( p_vcd_access, "%s\n%s %d", message,
"The above message had unknown log level",
level);
}
return;
const vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
switch (level) {
case CDIO_LOG_DEBUG:
case CDIO_LOG_INFO:
if (p_vcdplayer->i_debug & INPUT_DBG_CDIO)
msg_Dbg( p_vcd_access, "%s", message);
break;
case CDIO_LOG_WARN:
msg_Warn( p_vcd_access, "%s", message);
break;
case CDIO_LOG_ERROR:
case CDIO_LOG_ASSERT:
msg_Err( p_vcd_access, "%s", message);
break;
default:
msg_Warn( p_vcd_access, "%s\n%s %d", message,
"The above message had unknown log level", level);
}
return;
}
/* process messages that originate from vcdinfo. */
static void
vcd_log_handler (vcd_log_level_t level, const char message[])
{
vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
switch (level) {
case VCD_LOG_DEBUG:
case VCD_LOG_INFO:
if (p_vcdplayer->i_debug & INPUT_DBG_VCDINFO)
msg_Dbg( p_vcd_access, "%s", message);
break;
case VCD_LOG_WARN:
msg_Warn( p_vcd_access, "%s", message);
break;
case VCD_LOG_ERROR:
case VCD_LOG_ASSERT:
msg_Err( p_vcd_access, "%s", message);
break;
default:
msg_Warn( p_vcd_access, "%s\n%s %d", message,
"The above message had unknown vcdimager log level",
level);
}
return;
vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
switch (level) {
case VCD_LOG_DEBUG:
case VCD_LOG_INFO:
if (p_vcdplayer->i_debug & INPUT_DBG_VCDINFO)
msg_Dbg( p_vcd_access, "%s", message);
break;
case VCD_LOG_WARN:
msg_Warn( p_vcd_access, "%s", message);
break;
case VCD_LOG_ERROR:
case VCD_LOG_ASSERT:
msg_Err( p_vcd_access, "%s", message);
break;
default:
msg_Warn( p_vcd_access, "%s\n%s %d", message,
"The above message had unknown vcdimager log level", level);
}
return;
}
/*****************************************************************************
......@@ -165,77 +163,74 @@ VCDReadBlock( access_t * p_access )
p_buf = (uint8_t *) p_block->p_buffer;
for ( i_read = 0 ; i_read < i_blocks ; i_read++ )
{
vcdplayer_read_status_t read_status = vcdplayer_read(p_access, p_buf);
vcdplayer_read_status_t read_status = vcdplayer_read(p_access, p_buf);
p_access->info.i_pos += M2F2_SECTOR_SIZE;
p_access->info.i_pos += M2F2_SECTOR_SIZE;
switch ( read_status ) {
case READ_END:
/* End reached. Return NULL to indicated this. */
/* We also set the postion to the end so the higher level
(demux?) doesn't try to keep reading. If everything works out
right this shouldn't have to happen.
*/
switch ( read_status ) {
case READ_END:
/* End reached. Return NULL to indicated this. */
/* We also set the postion to the end so the higher level
(demux?) doesn't try to keep reading. If everything works out
right this shouldn't have to happen.
*/
#if 0
if ( p_access->info.i_pos != p_access->info.i_size ) {
msg_Warn( p_access,
if( p_access->info.i_pos != p_access->info.i_size ) {
msg_Warn( p_access,
"At end but pos (%llu) is not size (%llu). Adjusting.",
p_access->info.i_pos, p_access->info.i_size );
p_access->info.i_pos = p_access->info.i_size;
}
p_access->info.i_pos = p_access->info.i_size;
}
#endif
block_Release( p_block );
return NULL;
block_Release( p_block );
return NULL;
case READ_ERROR:
/* Some sort of error. Should we increment lsn? to skip block?
*/
block_Release( p_block );
return NULL;
case READ_STILL_FRAME:
{
case READ_ERROR:
/* Some sort of error. Should we increment lsn? to skip block? */
block_Release( p_block );
return NULL;
case READ_STILL_FRAME:
/* FIXME The below should be done in an event thread.
Until then...
*/
#if 1
msleep( MILLISECONDS_PER_SEC * *p_buf );
VCDSetOrigin(p_access, p_vcdplayer->origin_lsn, p_vcdplayer->i_track,
&(p_vcdplayer->play_item));
// p_vcd->in_still = false;
dbg_print(INPUT_DBG_STILL, "still wait time done");
msleep( MILLISECONDS_PER_SEC * *p_buf );
VCDSetOrigin(p_access, p_vcdplayer->origin_lsn,
p_vcdplayer->i_track, &(p_vcdplayer->play_item));
// p_vcd->in_still = false;
dbg_print(INPUT_DBG_STILL, "still wait time done");
#else
vcdIntfStillTime(p_vcdplayer->p_intf, *p_buf);
vcdIntfStillTime(p_vcdplayer->p_intf, *p_buf);
#endif
block_Release( p_block );
return NULL;
block_Release( p_block );
return NULL;
default:
case READ_BLOCK:
/* Read buffer */
break;
}
default:
case READ_BLOCK:
/* Read buffer */
;
}
p_buf += M2F2_SECTOR_SIZE;
/* Update seekpoint */
if ( VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type )
{
size_t i_entry = p_vcdplayer->play_item.num+1;
lsn_t i_lsn = vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i_entry);
if ( p_vcdplayer->i_lsn >= i_lsn && i_lsn != VCDINFO_NULL_LSN )
p_buf += M2F2_SECTOR_SIZE;
/* Update seekpoint */
if ( VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type )
{
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC),
"entry change to %d, current LSN %u >= end %u",
i_entry, p_vcdplayer->i_lsn, i_lsn);
size_t i_entry = p_vcdplayer->play_item.num+1;
lsn_t i_lsn = vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i_entry);
if ( p_vcdplayer->i_lsn >= i_lsn && i_lsn != VCDINFO_NULL_LSN )
{
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC),
"entry change to %d, current LSN %u >= end %u",
i_entry, p_vcdplayer->i_lsn, i_lsn);
p_vcdplayer->play_item.num = i_entry;
p_vcdplayer->play_item.num = i_entry;
VCDSetOrigin( p_access, i_lsn, p_vcdplayer->i_track,
&(p_vcdplayer->play_item) );
VCDSetOrigin( p_access, i_lsn, p_vcdplayer->i_track,
&(p_vcdplayer->play_item) );
}
}
}
}
return p_block;
......@@ -249,74 +244,73 @@ int
VCDSeek( access_t * p_access, int64_t i_pos )
{
if (!p_access || !p_access->p_sys) return VLC_EGENERIC;
{
vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
const input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
unsigned int i_entry = VCDINFO_INVALID_ENTRY;
int i_seekpoint;
/* Next sector to read */
p_access->info.i_pos = i_pos;
p_vcdplayer->i_lsn = (i_pos / (int64_t) M2F2_SECTOR_SIZE) +
p_vcdplayer->origin_lsn;
switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_TRACK:
case VCDINFO_ITEM_TYPE_ENTRY:
break ;
default:
p_vcdplayer->b_valid_ep = false;
}
/* Find entry */
if( p_vcdplayer->b_valid_ep )
{
for( i_entry = 0 ; i_entry < p_vcdplayer->i_entries ; i_entry ++ )
{
if( p_vcdplayer->i_lsn < p_vcdplayer->p_entries[i_entry] )
{
VCDUpdateVar( p_access, i_entry, VLC_VAR_SETVALUE,
"chapter", _("Entry"), "Setting entry" );
break;
}
}
{
vcdinfo_itemid_t itemid;
itemid.num = i_entry;
itemid.type = VCDINFO_ITEM_TYPE_ENTRY;
VCDSetOrigin(p_access, p_vcdplayer->i_lsn, p_vcdplayer->i_track,
&itemid);
}
vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
const input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
unsigned int i_entry = VCDINFO_INVALID_ENTRY;
int i_seekpoint;
/* Next sector to read */
p_access->info.i_pos = i_pos;
p_vcdplayer->i_lsn = (i_pos / (int64_t) M2F2_SECTOR_SIZE) +
p_vcdplayer->origin_lsn;
switch (p_vcdplayer->play_item.type)
{
case VCDINFO_ITEM_TYPE_TRACK:
case VCDINFO_ITEM_TYPE_ENTRY:
break;
default:
p_vcdplayer->b_valid_ep = false;
break;
}
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_SEEK),
"orig %lu, cur: %lu, offset: %lld, entry %d",
(long unsigned int) p_vcdplayer->origin_lsn,
(long unsigned int) p_vcdplayer->i_lsn, i_pos,
i_entry );
/* Find entry */
if( p_vcdplayer->b_valid_ep )
{
for( i_entry = 0 ; i_entry < p_vcdplayer->i_entries ; i_entry ++ )
{
if( p_vcdplayer->i_lsn < p_vcdplayer->p_entries[i_entry] )
{
VCDUpdateVar( p_access, i_entry, VLC_VAR_SETVALUE,
"chapter", _("Entry"), "Setting entry" );
break;
}
}
{
vcdinfo_itemid_t itemid;
itemid.num = i_entry;
itemid.type = VCDINFO_ITEM_TYPE_ENTRY;
VCDSetOrigin(p_access, p_vcdplayer->i_lsn,
p_vcdplayer->i_track, &itemid);
}
}
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_SEEK),
"orig %lu, cur: %lu, offset: %lld, entry %d",
(long unsigned int) p_vcdplayer->origin_lsn,
(long unsigned int) p_vcdplayer->i_lsn, i_pos,
i_entry );
/* Find seekpoint */
for( i_seekpoint = 0; i_seekpoint < t->i_seekpoint; i_seekpoint++ )
{
if( i_seekpoint + 1 >= t->i_seekpoint ) break;
if( i_pos < t->seekpoint[i_seekpoint + 1]->i_byte_offset ) break;
}
/* Find seekpoint */
for( i_seekpoint = 0; i_seekpoint < t->i_seekpoint; i_seekpoint++ )
{
if( i_seekpoint + 1 >= t->i_seekpoint ) break;
if( i_pos < t->seekpoint[i_seekpoint + 1]->i_byte_offset ) break;
}
/* Update current seekpoint */
if( i_seekpoint != p_access->info.i_seekpoint )
{
dbg_print( (INPUT_DBG_SEEK), "seekpoint change %lu",
(long unsigned int) i_seekpoint );
p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
p_access->info.i_seekpoint = i_seekpoint;
}
/* Update current seekpoint */
if( i_seekpoint != p_access->info.i_seekpoint )
{
dbg_print( (INPUT_DBG_SEEK), "seekpoint change %lu",
(long unsigned int) i_seekpoint );
p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
p_access->info.i_seekpoint = i_seekpoint;
}
}
p_access->info.b_eof = false;
return VLC_SUCCESS;
}
/*****************************************************************************
......@@ -327,61 +321,59 @@ VCDSeek( access_t * p_access, int64_t i_pos )
static bool
VCDEntryPoints( access_t * p_access )
{
if (!p_access || !p_access->p_sys) return false;
if (!p_access || !p_access->p_sys) return false;
{
vcdplayer_t *p_vcdplayer = (vcdplayer_t *) p_access->p_sys;
const unsigned int i_entries =
vcdinfo_get_num_entries(p_vcdplayer->vcd);
const unsigned int i_entries = vcdinfo_get_num_entries(p_vcdplayer->vcd);
const track_t i_last_track
= cdio_get_num_tracks(vcdinfo_get_cd_image(p_vcdplayer->vcd))
+ cdio_get_first_track_num(vcdinfo_get_cd_image(p_vcdplayer->vcd));
= cdio_get_num_tracks(vcdinfo_get_cd_image(p_vcdplayer->vcd))
+ cdio_get_first_track_num(vcdinfo_get_cd_image(p_vcdplayer->vcd));
unsigned int i;
if (0 == i_entries) {
LOG_ERR ("no entires found -- something is wrong" );
return false;
LOG_ERR ("no entires found -- something is wrong" );
return false;
}
p_vcdplayer->p_entries = malloc( sizeof( lsn_t ) * i_entries );
if( p_vcdplayer->p_entries == NULL )
{
LOG_ERR ("not enough memory for entry points treatment" );
return false;
LOG_ERR ("not enough memory for entry points treatment" );
return false;
}
p_vcdplayer->i_entries = i_entries;
for( i = 0 ; i < i_entries ; i++ )
{
const track_t i_track = vcdinfo_get_track(p_vcdplayer->vcd, i);
if( i_track <= i_last_track ) {
seekpoint_t *s = vlc_seekpoint_New();
char psz_entry[100];
const track_t i_track = vcdinfo_get_track(p_vcdplayer->vcd, i);
if( i_track <= i_last_track )
{
seekpoint_t *s = vlc_seekpoint_New();
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_vcdplayer->p_entries[i] = vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i);
p_vcdplayer->p_entries[i] =
vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i);
s->psz_name = strdup(psz_entry);
s->i_byte_offset =
(p_vcdplayer->p_entries[i] - vcdinfo_get_track_lsn(p_vcdplayer->vcd, i_track))
* M2F2_SECTOR_SIZE;
s->psz_name = strdup(psz_entry);
s->i_byte_offset = (p_vcdplayer->p_entries[i]
- vcdinfo_get_track_lsn(p_vcdplayer->vcd,i_track))
* M2F2_SECTOR_SIZE;
dbg_print( INPUT_DBG_MRL,
"%s, lsn %d, byte_offset %ld",
s->psz_name, p_vcdplayer->p_entries[i],
(unsigned long int) s->i_byte_offset);
TAB_APPEND( p_vcdplayer->p_title[i_track-1]->i_seekpoint,
p_vcdplayer->p_title[i_track-1]->seekpoint, s );
dbg_print( INPUT_DBG_MRL, "%s, lsn %d, byte_offset %ld",
s->psz_name, p_vcdplayer->p_entries[i],
(unsigned long int) s->i_byte_offset);
TAB_APPEND( p_vcdplayer->p_title[i_track-1]->i_seekpoint,
p_vcdplayer->p_title[i_track-1]->seekpoint, s );
} else
msg_Warn( p_access, "wrong track number found in entry points" );
msg_Warn( p_access, "wrong track number found in entry points" );
}
p_vcdplayer->b_valid_ep = true;
return true;
}
}
/*****************************************************************************
......@@ -410,8 +402,7 @@ VCDSegments( access_t * p_access )
/* We have one additional segment allocated so we can get the size
by subtracting seg[i+1] - seg[i].
*/
p_vcdplayer->p_segments =
malloc( sizeof( lsn_t ) * (p_vcdplayer->i_segments+1) );
p_vcdplayer->p_segments=malloc(sizeof(lsn_t)*(p_vcdplayer->i_segments+1));
if( p_vcdplayer->p_segments == NULL )
{
LOG_ERR ("not enough memory for segment treatment" );
......@@ -594,69 +585,70 @@ VCDParse( access_t * p_access, /*out*/ vcdinfo_itemid_t * p_itemid,
type+entry number. */
unsigned int num;
*psz_parser = '\0';
++psz_parser;
if( *psz_parser )
{
switch(*psz_parser) {
case 'E':
*psz_parser = '\0';
++psz_parser;
if( *psz_parser )
switch(*psz_parser) {
case 'E':
p_itemid->type = VCDINFO_ITEM_TYPE_ENTRY;
++psz_parser;
*play_single_item = true;
break;
case 'P':
case 'P':
p_itemid->type = VCDINFO_ITEM_TYPE_LID;
++psz_parser;
*play_single_item = false;
break;
case 'S':
case 'S':
p_itemid->type = VCDINFO_ITEM_TYPE_SEGMENT;
++psz_parser;
*play_single_item = true;
break;
case 'T':
case 'T':
p_itemid->type = VCDINFO_ITEM_TYPE_TRACK;
++psz_parser;
*play_single_item = true;
break;
default: ;
}
default:
break;
}
num = strtol( psz_parser, &psz_next, 10 );
if ( *psz_parser != '\0' && *psz_next == '\0')
{
p_itemid->num = num;
}
num = strtol( psz_parser, &psz_next, 10 );
if ( *psz_parser != '\0' && *psz_next == '\0')
{
p_itemid->num = num;
}
} else {
*play_single_item = ( VCDINFO_ITEM_TYPE_LID == p_itemid->type );
*play_single_item = ( VCDINFO_ITEM_TYPE_LID == p_itemid->type );
}
if( !*psz_source ) {
if( !*psz_source )
{
/* No source specified, so figure it out. */
if( !p_access->psz_access ) return NULL;
/* No source specified, so figure it out. */
if( !p_access->psz_access ) return NULL;
psz_source = config_GetPsz( p_access, "vcd" );
psz_source = config_GetPsz( p_access, "vcd" );
if( !psz_source || 0==strlen(psz_source) ) {
free( psz_source );
/* Scan for a CD-ROM drive with a VCD in it. */
char **cd_drives = cdio_get_devices_with_cap( NULL,
( CDIO_FS_ANAL_SVCD | CDIO_FS_ANAL_CVD
|CDIO_FS_ANAL_VIDEOCD | CDIO_FS_UNKNOWN ),
true );
if( NULL == cd_drives ) return NULL;
if( cd_drives[0] == NULL )
if( !psz_source || 0==strlen(psz_source) )
{
cdio_free_device_list( cd_drives );
return NULL;
free( psz_source );
/* Scan for a CD-ROM drive with a VCD in it. */
char **cd_drives = cdio_get_devices_with_cap(NULL,
(CDIO_FS_ANAL_SVCD|CDIO_FS_ANAL_CVD
|CDIO_FS_ANAL_VIDEOCD|CDIO_FS_UNKNOWN),
true);
if( NULL == cd_drives ) return NULL;
if( cd_drives[0] == NULL )
{
cdio_free_device_list( cd_drives );
return NULL;
}
psz_source = strdup( cd_drives[0] );
cdio_free_device_list( cd_drives );
}
psz_source = strdup( cd_drives[0] );
cdio_free_device_list( cd_drives );
}
}
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_MRL),
......@@ -673,65 +665,65 @@ void
VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
const vcdinfo_itemid_t *p_itemid )
{
vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_LSN),
"i_lsn: %lu, track: %d", (long unsigned int) i_lsn,
i_track );
vcdplayer_set_origin(p_access, i_lsn, i_track, p_itemid);
switch (p_vcdplayer->play_item.type) {
case VCDINFO_ITEM_TYPE_ENTRY:
VCDUpdateVar( p_access, p_itemid->num, VLC_VAR_SETVALUE,
"chapter", _("Entry"), "Setting entry/segment");
p_access->info.i_title = i_track-1;
if (p_vcdplayer->b_track_length)
{
p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
p_access->info.i_pos = (int64_t) M2F2_SECTOR_SIZE *
(vcdinfo_get_track_lsn(p_vcdplayer->vcd, i_track) - i_lsn);
} else {
p_access->info.i_size = M2F2_SECTOR_SIZE * (int64_t)
vcdinfo_get_entry_sect_count(p_vcdplayer->vcd, p_itemid->num);
p_access->info.i_pos = 0;
}
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "size: %llu, pos: %llu",
p_access->info.i_size, p_access->info.i_pos );
p_access->info.i_seekpoint = p_itemid->num;
break;
case VCDINFO_ITEM_TYPE_SEGMENT:
VCDUpdateVar( p_access, p_itemid->num, VLC_VAR_SETVALUE,
"chapter", _("Segment"), "Setting entry/segment");
/* The last title entry is the for segments (when segments exist
and they must here. The segment seekpoints are stored after
the entry seekpoints and (zeroed) lid seekpoints.
*/
p_access->info.i_title = p_vcdplayer->i_titles - 1;
p_access->info.i_size = 0; /* No seeking on stills, please. */
p_access->info.i_pos = 0;
p_access->info.i_seekpoint = p_vcdplayer->i_entries
+ p_vcdplayer->i_lids + p_itemid->num;
break;
case VCDINFO_ITEM_TYPE_TRACK:
p_access->info.i_title = i_track-1;
p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
p_access->info.i_pos = 0;
p_access->info.i_seekpoint = vcdinfo_track_get_entry(p_vcdplayer->vcd,
i_track);
break;
default:
msg_Warn( p_access, "can't set origin for play type %d",
p_vcdplayer->play_item.type );
}
p_access->info.i_update = INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE
|INPUT_UPDATE_SEEKPOINT;
VCDUpdateTitle( p_access );
vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_LSN),
"i_lsn: %lu, track: %d", (long unsigned int) i_lsn, i_track );
vcdplayer_set_origin(p_access, i_lsn, i_track, p_itemid);
switch (p_vcdplayer->play_item.type)
{
case VCDINFO_ITEM_TYPE_ENTRY:
VCDUpdateVar( p_access, p_itemid->num, VLC_VAR_SETVALUE,
"chapter", _("Entry"), "Setting entry/segment");
p_access->info.i_title = i_track-1;
if (p_vcdplayer->b_track_length)
{
p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
p_access->info.i_pos = (int64_t) M2F2_SECTOR_SIZE *
(vcdinfo_get_track_lsn(p_vcdplayer->vcd, i_track)-i_lsn);
} else {
p_access->info.i_size = M2F2_SECTOR_SIZE * (int64_t)
vcdinfo_get_entry_sect_count(p_vcdplayer->vcd,p_itemid->num);
p_access->info.i_pos = 0;
}
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "size: %llu, pos: %llu",
p_access->info.i_size, p_access->info.i_pos );
p_access->info.i_seekpoint = p_itemid->num;
break;
case VCDINFO_ITEM_TYPE_SEGMENT:
VCDUpdateVar( p_access, p_itemid->num, VLC_VAR_SETVALUE,
"chapter", _("Segment"), "Setting entry/segment");
/* The last title entry is the for segments (when segments exist
and they must here. The segment seekpoints are stored after
the entry seekpoints and (zeroed) lid seekpoints.
*/
p_access->info.i_title = p_vcdplayer->i_titles - 1;
p_access->info.i_size = 0; /* No seeking on stills, please. */
p_access->info.i_pos = 0;
p_access->info.i_seekpoint = p_vcdplayer->i_entries
+ p_vcdplayer->i_lids + p_itemid->num;
break;
case VCDINFO_ITEM_TYPE_TRACK:
p_access->info.i_title = i_track-1;
p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
p_access->info.i_pos = 0;
p_access->info.i_seekpoint = vcdinfo_track_get_entry(p_vcdplayer->vcd,
i_track);
break;
default:
msg_Warn( p_access, "can't set origin for play type %d",
p_vcdplayer->play_item.type );
}
p_access->info.i_update = INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE
|INPUT_UPDATE_SEEKPOINT;
VCDUpdateTitle( p_access );
}
......@@ -753,10 +745,11 @@ vcd_Open( vlc_object_t *p_this, const char *psz_dev )
if( !psz_dev ) return NULL;
actual_dev= ToLocaleDup(psz_dev);
if ( vcdinfo_open(&p_vcdobj, &actual_dev, DRIVER_UNKNOWN, NULL) !=
VCDINFO_OPEN_VCD) {
free(actual_dev);
return NULL;
if( vcdinfo_open(&p_vcdobj, &actual_dev, DRIVER_UNKNOWN, NULL) !=
VCDINFO_OPEN_VCD)
{
free(actual_dev);
return NULL;
}
free(actual_dev);
......@@ -764,41 +757,49 @@ vcd_Open( vlc_object_t *p_this, const char *psz_dev )
Save summary info on tracks, segments and entries...
*/
if ( 0 < (p_vcdplayer->i_tracks = vcdinfo_get_num_tracks(p_vcdobj)) ) {
p_vcdplayer->track = (vcdplayer_play_item_info_t *)
calloc(p_vcdplayer->i_tracks, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcdplayer->i_tracks; i++) {
unsigned int track_num=i+1;
p_vcdplayer->track[i].size =
vcdinfo_get_track_sect_count(p_vcdobj, track_num);
p_vcdplayer->track[i].start_LSN =
vcdinfo_get_track_lsn(p_vcdobj, track_num);
}
if ( 0 < (p_vcdplayer->i_tracks = vcdinfo_get_num_tracks(p_vcdobj)) )
{
p_vcdplayer->track = (vcdplayer_play_item_info_t *)
calloc(p_vcdplayer->i_tracks, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcdplayer->i_tracks; i++)
{
unsigned int track_num=i+1;
p_vcdplayer->track[i].size =
vcdinfo_get_track_sect_count(p_vcdobj, track_num);
p_vcdplayer->track[i].start_LSN =
vcdinfo_get_track_lsn(p_vcdobj, track_num);
}
} else
p_vcdplayer->track = NULL;
p_vcdplayer->track = NULL;
if ( 0 < (p_vcdplayer->i_entries = vcdinfo_get_num_entries(p_vcdobj)) ) {
p_vcdplayer->entry = (vcdplayer_play_item_info_t *)
calloc(p_vcdplayer->i_entries, sizeof(vcdplayer_play_item_info_t));
if( 0 < (p_vcdplayer->i_entries = vcdinfo_get_num_entries(p_vcdobj)) )
{
p_vcdplayer->entry = (vcdplayer_play_item_info_t *)
calloc(p_vcdplayer->i_entries, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcdplayer->i_entries; i++) {
p_vcdplayer->entry[i].size =
vcdinfo_get_entry_sect_count(p_vcdobj, i);
p_vcdplayer->entry[i].start_LSN = vcdinfo_get_entry_lsn(p_vcdobj, i);
}
for (i=0; i<p_vcdplayer->i_entries; i++)
{
p_vcdplayer->entry[i].size =
vcdinfo_get_entry_sect_count(p_vcdobj, i);
p_vcdplayer->entry[i].start_LSN =
vcdinfo_get_entry_lsn(p_vcdobj, i);
}
} else
p_vcdplayer->entry = NULL;
if ( 0 < (p_vcdplayer->i_segments = vcdinfo_get_num_segments(p_vcdobj)) ) {
p_vcdplayer->segment = (vcdplayer_play_item_info_t *)
calloc(p_vcdplayer->i_segments, sizeof(vcdplayer_play_item_info_t));
if ( 0 < (p_vcdplayer->i_segments = vcdinfo_get_num_segments(p_vcdobj)) )
{
p_vcdplayer->segment = (vcdplayer_play_item_info_t *)
calloc(p_vcdplayer->i_segments, sizeof(vcdplayer_play_item_info_t));
for (i=0; i<p_vcdplayer->i_segments; i++) {
p_vcdplayer->segment[i].size =
vcdinfo_get_seg_sector_count(p_vcdobj, i);
p_vcdplayer->segment[i].start_LSN = vcdinfo_get_seg_lsn(p_vcdobj, i);
}
for (i=0; i<p_vcdplayer->i_segments; i++)
{
p_vcdplayer->segment[i].size =
vcdinfo_get_seg_sector_count(p_vcdobj, i);
p_vcdplayer->segment[i].start_LSN =
vcdinfo_get_seg_lsn(p_vcdobj, i);
}
} else
p_vcdplayer->segment = NULL;
......@@ -813,18 +814,20 @@ VCDUpdateVar( access_t *p_access, int i_num, int i_action,
const char *p_varname, char *p_label,
const char *p_debug_label)
{
vlc_value_t val;
val.i_int = i_num;
if (p_access) {
const vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
dbg_print( INPUT_DBG_PBC, "%s %d", p_debug_label, i_num );
}
if (p_label) {
vlc_value_t text;
text.psz_string = p_label;
var_Change( p_access, p_varname, VLC_VAR_SETTEXT, &text, NULL );
}
var_Change( p_access, p_varname, i_action, &val, NULL );
vlc_value_t val;
val.i_int = i_num;
if( p_access )
{
const vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_vcd_access->p_sys;
dbg_print( INPUT_DBG_PBC, "%s %d", p_debug_label, i_num );
}
if( p_label )
{
vlc_value_t text;
text.psz_string = p_label;
var_Change( p_access, p_varname, VLC_VAR_SETTEXT, &text, NULL );
}
var_Change( p_access, p_varname, i_action, &val, NULL );
}
......@@ -879,8 +882,8 @@ VCDOpen ( vlc_object_t *p_this )
if ( NULL == psz_source )
{
free( p_vcdplayer );
return( VLC_EGENERIC );
free( p_vcdplayer );
return( VLC_EGENERIC );
}
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "source: %s: mrl: %s",
......@@ -912,7 +915,8 @@ VCDOpen ( vlc_object_t *p_this )
/* Get track information. */
p_vcdplayer->i_tracks = vcdinfo_get_num_tracks(p_vcdplayer->vcd);
if( p_vcdplayer->i_tracks < 1 || CDIO_INVALID_TRACK == p_vcdplayer->i_tracks ) {
if( p_vcdplayer->i_tracks<1 || CDIO_INVALID_TRACK==p_vcdplayer->i_tracks )
{
vcdinfo_close( p_vcdplayer->vcd );
LOG_ERR ("no movie tracks found" );
goto err_exit;
......@@ -950,9 +954,8 @@ VCDOpen ( vlc_object_t *p_this )
p_access->psz_demux = strdup( "ps" );
#ifdef FIXED
if (play_single_item)
VCDFixupPlayList( p_access, p_vcd, psz_source, &itemid,
play_single_item );
if( play_single_item )
VCDFixupPlayList(p_access,p_vcd,psz_source,&itemid,play_single_item);
#endif
#ifdef FIXED
......@@ -984,10 +987,10 @@ VCDClose ( vlc_object_t *p_this )
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "VCDClose" );
{
unsigned int i;
for (i=0 ; i<p_vcdplayer->i_titles; i++)
if (p_vcdplayer->p_title[i])
free(p_vcdplayer->p_title[i]->psz_name);
unsigned int i;
for (i=0 ; i<p_vcdplayer->i_titles; i++)
if (p_vcdplayer->p_title[i])
free(p_vcdplayer->p_title[i]->psz_name);
}
vcdinfo_close( p_vcdplayer->vcd );
......@@ -1024,186 +1027,167 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
/* Pass back a copy of meta information that was gathered when we
during the Open/Initialize call.
*/
case ACCESS_GET_META:
{
dbg_print( INPUT_DBG_EVENT, "get meta info" );
case ACCESS_GET_META:
dbg_print( INPUT_DBG_EVENT, "get meta info" );
#if 0
if( p_vcdplayer->p_meta )
{
vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg(args,vlc_meta_t**);
if( p_vcdplayer->p_meta )
{
vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg(args,vlc_meta_t**);
*pp_meta = vlc_meta_Duplicate( p_vcdplayer->p_meta );
dbg_print( INPUT_DBG_META, "%s", "Meta copied" );
}
else
*pp_meta = vlc_meta_Duplicate( p_vcdplayer->p_meta );
dbg_print( INPUT_DBG_META, "%s", "Meta copied" );
}
else
#endif
msg_Warn( p_access, "tried to copy NULL meta info" );
msg_Warn( p_access, "tried to copy NULL meta info" );
return VLC_SUCCESS;
}
return VLC_EGENERIC;
return VLC_SUCCESS;
case ACCESS_CAN_SEEK:
case ACCESS_CAN_FASTSEEK:
case ACCESS_CAN_PAUSE:
case ACCESS_CAN_CONTROL_PACE:
{
bool *pb_bool = (bool*)va_arg( args, bool* );
case ACCESS_CAN_SEEK:
case ACCESS_CAN_FASTSEEK:
case ACCESS_CAN_PAUSE:
case ACCESS_CAN_CONTROL_PACE:
dbg_print( INPUT_DBG_EVENT,
"seek/fastseek/pause/can_control_pace" );
*pb_bool = true;
return VLC_SUCCESS;
break;
}
dbg_print( INPUT_DBG_EVENT,
"seek/fastseek/pause/can_control_pace" );
*((bool*)va_arg( args, bool* )) = true;
return VLC_SUCCESS;
/* */
case ACCESS_GET_PTS_DELAY:
*(int64_t*)va_arg(args,int64_t *) = MILLISECONDS_PER_SEC *
var_GetInteger( p_access, MODULE_STRING "-caching" );
dbg_print( INPUT_DBG_EVENT, "GET PTS DELAY" );
return VLC_SUCCESS;
/* */
case ACCESS_GET_PTS_DELAY:
case ACCESS_SET_PAUSE_STATE:
dbg_print( INPUT_DBG_EVENT, "SET PAUSE STATE" );
return VLC_SUCCESS;
case ACCESS_GET_TITLE_INFO:
{
unsigned int psz_mrl_max = strlen(VCD_MRL_PREFIX)
+ strlen(p_vcdplayer->psz_source) + sizeof("@E999")+3;
input_title_t ***ppp_title
= (input_title_t***)va_arg( args, input_title_t*** );
char *psz_mrl = malloc( psz_mrl_max );
unsigned int i;
pi_int = (int*)va_arg( args, int* );
dbg_print( INPUT_DBG_EVENT, "GET TITLE: i_titles %d",
p_vcdplayer->i_titles );
if( psz_mrl )
{
int64_t *pi_64 = (int64_t*)va_arg( args, int64_t * );
*pi_64 = var_GetInteger( p_access, MODULE_STRING "-caching" )
* MILLISECONDS_PER_SEC;
dbg_print( INPUT_DBG_EVENT, "GET PTS DELAY" );
return VLC_SUCCESS;
break;
snprintf(psz_mrl, psz_mrl_max, "%s%s",
VCD_MRL_PREFIX, p_vcdplayer->psz_source);
VCDMetaInfo( p_access, psz_mrl );
free(psz_mrl);
}
/* */
case ACCESS_SET_PAUSE_STATE:
dbg_print( INPUT_DBG_EVENT, "SET PAUSE STATE" );
/* Duplicate title info */
if( p_vcdplayer->i_titles == 0 )
{
*pi_int = 0; ppp_title = NULL;
return VLC_SUCCESS;
break;
}
*pi_int = p_vcdplayer->i_titles;
*ppp_title = malloc(sizeof(input_title_t **)*p_vcdplayer->i_titles);
case ACCESS_GET_TITLE_INFO:
{
unsigned int psz_mrl_max = strlen(VCD_MRL_PREFIX)
+ strlen(p_vcdplayer->psz_source) + sizeof("@E999")+3;
input_title_t ***ppp_title
= (input_title_t***)va_arg( args, input_title_t*** );
char *psz_mrl = malloc( psz_mrl_max );
unsigned int i;
if (!*ppp_title) return VLC_ENOMEM;
pi_int = (int*)va_arg( args, int* );
for( i = 0; i < p_vcdplayer->i_titles; i++ )
if( p_vcdplayer->p_title[i] )
(*ppp_title)[i] =
vlc_input_title_Duplicate(p_vcdplayer->p_title[i]);
}
break;
dbg_print( INPUT_DBG_EVENT, "GET TITLE: i_titles %d",
p_vcdplayer->i_titles );
case ACCESS_SET_TITLE:
i = (int)va_arg( args, int );
if( psz_mrl )
{
snprintf(psz_mrl, psz_mrl_max, "%s%s",
VCD_MRL_PREFIX, p_vcdplayer->psz_source);
VCDMetaInfo( p_access, psz_mrl );
free(psz_mrl);
}
dbg_print( INPUT_DBG_EVENT, "set title %d" , i);
if( i != p_access->info.i_title )
{
vcdinfo_itemid_t itemid;
track_t i_track = i+1;
unsigned int i_entry =
vcdinfo_track_get_entry(p_vcdplayer->vcd,i_track);
/* Duplicate title info */
if( p_vcdplayer->i_titles == 0 )
if( i < p_vcdplayer->i_tracks )
{
*pi_int = 0; ppp_title = NULL;
return VLC_SUCCESS;
/* FIXME! For now we are assuming titles are only
tracks and that track == title+1 */
itemid.num = i_track;
itemid.type = VCDINFO_ITEM_TYPE_TRACK;
}
*pi_int = p_vcdplayer->i_titles;
*ppp_title = malloc( sizeof( input_title_t **)
* p_vcdplayer->i_titles );
if (!*ppp_title) return VLC_ENOMEM;
for( i = 0; i < p_vcdplayer->i_titles; i++ )
else
{
if ( p_vcdplayer->p_title[i] )
(*ppp_title)[i] =
vlc_input_title_Duplicate( p_vcdplayer->p_title[i] );
/* FIXME! i_tracks+2 are Segments, but we need to be able
to figure out which segment of that. i_tracks+1 is
either Segments (if no LIDs) or LIDs otherwise. Again
need a way to get the LID number. */
msg_Warn(p_access,"Trying to set track (%u) beyond end "
"of last track (%u).",i+1,p_vcdplayer->i_tracks);
return VLC_EGENERIC;
}
}
break;
case ACCESS_SET_TITLE:
i = (int)va_arg( args, int );
VCDSetOrigin(p_access,
vcdinfo_get_entry_lsn(p_vcdplayer->vcd,i_entry),
i_track, &itemid);
}
break;
dbg_print( INPUT_DBG_EVENT, "set title %d" , i);
if( i != p_access->info.i_title )
{
vcdinfo_itemid_t itemid;
track_t i_track = i+1;
unsigned int i_entry =
vcdinfo_track_get_entry( p_vcdplayer->vcd, i_track);
case ACCESS_SET_SEEKPOINT:
{
input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
unsigned int i = (unsigned int)va_arg( args, unsigned int );
if( i < p_vcdplayer->i_tracks )
{
/* FIXME! For now we are assuming titles are only
tracks and that track == title+1 */
itemid.num = i_track;
itemid.type = VCDINFO_ITEM_TYPE_TRACK;
}
else
dbg_print( INPUT_DBG_EVENT, "set seekpoint %d", i );
if( t->i_seekpoint > 0 )
{
/* FIXME! i_tracks+2 are Segments, but we need to
be able to figure out which segment of that.
i_tracks+1 is either Segments (if no LIDs) or
LIDs otherwise. Again need a way to get the LID
number. */
msg_Warn( p_access,
"Trying to set track (%u) beyond end of last track (%u).",
i+1, p_vcdplayer->i_tracks );
return VLC_EGENERIC;
}
VCDSetOrigin(p_access,
vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i_entry),
i_track, &itemid );
}
break;
track_t i_track = p_access->info.i_title+1;
lsn_t lsn;
case ACCESS_SET_SEEKPOINT:
{
input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
unsigned int i = (unsigned int)va_arg( args, unsigned int );
/* FIXME! For now we are assuming titles are only tracks and
that track == title+1 and we the play item is entries (not
tracks or lids). We need to generalize all of this.
*/
dbg_print( INPUT_DBG_EVENT, "set seekpoint %d", i );
if( t->i_seekpoint > 0 )
if (i < p_vcdplayer->i_entries)
{
track_t i_track = p_access->info.i_title+1;
lsn_t lsn;
/* FIXME! For now we are assuming titles are only
tracks and that track == title+1 and we the play
item is entries (not tracks or lids).
We need to generalize all of this.
*/
if (i < p_vcdplayer->i_entries)
{
p_vcdplayer->play_item.num = i;
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_ENTRY;
lsn = vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i);
} else if ( i < p_vcdplayer->i_entries + p_vcdplayer->i_lids )
{
p_vcdplayer->play_item.num = i
= i - p_vcdplayer->i_entries;
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_LID;
lsn = 0;
} else
{
p_vcdplayer->play_item.num = i
p_vcdplayer->play_item.num = i;
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_ENTRY;
lsn = vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i);
} else if ( i < p_vcdplayer->i_entries + p_vcdplayer->i_lids )
{
p_vcdplayer->play_item.num = i = i - p_vcdplayer->i_entries;
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_LID;
lsn = 0;
} else
{
p_vcdplayer->play_item.num = i
= i - p_vcdplayer->i_entries - p_vcdplayer->i_lids;
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_SEGMENT;
lsn = vcdinfo_get_seg_lsn(p_vcdplayer->vcd, i);
}
VCDSetOrigin( p_access,
vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i),
i_track, &(p_vcdplayer->play_item) );
p_vcdplayer->play_item.type = VCDINFO_ITEM_TYPE_SEGMENT;
lsn = vcdinfo_get_seg_lsn(p_vcdplayer->vcd, i);
}
return VLC_SUCCESS;
VCDSetOrigin(p_access,vcdinfo_get_entry_lsn(p_vcdplayer->vcd,i),
i_track,&(p_vcdplayer->play_item));
}
return VLC_SUCCESS;
}
case ACCESS_SET_PRIVATE_ID_STATE:
dbg_print( INPUT_DBG_EVENT, "set private id" );
return VLC_EGENERIC;
case ACCESS_SET_PRIVATE_ID_STATE:
dbg_print( INPUT_DBG_EVENT, "set private id" );
return VLC_EGENERIC;
default:
msg_Warn( p_access, "unimplemented query in control" );
return VLC_EGENERIC;
default:
msg_Warn( p_access, "unimplemented query in control" );
return VLC_EGENERIC;
}
return VLC_SUCCESS;
......
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