From af9b546cf5eef3df417e225c8ad87283ab51e1bb Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Fri, 3 Nov 2023 16:11:47 +0000 Subject: avoid the neeed to escape url passed to gstreamer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I13d0cee911a3c9af99b494dde16b8d51f78d954a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158889 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- avmedia/source/gstreamer/gstframegrabber.cxx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'avmedia') diff --git a/avmedia/source/gstreamer/gstframegrabber.cxx b/avmedia/source/gstreamer/gstframegrabber.cxx index a3b4b3aef5e1..7a6575123318 100644 --- a/avmedia/source/gstreamer/gstframegrabber.cxx +++ b/avmedia/source/gstreamer/gstframegrabber.cxx @@ -50,10 +50,9 @@ void FrameGrabber::disposePipeline() FrameGrabber::FrameGrabber( std::u16string_view rURL ) { - gchar *pPipelineStr = g_strdup_printf( - "uridecodebin uri=\"%s\" ! videoconvert ! videoscale ! appsink " - "name=sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\"", - OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 ).getStr() ); + const char pPipelineStr[] = + "uridecodebin name=source ! videoconvert ! videoscale ! appsink " + "name=sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\""; GError *pError = nullptr; mpPipeline = gst_parse_launch( pPipelineStr, &pError ); @@ -64,6 +63,12 @@ FrameGrabber::FrameGrabber( std::u16string_view rURL ) } if( mpPipeline ) { + + if (GstElement *pUriDecode = gst_bin_get_by_name(GST_BIN(mpPipeline), "source")) + g_object_set(pUriDecode, "uri", OUStringToOString(rURL, RTL_TEXTENCODING_UTF8).getStr(), nullptr); + else + g_warning("Missing 'source' element in gstreamer pipeline"); + // pre-roll switch( gst_element_set_state( mpPipeline, GST_STATE_PAUSED ) ) { case GST_STATE_CHANGE_FAILURE: -- cgit