[vlc-commits] vcd: switch to ACCESS_GET_(TITLE|SEEKPOINT)
Rémi Denis-Courmont
git at videolan.org
Mon Aug 26 21:47:58 CEST 2013
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Aug 26 21:24:49 2013 +0300| [3e5a8ba4caf989fed3c4b32646884f9ede5ff3f6] | committer: Rémi Denis-Courmont
vcd: switch to ACCESS_GET_(TITLE|SEEKPOINT)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3e5a8ba4caf989fed3c4b32646884f9ede5ff3f6
---
modules/access/vcd/vcd.c | 80 ++++++++++++++++++++++++----------------------
1 file changed, 42 insertions(+), 38 deletions(-)
diff --git a/modules/access/vcd/vcd.c b/modules/access/vcd/vcd.c
index 737643f..ea2675f 100644
--- a/modules/access/vcd/vcd.c
+++ b/modules/access/vcd/vcd.c
@@ -70,6 +70,8 @@ struct access_sys_t
/* Title infos */
int i_titles;
input_title_t *title[99]; /* No more that 99 track in a vcd ? */
+ int i_current_title;
+ int i_current_seekpoint;
int i_sector; /* Current Sector */
int *p_sectors; /* Track sectors */
@@ -196,8 +198,8 @@ static int Open( vlc_object_t *p_this )
p_access->info.b_eof = false;
- p_access->info.i_title = i_title;
- p_access->info.i_seekpoint = i_chapter;
+ p_sys->i_current_title = i_title;
+ p_sys->i_current_seekpoint = i_chapter;
p_access->info.i_pos = (uint64_t)( p_sys->i_sector - p_sys->p_sectors[1+i_title] ) *
VCD_DATA_SIZE;
@@ -231,7 +233,6 @@ static int Control( access_t *p_access, int i_query, va_list args )
{
access_sys_t *p_sys = p_access->p_sys;
input_title_t ***ppp_title;
- int i;
switch( i_query )
{
@@ -245,7 +246,7 @@ static int Control( access_t *p_access, int i_query, va_list args )
case ACCESS_GET_SIZE:
*va_arg( args, uint64_t * ) =
- p_sys->title[p_access->info.i_title]->i_size;
+ p_sys->title[p_sys->i_current_title]->i_size;
break;
/* */
@@ -264,42 +265,49 @@ static int Control( access_t *p_access, int i_query, va_list args )
/* Duplicate title infos */
*ppp_title = malloc( sizeof(input_title_t **) * p_sys->i_titles );
- for( i = 0; i < p_sys->i_titles; i++ )
- {
+ for( int i = 0; i < p_sys->i_titles; i++ )
(*ppp_title)[i] = vlc_input_title_Duplicate( p_sys->title[i] );
- }
+ break;
+
+ case ACCESS_GET_TITLE:
+ *va_arg( args, unsigned * ) = p_sys->i_current_title;
+ break;
+
+ case ACCESS_GET_SEEKPOINT:
+ *va_arg( args, unsigned * ) = p_sys->i_current_seekpoint;
break;
case ACCESS_SET_TITLE:
- i = va_arg( args, int );
- if( i != p_access->info.i_title )
+ {
+ int i = va_arg( args, int );
+ if( i != p_sys->i_current_title )
{
/* Update info */
- p_access->info.i_update |=
- INPUT_UPDATE_TITLE|INPUT_UPDATE_SEEKPOINT;
- p_access->info.i_title = i;
- p_access->info.i_seekpoint = 0;
- p_access->info.i_pos = 0;
+ p_sys->i_current_title = i;
+ p_sys->i_current_seekpoint = 0;
+ p_access->info.i_pos = 0;
/* Next sector to read */
p_sys->i_sector = p_sys->p_sectors[1+i];
}
break;
+ }
case ACCESS_SET_SEEKPOINT:
{
- input_title_t *t = p_sys->title[p_access->info.i_title];
- i = va_arg( args, int );
+ int i = va_arg( args, int );
+ unsigned i_title = p_sys->i_current_title;
+ input_title_t *t = p_sys->title[i_title];
+
if( t->i_seekpoint > 0 )
{
- p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
- p_access->info.i_seekpoint = i;
+ p_sys->i_current_seekpoint = i;
- p_sys->i_sector = p_sys->p_sectors[1+p_access->info.i_title] +
+ p_sys->i_sector = p_sys->p_sectors[1 + i_title] +
t->seekpoint[i]->i_byte_offset / VCD_DATA_SIZE;
p_access->info.i_pos = (uint64_t)(p_sys->i_sector -
- p_sys->p_sectors[1+p_access->info.i_title]) *VCD_DATA_SIZE;
+ p_sys->p_sectors[1 + i_title]) *VCD_DATA_SIZE;
}
break;
}
@@ -323,26 +331,24 @@ static block_t *Block( access_t *p_access )
if( p_access->info.b_eof ) return NULL;
/* Check end of title */
- while( p_sys->i_sector >= p_sys->p_sectors[p_access->info.i_title + 2] )
+ while( p_sys->i_sector >= p_sys->p_sectors[p_sys->i_current_title + 2] )
{
- if( p_access->info.i_title + 2 >= p_sys->i_titles )
+ if( p_sys->i_current_title + 2 >= p_sys->i_titles )
{
p_access->info.b_eof = true;
return NULL;
}
- p_access->info.i_update |=
- INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
- p_access->info.i_title++;
- p_access->info.i_seekpoint = 0;
+ p_sys->i_current_title++;
+ p_sys->i_current_seekpoint = 0;
p_access->info.i_pos = 0;
}
/* Don't read after the end of a title */
if( p_sys->i_sector + i_blocks >=
- p_sys->p_sectors[p_access->info.i_title + 2] )
+ p_sys->p_sectors[p_sys->i_current_title + 2] )
{
- i_blocks = p_sys->p_sectors[p_access->info.i_title + 2 ] - p_sys->i_sector;
+ i_blocks = p_sys->p_sectors[p_sys->i_current_title + 2 ] - p_sys->i_sector;
}
/* Do the actual reading */
@@ -368,17 +374,16 @@ static block_t *Block( access_t *p_access )
/* Update seekpoints */
for( int i_read = 0; i_read < i_blocks; i_read++ )
{
- input_title_t *t = p_sys->title[p_access->info.i_title];
+ input_title_t *t = p_sys->title[p_sys->i_current_title];
if( t->i_seekpoint > 0 &&
- p_access->info.i_seekpoint + 1 < t->i_seekpoint &&
+ p_sys->i_current_seekpoint + 1 < t->i_seekpoint &&
(int64_t) /* Unlikely to go over 8192 PetaB */
(p_access->info.i_pos + i_read * VCD_DATA_SIZE) >=
- t->seekpoint[p_access->info.i_seekpoint+1]->i_byte_offset )
+ t->seekpoint[p_sys->i_current_seekpoint + 1]->i_byte_offset )
{
msg_Dbg( p_access, "seekpoint change" );
- p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
- p_access->info.i_seekpoint++;
+ p_sys->i_current_seekpoint++;
}
}
@@ -395,13 +400,13 @@ static block_t *Block( access_t *p_access )
static int Seek( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
- input_title_t *t = p_sys->title[p_access->info.i_title];
+ input_title_t *t = p_sys->title[p_sys->i_current_title];
int i_seekpoint;
/* Next sector to read */
p_access->info.i_pos = i_pos;
p_sys->i_sector = i_pos / VCD_DATA_SIZE +
- p_sys->p_sectors[p_access->info.i_title + 1];
+ p_sys->p_sectors[p_sys->i_current_title + 1];
/* Update current seekpoint */
for( i_seekpoint = 0; i_seekpoint < t->i_seekpoint; i_seekpoint++ )
@@ -411,11 +416,10 @@ static int Seek( access_t *p_access, uint64_t i_pos )
i_pos < (uint64_t)t->seekpoint[i_seekpoint + 1]->i_byte_offset ) break;
}
- if( i_seekpoint != p_access->info.i_seekpoint )
+ if( i_seekpoint != p_sys->i_current_seekpoint )
{
msg_Dbg( p_access, "seekpoint change" );
- p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
- p_access->info.i_seekpoint = i_seekpoint;
+ p_sys->i_current_seekpoint = i_seekpoint;
}
/* Reset eof */
More information about the vlc-commits
mailing list