[vlc-devel] commit: Added input_GetEsObjects() to cleanly retreive ES objects (decoder, vout, aout). (Laurent Aimar )

git version control git at videolan.org
Sun Jan 31 01:41:56 CET 2010


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sun Jan 31 01:39:41 2010 +0100| [6a18a30adfcfaed7ca62ad22a8587d90683dce98] | committer: Laurent Aimar 

Added input_GetEsObjects() to cleanly retreive ES objects (decoder, vout, aout).

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6a18a30adfcfaed7ca62ad22a8587d90683dce98
---

 include/vlc_input.h |   15 +++++++++++++++
 src/input/control.c |   13 +++++++++++++
 2 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/include/vlc_input.h b/include/vlc_input.h
index 5eebb3b..a0968e4 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 237465e..3fa280b 100644
--- a/src/input/control.c
+++ b/src/input/control.c
@@ -29,10 +29,12 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 
 #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;




More information about the vlc-devel mailing list