Emit connection-failed signal if gst_pad_alloc_buffer fails.

Buffer allocation might fail for requested format.
We need to emit connection-failed signal
and allow backend to insert colorspace transformation element.

Change-Id: I9a101bb3c027f150c68bbeaba8ab932deded47ea
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
Lev Zelenskiy
2012-04-17 14:44:49 +10:00
committed by Qt by Nokia
parent 3998106d93
commit 1a71385d6a

View File

@@ -200,6 +200,8 @@ gst_video_connector_buffer_alloc (GstPad * pad, guint64 offset, guint size,
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
*buf = NULL; *buf = NULL;
gboolean isFailed = FALSE;
while (1) {
GST_OBJECT_LOCK (element); GST_OBJECT_LOCK (element);
gst_object_ref(element->srcpad); gst_object_ref(element->srcpad);
GST_OBJECT_UNLOCK (element); GST_OBJECT_UNLOCK (element);
@@ -243,6 +245,16 @@ gst_video_connector_buffer_alloc (GstPad * pad, guint64 offset, guint size,
return GST_FLOW_UNEXPECTED; return GST_FLOW_UNEXPECTED;
} }
if (res >= GST_FLOW_OK || isFailed == TRUE)
break;
//if gst_pad_alloc_buffer failed, emit "connection-failed" signal
//so colorspace transformation element can be inserted
GST_INFO_OBJECT(element, "gst_video_connector_buffer_alloc failed, emit connection-failed signal");
g_signal_emit(G_OBJECT(element), gst_video_connector_signals[SIGNAL_CONNECTION_FAILED], 0);
isFailed = TRUE;
}
return res; return res;
} }
@@ -259,7 +271,7 @@ gst_video_connector_setcaps (GstPad *pad, GstCaps *caps)
if (!res) { if (!res) {
//if set_caps failed, emit "connection-failed" signal //if set_caps failed, emit "connection-failed" signal
//so colorspace transformation elemnt can be inserted //so colorspace transformation element can be inserted
GST_INFO_OBJECT(element, "gst_video_connector_setcaps failed, emit connection-failed signal"); GST_INFO_OBJECT(element, "gst_video_connector_setcaps failed, emit connection-failed signal");
g_signal_emit(G_OBJECT(element), gst_video_connector_signals[SIGNAL_CONNECTION_FAILED], 0); g_signal_emit(G_OBJECT(element), gst_video_connector_signals[SIGNAL_CONNECTION_FAILED], 0);