This is intended for VDR directories and Video CDs.
VLC_API int demux_vaControlHelper( stream_t *, int64_t i_start, int64_t i_end, int64_t i_bitrate, int i_align, int i_query, va_list args );
+static inline void demux_UpdateTitleFromStream( demux_t *demux )
+{
+ stream_t *s = demux->s;
+ unsigned title, seekpoint;
+
+ if( stream_Control( s, STREAM_GET_TITLE, &title ) == VLC_SUCCESS
+ && title != (unsigned)demux->info.i_title )
+ {
+ demux->info.i_title = title;
+ demux->info.i_update = INPUT_UPDATE_TITLE;
+ }
+
+ if( stream_Control( s, STREAM_GET_SEEKPOINT, &seekpoint ) == VLC_SUCCESS
+ && seekpoint != (unsigned)demux->info.i_seekpoint )
+ {
+ demux->info.i_seekpoint = seekpoint;
+ demux->info.i_update = INPUT_UPDATE_SEEKPOINT;
+ }
+}
+
/*************************************************************************
* Miscellaneous helpers for demuxers
*************************************************************************/
/*****************************************************************************
* Title:
*****************************************************************************/
-typedef struct
+typedef struct input_title_t
{
char *psz_name;
break;
}
+ demux_UpdateTitleFromStream( p_demux );
return 1;
}
}
return VLC_EGENERIC;
+ case DEMUX_GET_TITLE_INFO:
+ {
+ struct input_title_t ***v = va_arg( args, struct input_title_t*** );
+ int *c = va_arg( args, int * );
+
+ *va_arg( args, int* ) = 0; /* Title offset */
+ *va_arg( args, int* ) = 0; /* Chapter offset */
+ return stream_Control( p_demux->s, STREAM_GET_TITLE_INFO, v, c );
+ }
+
+ case DEMUX_SET_TITLE:
+ return stream_Control( p_demux->s, STREAM_SET_TITLE, args );
+
+ case DEMUX_SET_SEEKPOINT:
+ return stream_Control( p_demux->s, STREAM_SET_SEEKPOINT, args );
+
case DEMUX_GET_META:
return stream_Control( p_demux->s, STREAM_GET_META, args );
p_sys->i_ts_read * p_sys->i_packet_size );
}
+ demux_UpdateTitleFromStream( p_demux );
return 1;
}
return VLC_SUCCESS;
}
+ case DEMUX_GET_TITLE_INFO:
+ {
+ struct input_title_t ***v = va_arg( args, struct input_title_t*** );
+ int *c = va_arg( args, int * );
+
+ *va_arg( args, int* ) = 0; /* Title offset */
+ *va_arg( args, int* ) = 0; /* Chapter offset */
+ return stream_Control( p_demux->s, STREAM_GET_TITLE_INFO, v, c );
+ }
+
+ case DEMUX_SET_TITLE:
+ return stream_Control( p_demux->s, STREAM_SET_TITLE, args );
+
+ case DEMUX_SET_SEEKPOINT:
+ return stream_Control( p_demux->s, STREAM_SET_SEEKPOINT, args );
+
case DEMUX_GET_META:
return stream_Control( p_demux->s, STREAM_GET_META, args );