[vlc-commits] vcdx: switch to ACCESS_GET_(TITLE|SEEKPOINT)
Rémi Denis-Courmont
git at videolan.org
Mon Aug 26 21:47:59 CEST 2013
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Aug 26 21:56:45 2013 +0300| [15e2e50ec8e2a6443fb1cf6d466d39c8fb6b9d62] | committer: Rémi Denis-Courmont
vcdx: switch to ACCESS_GET_(TITLE|SEEKPOINT)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=15e2e50ec8e2a6443fb1cf6d466d39c8fb6b9d62
---
modules/access/vcdx/access.c | 49 +++++++++++++++++++++------------------
modules/access/vcdx/vcdplayer.h | 2 ++
2 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/modules/access/vcdx/access.c b/modules/access/vcdx/access.c
index 497122e..fda6599 100644
--- a/modules/access/vcdx/access.c
+++ b/modules/access/vcdx/access.c
@@ -242,7 +242,7 @@ VCDSeek( access_t * p_access, uint64_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];
+ const input_title_t *t = p_vcdplayer->p_title[p_vcdplayer->i_cur_title];
unsigned int i_entry = VCDINFO_INVALID_ENTRY;
int i_seekpoint;
@@ -297,13 +297,10 @@ VCDSeek( access_t * p_access, uint64_t i_pos )
}
/* 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;
- }
+ if( p_vcdplayer->i_cur_chapter != i_seekpoint )
+ dbg_print( (INPUT_DBG_SEEK), "seekpoint change %d",
+ i_seekpoint );
+ p_vcdplayer->i_cur_chapter = i_seekpoint;
}
p_access->info.b_eof = false;
return VLC_SUCCESS;
@@ -672,7 +669,7 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
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;
+ p_vcdplayer->i_cur_title = i_track - 1;
if (p_vcdplayer->b_track_length)
{
p_vcdplayer->size = p_vcdplayer->p_title[i_track-1]->i_size;
@@ -685,7 +682,7 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
}
dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "size: %"PRIu64", pos: %"PRIu64,
p_vcdplayer->size, p_access->info.i_pos );
- p_access->info.i_seekpoint = p_itemid->num;
+ p_vcdplayer->i_cur_chapter = p_itemid->num;
break;
case VCDINFO_ITEM_TYPE_SEGMENT:
@@ -695,18 +692,18 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
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_vcdplayer->i_cur_title = p_vcdplayer->i_titles - 1;
p_vcdplayer->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_cur_chapter = 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_vcdplayer->size = p_vcdplayer->p_title[i_track-1]->i_size;
+ p_vcdplayer->i_cur_title = i_track - 1;
+ p_vcdplayer->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,
+ p_vcdplayer->i_cur_chapter = vcdinfo_track_get_entry(p_vcdplayer->vcd,
i_track);
break;
@@ -715,8 +712,6 @@ VCDSetOrigin( access_t *p_access, lsn_t i_lsn, track_t i_track,
p_vcdplayer->play_item.type );
}
- p_access->info.i_update = INPUT_UPDATE_TITLE|INPUT_UPDATE_SEEKPOINT;
-
VCDUpdateTitle( p_access );
}
@@ -854,8 +849,6 @@ VCDOpen ( vlc_object_t *p_this )
p_access->info.i_pos = 0;
p_access->info.b_eof = false;
- p_access->info.i_title = 0;
- p_access->info.i_seekpoint = 0;
p_vcdplayer = malloc( sizeof(vcdplayer_t) );
@@ -893,6 +886,8 @@ VCDOpen ( vlc_object_t *p_this )
// p_vcdplayer->p_meta = vlc_meta_New();
p_vcdplayer->p_segments = NULL;
p_vcdplayer->p_entries = NULL;
+ p_vcdplayer->i_cur_title = 0;
+ p_vcdplayer->i_cur_chapter = 0;
/* set up input */
@@ -1082,14 +1077,22 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
if( p_vcdplayer->p_title[i] )
(*ppp_title)[i] =
vlc_input_title_Duplicate(p_vcdplayer->p_title[i]);
+ break;
}
- break;
+
+ case ACCESS_GET_TITLE:
+ *va_arg( args, unsigned * ) = p_vcdplayer->i_cur_title;
+ break;
+
+ case ACCESS_GET_SEEKPOINT:
+ *va_arg( args, unsigned * ) = p_vcdplayer->i_cur_chapter;
+ break;
case ACCESS_SET_TITLE:
i = (int)va_arg( args, int );
dbg_print( INPUT_DBG_EVENT, "set title %d" , i);
- if( i != p_access->info.i_title )
+ if( i != p_vcdplayer->i_cur_title )
{
vcdinfo_itemid_t itemid;
track_t i_track = i+1;
@@ -1123,13 +1126,13 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
case ACCESS_SET_SEEKPOINT:
{
- input_title_t *t = p_vcdplayer->p_title[p_access->info.i_title];
+ input_title_t *t = p_vcdplayer->p_title[p_vcdplayer->i_cur_title];
unsigned int i = (unsigned int)va_arg( args, unsigned int );
dbg_print( INPUT_DBG_EVENT, "set seekpoint %d", i );
if( t->i_seekpoint > 0 )
{
- track_t i_track = p_access->info.i_title+1;
+ track_t i_track = p_vcdplayer->i_cur_title + 1;
lsn_t lsn;
/* FIXME! For now we are assuming titles are only tracks and
diff --git a/modules/access/vcdx/vcdplayer.h b/modules/access/vcdx/vcdplayer.h
index 6fd0458..122060e 100644
--- a/modules/access/vcdx/vcdplayer.h
+++ b/modules/access/vcdx/vcdplayer.h
@@ -147,6 +147,8 @@ typedef struct vcdplayer_input_s
vcdplayer_play_item_info_t *entry;
unsigned int i_titles; /* # of navigatable titles. */
+ unsigned int i_cur_title;
+ unsigned int i_cur_chapter;
/*
# tracks + menu for segments + menu for LIDs
More information about the vlc-commits
mailing list