1357
brasero_transcode_error_on_pad_linking (BraseroTranscode *self)
1359
BraseroTranscodePrivate *priv;
1360
GstMessage *message;
1363
priv = BRASERO_TRANSCODE_PRIVATE (self);
1365
BRASERO_JOB_LOG (self, "Error on pad linking");
1366
message = gst_message_new_error (GST_OBJECT (priv->pipeline),
1367
g_error_new (BRASERO_BURN_ERROR,
1368
BRASERO_BURN_ERROR_GENERAL,
1369
"Impossible to link gstreamer plugin pads."), /* FIXME: translate */
1370
"Sent by brasero_metadata_error_on_pad_linking");
1372
bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
1373
gst_bus_post (bus, message);
1374
g_object_unref (bus);
1351
1378
brasero_transcode_new_decoded_pad_cb (GstElement *decode,
1354
1381
BraseroTranscode *transcode)
1358
1384
GstStructure *structure;
1359
1385
BraseroTranscodePrivate *priv;
1361
1387
priv = BRASERO_TRANSCODE_PRIVATE (transcode);
1363
sink = gst_element_get_pad (priv->link, "sink");
1364
if (GST_PAD_IS_LINKED (sink))
1389
BRASERO_JOB_LOG (transcode, "New pad");
1367
1391
/* make sure we only have audio */
1368
1392
caps = gst_pad_get_caps (pad);
1372
/* before linking pads (before any data reach grvolume), send tags */
1373
brasero_transcode_send_volume_event (transcode);
1375
1396
structure = gst_caps_get_structure (caps, 0);
1377
&& g_strrstr (gst_structure_get_name (structure), "audio"))
1378
gst_pad_link (pad, sink);
1380
gst_object_unref (sink);
1398
if (g_strrstr (gst_structure_get_name (structure), "audio")) {
1401
GstPadLinkReturn res;
1403
/* before linking pads (before any data reach grvolume), send tags */
1404
brasero_transcode_send_volume_event (transcode);
1406
/* This is necessary in case there is a video stream
1407
* (see brasero-metadata.c). we need to queue to avoid
1409
queue = gst_element_factory_make ("queue", NULL);
1410
gst_bin_add (GST_BIN (priv->pipeline), queue);
1411
if (!gst_element_link (queue, priv->link)) {
1412
brasero_transcode_error_on_pad_linking (transcode);
1416
sink = gst_element_get_pad (queue, "sink");
1417
if (GST_PAD_IS_LINKED (sink)) {
1418
brasero_transcode_error_on_pad_linking (transcode);
1422
res = gst_pad_link (pad, sink);
1423
if (res == GST_PAD_LINK_OK)
1424
gst_element_set_state (queue, GST_STATE_PLAYING);
1426
brasero_transcode_error_on_pad_linking (transcode);
1428
gst_object_unref (sink);
1430
/* For video streams add a fakesink (see brasero-metadata.c) */
1431
else if (g_strrstr (gst_structure_get_name (structure), "video")) {
1433
GstElement *fakesink;
1434
GstPadLinkReturn res;
1436
BRASERO_JOB_LOG (transcode, "Adding a fakesink for video stream");
1438
fakesink = gst_element_factory_make ("fakesink", NULL);
1440
brasero_transcode_error_on_pad_linking (transcode);
1444
sink = gst_element_get_static_pad (fakesink, "sink");
1446
brasero_transcode_error_on_pad_linking (transcode);
1447
gst_object_unref (fakesink);
1451
gst_bin_add (GST_BIN (priv->pipeline), fakesink);
1452
res = gst_pad_link (pad, sink);
1454
if (res == GST_PAD_LINK_OK)
1455
gst_element_set_state (fakesink, GST_STATE_PLAYING);
1457
brasero_transcode_error_on_pad_linking (transcode);
1459
gst_object_unref (sink);
1381
1464
gst_caps_unref (caps);