From f90323146eef46030d4d056ccc253e5e66755cf5 Mon Sep 17 00:00:00 2001 From: Francois Cartegnie Date: Sat, 25 Jun 2011 16:57:06 +0200 Subject: [PATCH] vlc input control: add INPUT_GET_TITLE_INFO as we'll need seekpoints for UI: chapters offsets were not sufficient. --- include/vlc_input.h | 3 +++ src/input/control.c | 24 ++++++++++++++++++++++++ src/input/input.c | 2 ++ 3 files changed, 29 insertions(+) diff --git a/include/vlc_input.h b/include/vlc_input.h index 266a0ce066..5d7df895b1 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -494,6 +494,9 @@ enum input_query_e INPUT_DEL_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_SET_BOOKMARK, /* arg1= int res=can fail */ + /* titles */ + INPUT_GET_TITLE_INFO, /* arg1=input_title_t** arg2= int * res=can fail */ + /* Attachments */ INPUT_GET_ATTACHMENTS, /* arg1=input_attachment_t***, arg2=int* res=can fail */ INPUT_GET_ATTACHMENT, /* arg1=input_attachment_t**, arg2=char* res=can fail */ diff --git a/src/input/control.c b/src/input/control.c index e1cd747e5c..e93b6dc10a 100644 --- a/src/input/control.c +++ b/src/input/control.c @@ -325,6 +325,30 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) vlc_mutex_unlock( &p_input->p->p_item->lock ); return VLC_SUCCESS; + case INPUT_GET_TITLE_INFO: + { + input_title_t **p_title = (input_title_t **)va_arg( args, input_title_t ** ); + int *pi_req_title_offset = (int *) va_arg( args, int * ); + + vlc_mutex_lock( &p_input->p->p_item->lock ); + + /* current title if -1 */ + if ( *pi_req_title_offset < 0 ) + *pi_req_title_offset = p_input->p->i_title_offset; + + if( p_input->p->i_title && p_input->p->i_title > *pi_req_title_offset ) + { + *p_title = vlc_input_title_Duplicate( p_input->p->title[*pi_req_title_offset] ); + vlc_mutex_unlock( &p_input->p->p_item->lock ); + return VLC_SUCCESS; + } + else + { + vlc_mutex_unlock( &p_input->p->p_item->lock ); + return VLC_EGENERIC; + } + } + case INPUT_ADD_OPTION: { const char *psz_option = va_arg( args, const char * ); diff --git a/src/input/input.c b/src/input/input.c index 2bcfaf7ce8..7927480f92 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -935,6 +935,7 @@ static void InitTitle( input_thread_t * p_input ) if( p_input->b_preparsing ) return; + vlc_mutex_lock( &p_input->p->p_item->lock ); /* Create global title (from master) */ p_input->p->i_title = p_master->i_title; p_input->p->title = p_master->title; @@ -951,6 +952,7 @@ static void InitTitle( input_thread_t * p_input ) p_input->p->b_can_pace_control = p_master->b_can_pace_control; p_input->p->b_can_pause = p_master->b_can_pause; p_input->p->b_can_rate_control = p_master->b_can_rate_control; + vlc_mutex_unlock( &p_input->p->p_item->lock ); } static void StartTitle( input_thread_t * p_input )