diff options
Diffstat (limited to 'avmedia/source/gstreamer/gstframegrabber.cxx')
-rw-r--r-- | avmedia/source/gstreamer/gstframegrabber.cxx | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/avmedia/source/gstreamer/gstframegrabber.cxx b/avmedia/source/gstreamer/gstframegrabber.cxx index 77cc35566bdc..d8f96bd5e568 100644 --- a/avmedia/source/gstreamer/gstframegrabber.cxx +++ b/avmedia/source/gstreamer/gstframegrabber.cxx @@ -31,8 +31,7 @@ #include <string> -#define AVMEDIA_GST_FRAMEGRABBER_IMPLEMENTATIONNAME "com.sun.star.comp.avmedia.FrameGrabber_GStreamer" -#define AVMEDIA_GST_FRAMEGRABBER_SERVICENAME "com.sun.star.media.FrameGrabber_GStreamer" +constexpr OUString AVMEDIA_GST_FRAMEGRABBER_SERVICENAME = u"com.sun.star.media.FrameGrabber_GStreamer"_ustr; using namespace ::com::sun::star; @@ -48,14 +47,11 @@ void FrameGrabber::disposePipeline() } } -FrameGrabber::FrameGrabber( std::u16string_view rURL ) : - FrameGrabber_BASE() +FrameGrabber::FrameGrabber( std::u16string_view rURL ) { - gchar *pPipelineStr; - 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 ); @@ -66,6 +62,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: @@ -147,7 +149,7 @@ uno::Reference< graphic::XGraphic > SAL_CALL FrameGrabber::grabFrame( double fMe pData = aMapInfo.data; int nStride = GST_ROUND_UP_4( nWidth * 3 ); - BitmapEx aBmp = vcl::bitmap::CreateFromData(pData, nWidth, nHeight, nStride, vcl::PixelFormat::N24_BPP); + BitmapEx aBmp = vcl::bitmap::CreateFromData(pData, nWidth, nHeight, nStride, /*nBitsPerPixel*/24); gst_buffer_unmap( pBuf, &aMapInfo ); xRet = Graphic( aBmp ).GetXGraphic(); @@ -158,7 +160,7 @@ uno::Reference< graphic::XGraphic > SAL_CALL FrameGrabber::grabFrame( double fMe OUString SAL_CALL FrameGrabber::getImplementationName( ) { - return AVMEDIA_GST_FRAMEGRABBER_IMPLEMENTATIONNAME; + return u"com.sun.star.comp.avmedia.FrameGrabber_GStreamer"_ustr; } sal_Bool SAL_CALL FrameGrabber::supportsService( const OUString& ServiceName ) |