+ switch( i_query )
+ {
+ /* */
+ case ACCESS_CAN_SEEK:
+ case ACCESS_CAN_FASTSEEK:
+ case ACCESS_CAN_PAUSE:
+ case ACCESS_CAN_CONTROL_PACE:
+ *va_arg( args, bool* ) = true;
+ break;
+
+ /* */
+ case ACCESS_GET_PTS_DELAY:
+ *va_arg( args, int64_t * )
+ = var_GetInteger(p_access,"vcd-caching") * 1000;
+ break;
+
+ /* */
+ case ACCESS_SET_PAUSE_STATE:
+ break;
+
+ case ACCESS_GET_TITLE_INFO:
+ ppp_title = va_arg( args, input_title_t*** );
+ *va_arg( args, int* ) = p_sys->i_titles;
+
+ /* Duplicate title infos */
+ *ppp_title = malloc( sizeof(input_title_t **) * p_sys->i_titles );
+ for( i = 0; i < p_sys->i_titles; i++ )
+ {
+ (*ppp_title)[i] = vlc_input_title_Duplicate( p_sys->title[i] );
+ }
+ break;
+
+ case ACCESS_SET_TITLE:
+ i = va_arg( args, int );
+ if( i != p_access->info.i_title )
+ {
+ /* Update info */
+ p_access->info.i_update |=
+ INPUT_UPDATE_TITLE|INPUT_UPDATE_SEEKPOINT|INPUT_UPDATE_SIZE;
+ p_access->info.i_title = i;
+ p_access->info.i_seekpoint = 0;
+ p_access->info.i_size = p_sys->title[i]->i_size;
+ 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 );
+ if( t->i_seekpoint > 0 )
+ {
+ p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
+ p_access->info.i_seekpoint = i;
+
+ p_sys->i_sector = p_sys->p_sectors[1+p_access->info.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;
+ }
+ return VLC_SUCCESS;
+ }