From 6a18a30adfcfaed7ca62ad22a8587d90683dce98 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Sun, 31 Jan 2010 01:39:41 +0100 Subject: [PATCH] Added input_GetEsObjects() to cleanly retreive ES objects (decoder, vout, aout). --- include/vlc_input.h | 15 +++++++++++++++ src/input/control.c | 13 +++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/vlc_input.h b/include/vlc_input.h index 5eebb3bbd2..a0968e4852 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -511,6 +511,7 @@ enum input_query_e * XXX You must call vlc_object_release as soon as possible */ INPUT_GET_AOUT, /* arg1=aout_instance_t ** res=can fail */ INPUT_GET_VOUTS, /* arg1=vout_thread_t ***, int * res=can fail */ + INPUT_GET_ES_OBJECTS, /* arg1=int id, vlc_object_t **dec, vout_thread_t **, aout_instance_t ** */ }; /** @}*/ @@ -598,6 +599,20 @@ static inline aout_instance_t *input_GetAout( input_thread_t *p_input ) return input_Control( p_input, INPUT_GET_AOUT, &p_aout ) ? NULL : p_aout; } +/** + * Returns the objects associated to an ES. + * + * You must release all non NULL object using vlc_object_release. + * You may set pointer of pointer to NULL to avoid retreiving it. + */ +static inline int input_GetEsObjects( input_thread_t *p_input, int i_id, + vlc_object_t **pp_decoder, + vout_thread_t **pp_vout, aout_instance_t **pp_aout ) +{ + return input_Control( p_input, INPUT_GET_ES_OBJECTS, i_id, + pp_decoder, pp_vout, pp_aout ); +} + /* */ typedef struct input_clock_t input_clock_t; VLC_EXPORT( decoder_t *, input_DecoderNew, ( input_thread_t *, es_format_t *, input_clock_t *, sout_instance_t * ) ); diff --git a/src/input/control.c b/src/input/control.c index 237465e762..3fa280bc1e 100644 --- a/src/input/control.c +++ b/src/input/control.c @@ -29,10 +29,12 @@ #include #include +#include #include "input_internal.h" #include "event.h" #include "resource.h" +#include "es_out.h" static void UpdateBookmarksOption( input_thread_t * ); @@ -436,6 +438,17 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) return VLC_SUCCESS; } + case INPUT_GET_ES_OBJECTS: + { + const int i_id = va_arg( args, int ); + vlc_object_t **pp_decoder = va_arg( args, vlc_object_t ** ); + vout_thread_t **pp_vout = va_arg( args, vout_thread_t ** ); + aout_instance_t **pp_aout = va_arg( args, aout_instance_t ** ); + + return es_out_Control( p_input->p->p_es_out_display, ES_OUT_GET_ES_OBJECTS_BY_ID, i_id, + pp_decoder, pp_vout, pp_aout ); + } + default: msg_Err( p_input, "unknown query in input_vaControl" ); return VLC_EGENERIC;