wildmidi: cleanups

This commit is contained in:
Wim Taymans 2009-08-31 18:32:07 +02:00
parent 42b9415024
commit 5c6ddc8ff2

View file

@ -542,12 +542,6 @@ gst_wildmidi_activatepull (GstPad * pad, gboolean active)
} }
} }
static GstBuffer *
gst_wildmidi_allocate_buffer (GstWildmidi * wildmidi, gint64 samples)
{
return gst_buffer_new_and_alloc (samples * wildmidi->bytes_per_frame);
}
static GstBuffer * static GstBuffer *
gst_wildmidi_clip_buffer (GstWildmidi * wildmidi, GstBuffer * buffer) gst_wildmidi_clip_buffer (GstWildmidi * wildmidi, GstBuffer * buffer)
{ {
@ -586,10 +580,13 @@ gst_wildmidi_clip_buffer (GstWildmidi * wildmidi, GstBuffer * buffer)
/* generate audio data and advance internal timers */ /* generate audio data and advance internal timers */
static GstBuffer * static GstBuffer *
gst_wildmidi_fill_buffer (GstWildmidi * wildmidi, GstBuffer * buffer) gst_wildmidi_get_buffer (GstWildmidi * wildmidi)
{ {
size_t bytes_read; size_t bytes_read;
gint64 samples; gint64 samples;
GstBuffer *buffer;
buffer = gst_buffer_new_and_alloc (256 * wildmidi->bytes_per_frame);
bytes_read = bytes_read =
WildMidi_GetOutput (wildmidi->song, (char *) GST_BUFFER_DATA (buffer), WildMidi_GetOutput (wildmidi->song, (char *) GST_BUFFER_DATA (buffer),
@ -627,22 +624,7 @@ gst_wildmidi_fill_buffer (GstWildmidi * wildmidi, GstBuffer * buffer)
GST_TIME_ARGS (((guint64) (GST_BUFFER_TIMESTAMP (buffer) + GST_TIME_ARGS (((guint64) (GST_BUFFER_TIMESTAMP (buffer) +
GST_BUFFER_DURATION (buffer)))), samples); GST_BUFFER_DURATION (buffer)))), samples);
return buffer; return gst_wildmidi_clip_buffer (wildmidi, buffer);
}
static GstBuffer *
gst_wildmidi_get_buffer (GstWildmidi * wildmidi)
{
GstBuffer *out;
out =
gst_wildmidi_fill_buffer (wildmidi,
gst_wildmidi_allocate_buffer (wildmidi, 256));
if (!out)
return NULL;
return gst_wildmidi_clip_buffer (wildmidi, out);
} }
static gboolean static gboolean
@ -713,13 +695,8 @@ gst_wildmidi_do_play (GstWildmidi * wildmidi)
wildmidi->o_segment->last_stop = wildmidi->o_segment->time = sample; wildmidi->o_segment->last_stop = wildmidi->o_segment->time = sample;
} }
out = gst_wildmidi_get_buffer (wildmidi); if (!(out = gst_wildmidi_get_buffer (wildmidi)))
if (!out) { goto eos;
GST_LOG_OBJECT (wildmidi, "Song ended, generating eos");
gst_pad_push_event (wildmidi->srcpad, gst_event_new_eos ());
wildmidi->o_seek = FALSE;
return GST_FLOW_UNEXPECTED;
}
if (wildmidi->o_seek) { if (wildmidi->o_seek) {
GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT); GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT);
@ -730,6 +707,14 @@ gst_wildmidi_do_play (GstWildmidi * wildmidi)
ret = gst_pad_push (wildmidi->srcpad, out); ret = gst_pad_push (wildmidi->srcpad, out);
return ret; return ret;
/* ERRORS */
eos:
{
GST_LOG_OBJECT (wildmidi, "Song ended");
wildmidi->o_seek = FALSE;
return GST_FLOW_UNEXPECTED;
}
} }
static gboolean static gboolean
@ -746,6 +731,7 @@ gst_wildmidi_sink_event (GstPad * pad, GstEvent * event)
/* now start the parsing task */ /* now start the parsing task */
gst_pad_start_task (wildmidi->sinkpad, gst_pad_start_task (wildmidi->sinkpad,
(GstTaskFunction) gst_wildmidi_loop, wildmidi->sinkpad); (GstTaskFunction) gst_wildmidi_loop, wildmidi->sinkpad);
/* don't forward the event */
gst_event_unref (event); gst_event_unref (event);
break; break;
default: default:
@ -758,16 +744,15 @@ gst_wildmidi_sink_event (GstPad * pad, GstEvent * event)
static GstFlowReturn static GstFlowReturn
gst_wildmidi_chain (GstPad * sinkpad, GstBuffer * buffer) gst_wildmidi_chain (GstPad * sinkpad, GstBuffer * buffer)
{ {
GstFlowReturn ret;
GstWildmidi *wildmidi; GstWildmidi *wildmidi;
wildmidi = GST_WILDMIDI (GST_PAD_PARENT (sinkpad)); wildmidi = GST_WILDMIDI (GST_PAD_PARENT (sinkpad));
/* push stuff in the adapter, we will start doing something in the sink event
* handler when we get EOS */
gst_adapter_push (wildmidi->adapter, buffer); gst_adapter_push (wildmidi->adapter, buffer);
ret = GST_FLOW_OK; return GST_FLOW_OK;
return ret;
} }
static void static void