[vlc-devel] [PATCH 14/48] decoder: request decoder device when getting the vout

Steve Lhomme robux4 at ycbcr.xyz
Fri Oct 11 15:33:28 CEST 2019


The decoder device is kept in the decoder for now (in further patches it will
come with the video context).
---
 src/input/decoder.c  | 12 ++++++++++--
 src/input/resource.c |  5 +++--
 src/input/resource.h |  5 +++--
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/input/decoder.c b/src/input/decoder.c
index 3692c6e9e23..ca5109c93ba 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -122,6 +122,7 @@ struct decoder_owner
     audio_output_t *p_aout;
 
     vout_thread_t   *p_vout;
+    vlc_decoder_device *p_dec_dev; // TEMPORARY
 
     /* -- Theses variables need locking on read *and* write -- */
     /* Preroll */
@@ -549,13 +550,17 @@ static int CreateVoutIfNeeded(struct decoder_owner *p_owner)
         .dpb_size = dpb_size + p_dec->i_extra_picture_buffers + 1,
         .mouse_event = MouseEvent, .mouse_opaque = p_dec
     };
-    p_vout = input_resource_GetVout( p_owner->p_resource,
-                                    &cfg, &order );
+    vlc_decoder_device *dec_dev = NULL;
+    p_vout = input_resource_GetVoutDecoderDevice( p_owner->p_resource,
+                                    &cfg, &order, &dec_dev );
     if (p_vout)
         decoder_Notify(p_owner, on_vout_added, p_vout, order);
 
     vlc_mutex_lock( &p_owner->lock );
     p_owner->p_vout = p_vout;
+    if ( p_owner->p_dec_dev != NULL )
+        vlc_decoder_device_Release( p_owner->p_dec_dev );
+    p_owner->p_dec_dev = dec_dev;
 
     DecoderUpdateFormatLocked( p_owner );
     p_owner->fmt.video.i_chroma = p_dec->fmt_out.i_codec;
@@ -1928,6 +1933,9 @@ static void DeleteDecoder( decoder_t * p_dec )
     const enum es_format_category_e i_cat =p_dec->fmt_in.i_cat;
     decoder_Clean( p_dec );
 
+    if ( p_owner->p_dec_dev )
+        vlc_decoder_device_Release( p_owner->p_dec_dev );
+
     /* Free all packets still in the decoder fifo. */
     block_FifoRelease( p_owner->p_fifo );
 
diff --git a/src/input/resource.c b/src/input/resource.c
index bfd1e794e5e..7045d36ff53 100644
--- a/src/input/resource.c
+++ b/src/input/resource.c
@@ -366,9 +366,10 @@ void input_resource_PutVout(input_resource_t *p_resource,
     vlc_mutex_unlock( &p_resource->lock );
 }
 
-vout_thread_t *input_resource_GetVout(input_resource_t *p_resource,
+vout_thread_t *input_resource_GetVoutDecoderDevice(input_resource_t *p_resource,
                                       const vout_configuration_t *cfg,
-                                      enum vlc_vout_order *order)
+                                      enum vlc_vout_order *order,
+                                      vlc_decoder_device **pp_dec_dev)
 {
     vout_configuration_t cfg_buf;
     vout_thread_t *vout;
diff --git a/src/input/resource.h b/src/input/resource.h
index a13ca0dc85c..537033c9d7c 100644
--- a/src/input/resource.h
+++ b/src/input/resource.h
@@ -37,9 +37,10 @@ void input_resource_SetInput( input_resource_t *, input_thread_t * );
  */
 sout_instance_t *input_resource_RequestSout( input_resource_t *, sout_instance_t *, const char *psz_sout );
 
-vout_thread_t *input_resource_GetVout(input_resource_t *,
+vout_thread_t *input_resource_GetVoutDecoderDevice(input_resource_t *,
                                       const vout_configuration_t *,
-                                      enum vlc_vout_order *order);
+                                      enum vlc_vout_order *order,
+                                      vlc_decoder_device **);
 void input_resource_PutVout(input_resource_t *, vout_thread_t *);
 
 /**
-- 
2.17.1



More information about the vlc-devel mailing list