mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-06 02:32:23 +00:00
wildmidi: cleanup error handler
This commit is contained in:
parent
dd1b692561
commit
d806622622
1 changed files with 30 additions and 20 deletions
|
@ -633,7 +633,7 @@ gst_wildmidi_get_buffer (GstWildmidi * wildmidi)
|
||||||
return gst_wildmidi_clip_buffer (wildmidi, buffer);
|
return gst_wildmidi_clip_buffer (wildmidi, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static GstFlowReturn
|
||||||
gst_wildmidi_parse_song (GstWildmidi * wildmidi)
|
gst_wildmidi_parse_song (GstWildmidi * wildmidi)
|
||||||
{
|
{
|
||||||
struct _WM_Info *info;
|
struct _WM_Info *info;
|
||||||
|
@ -652,7 +652,7 @@ gst_wildmidi_parse_song (GstWildmidi * wildmidi)
|
||||||
if (!wildmidi->song) {
|
if (!wildmidi->song) {
|
||||||
GST_ELEMENT_ERROR (wildmidi, STREAM, DECODE, (NULL),
|
GST_ELEMENT_ERROR (wildmidi, STREAM, DECODE, (NULL),
|
||||||
("Unable to parse midi"));
|
("Unable to parse midi"));
|
||||||
return FALSE;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
WildMidi_LoadSamples (wildmidi->song);
|
WildMidi_LoadSamples (wildmidi->song);
|
||||||
|
@ -677,7 +677,7 @@ gst_wildmidi_parse_song (GstWildmidi * wildmidi)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (wildmidi, "Parsing song done");
|
GST_DEBUG_OBJECT (wildmidi, "Parsing song done");
|
||||||
|
|
||||||
return TRUE;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
@ -783,7 +783,7 @@ gst_wildmidi_loop (GstPad * sinkpad)
|
||||||
} else if (ret != GST_FLOW_OK) {
|
} else if (ret != GST_FLOW_OK) {
|
||||||
GST_ELEMENT_ERROR (wildmidi, STREAM, DECODE, (NULL),
|
GST_ELEMENT_ERROR (wildmidi, STREAM, DECODE, (NULL),
|
||||||
("Unable to load song"));
|
("Unable to load song"));
|
||||||
goto paused;
|
goto pause;
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG_OBJECT (wildmidi, "pushing buffer");
|
GST_DEBUG_OBJECT (wildmidi, "pushing buffer");
|
||||||
gst_adapter_push (wildmidi->adapter, buffer);
|
gst_adapter_push (wildmidi->adapter, buffer);
|
||||||
|
@ -794,35 +794,45 @@ gst_wildmidi_loop (GstPad * sinkpad)
|
||||||
case GST_WILDMIDI_STATE_PARSE:
|
case GST_WILDMIDI_STATE_PARSE:
|
||||||
{
|
{
|
||||||
if (!wildmidi->song) {
|
if (!wildmidi->song) {
|
||||||
if (!gst_wildmidi_parse_song (wildmidi))
|
ret = gst_wildmidi_parse_song (wildmidi);
|
||||||
goto paused;
|
if (ret != GST_FLOW_OK)
|
||||||
|
goto pause;
|
||||||
}
|
}
|
||||||
wildmidi->state = GST_WILDMIDI_STATE_PLAY;
|
wildmidi->state = GST_WILDMIDI_STATE_PLAY;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_WILDMIDI_STATE_PLAY:
|
case GST_WILDMIDI_STATE_PLAY:
|
||||||
ret = gst_wildmidi_do_play (wildmidi);
|
ret = gst_wildmidi_do_play (wildmidi);
|
||||||
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED)
|
if (ret != GST_FLOW_OK)
|
||||||
goto error;
|
goto pause;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
paused:
|
pause:
|
||||||
{
|
|
||||||
GST_DEBUG_OBJECT (wildmidi, "pausing task");
|
|
||||||
gst_pad_pause_task (wildmidi->sinkpad);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
error:
|
|
||||||
{
|
{
|
||||||
|
const gchar *reason = gst_flow_get_name (ret);
|
||||||
|
GstEvent *event;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (wildmidi, "pausing task, reason %s", reason);
|
||||||
|
gst_pad_pause_task (sinkpad);
|
||||||
|
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) {
|
||||||
|
if (ret == GST_FLOW_UNEXPECTED) {
|
||||||
|
/* perform EOS logic */
|
||||||
|
event = gst_event_new_eos ();
|
||||||
|
gst_pad_push_event (wildmidi->srcpad, event);
|
||||||
|
} else {
|
||||||
|
event = gst_event_new_eos ();
|
||||||
|
/* for fatal errors we post an error message, post the error
|
||||||
|
* first so the app knows about the error first. */
|
||||||
GST_ELEMENT_ERROR (wildmidi, STREAM, FAILED,
|
GST_ELEMENT_ERROR (wildmidi, STREAM, FAILED,
|
||||||
("Internal data stream error"),
|
("Internal data flow error."),
|
||||||
("Streaming stopped, reason %s", gst_flow_get_name (ret)));
|
("streaming task paused, reason %s (%d)", reason, ret));
|
||||||
gst_pad_push_event (wildmidi->srcpad, gst_event_new_eos ());
|
gst_pad_push_event (wildmidi->srcpad, event);
|
||||||
goto paused;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue