[gst-devel] Random Source -> Adder Link error

Stefan Kost ensonic at hora-obscura.de
Thu Apr 29 09:48:26 CEST 2010


hi,

J. Rios wrote:
> Sorry If I should not email you directly but you have been of lot of
> help in other problems.
> Im the developer of a music player called Guayadeque and Im trying to
> implement crossfade to it.
>
> I have a main pipeline with a continuous playing where I add or remove
> playbins when are needed.  My problem is when I add a paused playbin
> to the pipeline. It works out 3 or 4 times of 5 but fails the others.
Still, please keep the discussion on the list. What I would recommend is
to listen for errors on the bus from your app. If you receive an error,
call GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(bin, details, file_name). Run
your app using GST_DEBUG_DUMP_DOT_DIR=$PWD, convert the generated dot
file to svg or png and look at it. Most probably something is still
pushing after you unliked it and that is fatal.

Stefan
>
> The playbin is
>   uridecodebin ! audioconvert ! audioresample ! queue ! capsfilter !
> volume
>
> This is linked and unlinked to an Adder of the pipeline
>
> To link it I use
>
>     if( !m_HasParent )
>     {
>         gst_bin_add( GST_BIN( m_ParentBin ), m_PlayBin );
>         m_HasParent  = true;
>     }
>
>     m_AdderPad = gst_element_get_request_pad( m_Adder, "sink%d" );
>     if( !m_AdderPad )
>         guLogError( wxT( "Could not create a new adder pad for the
> fader playbin" ) );
>
>     gst_pad_link( m_SourcePad, m_AdderPad );
>
>     if( m_SourceBlocked )
>     {
>         gst_pad_set_blocked( m_SourcePad, false );
>     }
>
>     gst_element_set_state( GST_ELEMENT( m_PlayBin ), GST_STATE_PLAYING );
>
> To Unlink it I use
>
>     m_SourceBlocked = gst_pad_set_blocked( m_SourcePad, true );
>     if( !m_SourceBlocked )
>         guLogMessage( wxT( "Could not block the source pad for stream
> '%s'" ), GetUri().c_str() );
>
>     if( gst_pad_unlink( m_SourcePad, m_AdderPad ) == FALSE )
>     {
>         guLogError( wxT( "Could not unlink the fader playbin." ) );
>     }
>
>     gst_element_release_request_pad( m_Adder, m_AdderPad );
>
>     if( gst_element_set_state( m_PlayBin, GST_STATE_PAUSED ) ==
> GST_STATE_CHANGE_FAILURE )
>         guLogMessage( wxT( "Could not put the fader playbin to NULL
> state" ) );
>
>
> I posted the output of gstreamer debug   in the next url
> http://pastebin.com/6LRNsAKg
>
> The part that gives the problem is this
>
> 0:00:38.625853220  8341      0x2e4feb0 INFO            audioconvert
> gstaudioconvert.c:383:gst_audio_convert_get_unit_size:<pb_audioconvert>
> unit_size = 4
> 16:09:55: MediaCtrl::Play
> 16:09:55: 0) 7
> 16:09:55: 1) 3
> 16:09:55: LinkAndStart........
> 16:09:55: Creating a new adder pad
> 0:00:38.635971335  8341      0x1448cd0 INFO        GST_ELEMENT_PADS
> gstelement.c:727:gst_element_add_pad:<adder> adding pad 'sink5'
> 16:09:55: Created a new adder pad
> 16:09:55: Linking the new faderplaybin a new adder pad
> 0:00:38.636024554  8341      0x1448cd0 INFO                GST_PADS
> gstpad.c:1874:gst_pad_link_prepare: trying to link bin4:src and
> adder:sink5
> 0:00:38.637689361  8341      0x1448cd0 INFO                GST_PADS
> gstpad.c:2047:gst_pad_link: linked bin4:src and adder:sink5, successful
> 16:09:55: Linked the new faderplaybin a new adder pad
> 16:09:55: The faderbin started at position 38316431000
> 0:00:38.637831907  8341      0x189e900 INFO                 basesrc
> gstbasesrc.c:2326:gst_base_src_loop:<source> pausing after
> gst_pad_push() = not-linked
> 0:00:38.637872694  8341      0x189e900 WARN                 basesrc
> gstbasesrc.c:2378:gst_base_src_loop:<source> error: Error en el flujo
> de datos interno.
> 0:00:38.637881773  8341      0x189e900 WARN                 basesrc
> gstbasesrc.c:2378:gst_base_src_loop:<source> error: streaming task
> paused, reason not-linked (-1)
> 0:00:38.637907335  8341      0x189e900 INFO        GST_ERROR_SYSTEM
> gstelement.c:1763:gst_element_message_full:<source> posting message:
> Error en el flujo de datos interno.
> 0:00:38.637926053  8341      0x189e900 INFO        GST_ERROR_SYSTEM
> gstelement.c:1786:gst_element_message_full:<source> posted error
> message: Error en el flujo de datos interno.
> 0:00:38.637942675  8341      0x189e900 INFO                GST_PADS
> gstpad.c:3337:gst_pad_event_default_dispatch:<id3demux1:sink> Sending
> event 0x7f7a2001bb00 (eos) to all internally linked pads
> 0:00:38.637954897  8341      0x189e900 INFO                GST_PADS
> gstpad.c:3337:gst_pad_event_default_dispatch:<apedemux1:sink> Sending
> event 0x7f7a2001bb00 (eos) to all internally linked pads
> 0:00:38.639039951  8341      0x1448cd0 INFO              GST_STATES
> gstelement.c:2238:gst_element_continue_state:<volume3> completed state
> change to PLAYING
> 0:00:38.639062161  8341      0x1448cd0 INFO              GST_STATES
> gstelement.c:2251:gst_element_continue_state:<volume3> posting
> state-changed PAUSED to PLAYING
>
> I dont understand if the it says it was linked successfully then it
> says '...pausing after gst_pad_push() = not-linked'
>
> What is my problem? what should be the way to unlink and link a
> playbin to a playing playbin without affecting it ?
> Should I use another aproach?
>
> Thanks in advance
> Juan Rios
>
>





More information about the gstreamer-devel mailing list