<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
</head>
<body><div>Merged, thanks.<br></div>
<div><br></div>
<div>I just removed the N_() to avoid new advanced translations (since this module and options are for advanced users/developers).<br></div>
<div><br></div>
<div>On Mon, Jul 30, 2018, at 05:53, Vikram Fugro wrote:<br></div>
<blockquote type="cite"><div dir="ltr">Please review.<br></div>
<div><div><br></div>
<div defang_data-gmailquote="yes"><div>On Tue, Jul 24, 2018 at 8:06 PM, Vikram Fugro <span dir="ltr"><<a href="mailto:vikram.fugro@gmail.com">vikram.fugro@gmail.com</a>></span> wrote:<br></div>
<blockquote defang_data-gmailquote="yes" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-color:rgb(204, 204, 204);border-left-style:solid;border-left-width:1px;padding-left:1ex;"><div>Currently, due to few changes in the gstreamer's buffer<br></div>
<div> handling, the direct-rendering (i.e gstreamer decoders<br></div>
<div> decoding directly into the downstream VLC provided buffers)<br></div>
<div> is unstable.<br></div>
<div> <br></div>
<div> Hence, added a switch to toggle direct-rendering and is disabled<br></div>
<div> by default. Works fine otherwise (i.e non direct-rendering)<br></div>
<div> ---<br></div>
<div>  modules/codec/gstreamer/<wbr>gstdecode.c       | 17 +++++++++++++++--<br></div>
<div>  modules/codec/gstreamer/<wbr>gstvlcvideosink.c | 21 +++++++++++++++++++--<br></div>
<div>  modules/codec/gstreamer/<wbr>gstvlcvideosink.h |  1 +<br></div>
<div>  3 files changed, 35 insertions(+), 4 deletions(-)<br></div>
<div> <br></div>
<div> diff --git a/modules/codec/gstreamer/<wbr>gstdecode.c b/modules/codec/gstreamer/<wbr>gstdecode.c<br></div>
<div> index 3a90ad4e04..ee7d7900f7 100644<br></div>
<div> --- a/modules/codec/gstreamer/<wbr>gstdecode.c<br></div>
<div> +++ b/modules/codec/gstreamer/<wbr>gstdecode.c<br></div>
<div> @@ -84,6 +84,13 @@ static void Flush( decoder_t * );<br></div>
<div>      "more info such as codec profile, level and other attributes, " \<br></div>
<div>      "in the form of GstCaps (Stream Capabilities) to decoder." )<br></div>
<div> <br></div>
<div> +#define USEVLCPOOL_TEXT N_("Use VLCPool")<br></div>
<div> +#define USEVLCPOOL_LONGTEXT N_( \<br></div>
<div> +    "Allow the gstreamer decoders to directly decode (direct render) " \<br></div>
<div> +    "into the buffers provided and managed by the (downstream)VLC modules " \<br></div>
<div> +    "that follow. Note: Currently this feature is unstable, enable it at " \<br></div>
<div> +    "your own risk." )<br></div>
<div> +<br></div>
<div>  vlc_module_begin( )<br></div>
<div>      set_shortname( "GstDecode" )<br></div>
<div>      add_shortcut( "gstdecode" )<br></div>
<div> @@ -97,6 +104,8 @@ vlc_module_begin( )<br></div>
<div>      set_callbacks( OpenDecoder, CloseDecoder )<br></div>
<div>      add_bool( "use-decodebin", true, USEDECODEBIN_TEXT,<br></div>
<div>          USEDECODEBIN_LONGTEXT, false )<br></div>
<div> +    add_bool( "use-vlcpool", false, USEVLCPOOL_TEXT,<br></div>
<div> +        USEVLCPOOL_LONGTEXT, false )<br></div>
<div>  vlc_module_end( )<br></div>
<div> <br></div>
<div>  void gst_vlc_dec_ensure_empty_<wbr>queue( decoder_t *p_dec )<br></div>
<div> @@ -448,7 +457,7 @@ static int OpenDecoder( vlc_object_t *p_this )<br></div>
<div>      GstAppSrcCallbacks cb;<br></div>
<div>      int i_rval = VLC_SUCCESS;<br></div>
<div>      GList *p_list;<br></div>
<div> -    bool dbin;<br></div>
<div> +    bool dbin, vlc_pool;<br></div>
<div> <br></div>
<div>  #define VLC_GST_CHECK( r, v, s, t ) \<br></div>
<div>      { if( r == v ){ msg_Err( p_dec, s ); i_rval = t; goto fail; } }<br></div>
<div> @@ -560,10 +569,14 @@ static int OpenDecoder( vlc_object_t *p_this )<br></div>
<div>      p_sys->p_decode_out = gst_element_factory_make( "vlcvideosink", NULL );<br></div>
<div>      VLC_GST_CHECK( p_sys->p_decode_out, NULL, "vlcvideosink not found",<br></div>
<div>              VLC_ENOMOD );<br></div>
<div> +<br></div>
<div> +    vlc_pool = var_CreateGetBool( p_dec, "use-vlcpool" );<br></div>
<div> +    msg_Dbg( p_dec, "Using vlc pool? %s", vlc_pool ? "yes ":"no" );<br></div>
<div> +<br></div>
<div>      p_sys->p_allocator = gst_vlc_picture_plane_<wbr>allocator_new(<br></div>
<div>              (gpointer) p_dec );<br></div>
<div>      g_object_set( G_OBJECT( p_sys->p_decode_out ), "sync", FALSE, "allocator",<br></div>
<div> -            p_sys->p_allocator, "id", (gpointer) p_dec, NULL );<br></div>
<div> +            p_sys->p_allocator, "id", (gpointer) p_dec, "use-pool", vlc_pool, NULL );<br></div>
<div>      g_signal_connect( G_OBJECT( p_sys->p_decode_out ), "new-buffer",<br></div>
<div>              G_CALLBACK( frame_handoff_cb ), p_dec );<br></div>
<div> <br></div>
<div> diff --git a/modules/codec/gstreamer/<wbr>gstvlcvideosink.c b/modules/codec/gstreamer/<wbr>gstvlcvideosink.c<br></div>
<div> index 6988e0d0a1..eff97f87dd 100644<br></div>
<div> --- a/modules/codec/gstreamer/<wbr>gstvlcvideosink.c<br></div>
<div> +++ b/modules/codec/gstreamer/<wbr>gstvlcvideosink.c<br></div>
<div> @@ -40,7 +40,8 @@ enum<br></div>
<div>  {<br></div>
<div>      PROP_0,<br></div>
<div>      PROP_ALLOCATOR,<br></div>
<div> -    PROP_ID<br></div>
<div> +    PROP_ID,<br></div>
<div> +    PROP_USE_POOL<br></div>
<div>  };<br></div>
<div> <br></div>
<div>  static guint gst_vlc_video_sink_signals[ LAST_SIGNAL ] = { 0 };<br></div>
<div> @@ -84,6 +85,11 @@ static void gst_vlc_video_sink_class_init( GstVlcVideoSinkClass *p_klass )<br></div>
<div>      p_gobject_class->get_property = gst_vlc_video_sink_get_<wbr>property;<br></div>
<div>      p_gobject_class->finalize = gst_vlc_video_sink_finalize;<br></div>
<div> <br></div>
<div> +    g_object_class_install_<wbr>property( G_OBJECT_CLASS( p_klass ), PROP_USE_POOL,<br></div>
<div> +            g_param_spec_boolean( "use-pool", "Use-Pool", "Use downstream VLC video output pool",<br></div>
<div> +                FALSE, G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |<br></div>
<div> +                G_PARAM_STATIC_STRINGS ));<br></div>
<div> +<br></div>
<div>      g_object_class_install_<wbr>property( G_OBJECT_CLASS( p_klass ), PROP_ALLOCATOR,<br></div>
<div>              g_param_spec_pointer( "allocator", "Allocator", "VlcPictureAllocator",<br></div>
<div>                  G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |<br></div>
<div> @@ -162,6 +168,7 @@ static gboolean gst_vlc_video_sink_setcaps( GstBaseSink *p_basesink,<br></div>
<div> <br></div>
<div>  static void gst_vlc_video_sink_init( GstVlcVideoSink *p_vlc_video_sink )<br></div>
<div>  {<br></div>
<div> +    p_vlc_video_sink->b_use_pool = FALSE;<br></div>
<div>      gst_base_sink_set_sync( GST_BASE_SINK( p_vlc_video_sink), FALSE );<br></div>
<div>  }<br></div>
<div> <br></div>
<div> @@ -211,7 +218,7 @@ static gboolean gst_vlc_video_sink_propose_<wbr>allocation( GstBaseSink* p_bsink,<br></div>
<div>      if( p_caps == NULL )<br></div>
<div>          goto no_caps;<br></div>
<div> <br></div>
<div> -    if( b_need_pool )<br></div>
<div> +    if( p_vsink->b_use_pool && b_need_pool )<br></div>
<div>      {<br></div>
<div>          GstVideoInfo info;<br></div>
<div> <br></div>
<div> @@ -294,6 +301,12 @@ static void gst_vlc_video_sink_set_<wbr>property( GObject *p_object, guint i_prop_id,<br></div>
<div>          }<br></div>
<div>          break;<br></div>
<div> <br></div>
<div> +        case PROP_USE_POOL:<br></div>
<div> +        {<br></div>
<div> +            p_vsink->b_use_pool = g_value_get_boolean( p_value );<br></div>
<div> +        }<br></div>
<div> +        break;<br></div>
<div> +<br></div>
<div>          default:<br></div>
<div>          break;<br></div>
<div>      }<br></div>
<div> @@ -312,6 +325,10 @@ static void gst_vlc_video_sink_get_<wbr>property( GObject *p_object, guint i_prop_id,<br></div>
<div>              g_value_set_pointer( p_value, p_vsink->p_allocator );<br></div>
<div>          break;<br></div>
<div> <br></div>
<div> +        case PROP_USE_POOL:<br></div>
<div> +            g_value_set_boolean( p_value, p_vsink->b_use_pool );<br></div>
<div> +        break;<br></div>
<div> +<br></div>
<div>          default:<br></div>
<div>          break;<br></div>
<div>     }<br></div>
<div> diff --git a/modules/codec/gstreamer/<wbr>gstvlcvideosink.h b/modules/codec/gstreamer/<wbr>gstvlcvideosink.h<br></div>
<div> index 5ce0dd2f26..4ec92be880 100644<br></div>
<div> --- a/modules/codec/gstreamer/<wbr>gstvlcvideosink.h<br></div>
<div> +++ b/modules/codec/gstreamer/<wbr>gstvlcvideosink.h<br></div>
<div> @@ -58,6 +58,7 @@ struct _GstVlcVideoSink<br></div>
<div> <br></div>
<div>      GstAllocator *p_allocator;<br></div>
<div>      GstVideoInfo vinfo;<br></div>
<div> +    gboolean b_use_pool;<br></div>
<div> <br></div>
<div>      decoder_t *p_dec;<br></div>
<div> <span><span class="colour" style="color:rgb(136, 136, 136)"> <br> -- <br> 2.17.1<br> </span></span></div>
</blockquote></div>
</div>
<div><u>_______________________________________________</u><br></div>
<div>vlc-devel mailing list<br></div>
<div>To unsubscribe or modify your subscription options:<br></div>
<div><a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br></div>
</blockquote><div><br></div>
</body>
</html>