}
if (raw) {
+ GST_DEBUG_OBJECT (playsink, "creating audioconvert");
chain->conv = gst_element_factory_make ("audioconvert", "aconv");
if (chain->conv == NULL) {
post_missing_element_message (playsink, "audioconvert");
prev = chain->conv;
}
+ GST_DEBUG_OBJECT (playsink, "creating audioresample");
chain->resample = gst_element_factory_make ("audioresample", "aresample");
if (chain->resample == NULL) {
post_missing_element_message (playsink, "audioresample");
}
if (!have_volume && playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME) {
+ GST_DEBUG_OBJECT (playsink, "creating volume");
chain->volume = gst_element_factory_make ("volume", "volume");
if (chain->volume == NULL) {
post_missing_element_message (playsink, "volume");
}
}
- if (!gst_element_link_pads (prev, "src", chain->sink, NULL))
- goto link_failed;
+ if (prev) {
+ /* we only have to link to the previous element if we have something in
+ * front of the sink */
+ GST_DEBUG_OBJECT (playsink, "linking to sink");
+ if (!gst_element_link_pads (prev, "src", chain->sink, NULL))
+ goto link_failed;
+ }
/* post a warning if we have no way to configure the volume */
if (!have_volume) {
}
/* and ghost the sinkpad of the headmost element */
+ GST_DEBUG_OBJECT (playsink, "ghosting sink pad");
pad = gst_element_get_static_pad (head, "sink");
chain->sinkpad = gst_ghost_pad_new ("sink", pad);
gst_object_unref (pad);
playsink->videochain = gen_video_chain (playsink, raw, async);
}
- add_chain (GST_PLAY_CHAIN (playsink->videochain), TRUE);
- activate_chain (GST_PLAY_CHAIN (playsink->videochain), TRUE);
- /* if we are not part of vis or subtitles, set the ghostpad target */
- if (!need_vis && !need_text) {
- GST_DEBUG_OBJECT (playsink, "ghosting video sinkpad");
- gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->video_pad),
- playsink->videochain->sinkpad);
+ if (playsink->videochain) {
+ add_chain (GST_PLAY_CHAIN (playsink->videochain), TRUE);
+ activate_chain (GST_PLAY_CHAIN (playsink->videochain), TRUE);
+ /* if we are not part of vis or subtitles, set the ghostpad target */
+ if (!need_vis && !need_text) {
+ GST_DEBUG_OBJECT (playsink, "ghosting video sinkpad");
+ gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->video_pad),
+ playsink->videochain->sinkpad);
+ }
}
} else {
if (playsink->videochain) {
playsink->audiochain = gen_audio_chain (playsink, raw, queue);
}
- add_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
- gst_pad_link (playsink->audio_tee_asrc, playsink->audiochain->sinkpad);
- activate_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
+ if (playsink->audiochain) {
+ add_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
+ gst_pad_link (playsink->audio_tee_asrc, playsink->audiochain->sinkpad);
+ activate_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
+ }
} else {
/* we have no audio or we are requested to not play audio */
if (playsink->audiochain) {
GST_DEBUG_OBJECT (playsink, "adding visualisation");
- srcpad =
- gst_element_get_static_pad (GST_ELEMENT_CAST (playsink->vischain->
- chain.bin), "src");
- add_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
- gst_pad_link (playsink->audio_tee_vissrc, playsink->vischain->sinkpad);
- gst_pad_link (srcpad, playsink->videochain->sinkpad);
- gst_object_unref (srcpad);
- activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
+ if (playsink->vischain) {
+ srcpad =
+ gst_element_get_static_pad (GST_ELEMENT_CAST (playsink->vischain->
+ chain.bin), "src");
+ add_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
+ gst_pad_link (playsink->audio_tee_vissrc, playsink->vischain->sinkpad);
+ gst_pad_link (srcpad, playsink->videochain->sinkpad);
+ gst_object_unref (srcpad);
+ activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
+ }
} else {
if (playsink->vischain) {
add_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);