[gst-devel] The linking filter and sink failed.

Igor Mironchick imironchick at gmail.com
Thu Apr 22 08:29:30 CEST 2010


Hi, Can anybody help me with this:

/*!
    Initialize the the Gstreamer pipeline. Below is a diagram
    of the pipeline that will be created:

                                    |Screen|  |Screen|  |Screen|
                                  ->|queue |->|filter|->|sink  |-> Display
    |Camera|  |Camera    |  |Tee|/
    |src   |->|CSP filter|->|   |\  |Image |  |Image |  |Image |
                                  ->|queue |->|filter|->|sink  |-> JPEG file
*/
void initPipeline( GstElement * pipeline,
    GstElement * imageSink, GstCaps * caps )
{
    // Create pipeline and attach a callback to it's message bus.
    pipeline = gst_pipeline_new( "camera" );

    // Create elements.
    GstElement * cameraSrc = gst_element_factory_make(
        "v4l2src", cameraSourceName.c_str() );

    GstElement * cspFilter = gst_element_factory_make(
        "ffmpegcolorspace", "cspFilter" );

    GstElement * tee = gst_element_factory_make( "tee", "tee" );

    GstElement * screenQueue = gst_element_factory_make(
        "queue", "screenQueue" );

    GstElement * screenFilter = gst_element_factory_make(
        "ffmpegcolorspace", "screenFilter" );

    GstElement * screenSink = gst_element_factory_make(
        "xvimagesink", screenSinkName.c_str() );

    GstElement * imageQueue = gst_element_factory_make(
        "queue", "imageQueue" );

    GstElement * imageFilter = gst_element_factory_make(
        "ffmpegcolorspace", "imageFilter" );

    imageSink = gst_element_factory_make(
        "fakesink", imageSinkName.c_str() );

    // Check that elements are correctly initialized.
    if( !( pipeline && cameraSrc && cspFilter && tee &&
        screenQueue && screenFilter && screenSink && imageQueue &&
        imageFilter && imageSink ) )
    {
        throw std::runtime_error( "Unable to initialize pipeline's elemets."
);
    }

    // Add elements to the pipeline. This has to be done prior to linking
them.
    gst_bin_add_many( GST_BIN( pipeline ), cameraSrc, cspFilter,
        tee, screenQueue, screenFilter, screenSink, imageQueue,
        imageFilter, imageSink, NULL );

    if( !gst_element_link_many( cameraSrc, cspFilter, tee, NULL ) )
        throw std::runtime_error( "Unable to link camera source, "
            "colorspace filter and tee." );

    if( !gst_element_link_many( tee, imageQueue, imageFilter, NULL ) )
        throw std::runtime_error( "Unable to link tee, image queue "
            "and image filter." );

    // Capabilities for preview.
    caps = gst_caps_new_simple( "video/x-raw-rgb",
        "width", G_TYPE_INT, cameraMAXXResolution,
        "height", G_TYPE_INT, cameraMAXYResolution,
        "bpp", G_TYPE_INT, cameraBitsPerPixel,
        "depth", G_TYPE_INT, cameraColorDepth,
        "framerate", GST_TYPE_FRACTION, cameraVideoFramerate, 1,
        NULL );

    if( !gst_element_link_filtered( imageFilter, imageSink, caps ) )
    {
        gst_caps_unref( caps );

        throw std::runtime_error( "Unable to link image filter and "
            "image sink." );
    }

    gst_caps_unref( caps );

    if( !gst_element_link_many( tee, screenQueue, screenFilter, NULL ) )
        throw std::runtime_error( "Unable to link tee, screen queue and "
            "screen filter." );

    // Capabilities for image capturing.
    caps = gst_caps_new_simple( "video/x-raw-rgb",
        "width", G_TYPE_INT, cameraPreviewXResolution,
        "height", G_TYPE_INT, cameraPreviewYResolution,
        NULL );

    if( !gst_element_link_filtered( screenFilter, screenSink, caps ) )
    {
        gst_caps_unref( caps );

        throw std::runtime_error( "Unable to link screen filter and "
            "screen sink." );
    }

    gst_element_set_state( pipeline, GST_STATE_READY );
} // initPipeline

Last gst_element_link_filtered failed and I can't understand why.

-- 
Regards,
Igor Mironchick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20100422/cba238bf/attachment.htm>


More information about the gstreamer-devel mailing list