summaryrefslogtreecommitdiffstats
path: root/sys/oss/gstosssink.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/oss/gstosssink.c')
-rw-r--r--sys/oss/gstosssink.c155
1 files changed, 79 insertions, 76 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c
index 053eba46..9d06b064 100644
--- a/sys/oss/gstosssink.c
+++ b/sys/oss/gstosssink.c
@@ -92,11 +92,11 @@ GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) { TRUE, FALSE }, "
- "width = (int) { 8, 16 }, "
- "depth = (int) { 8, 16 }, "
- "rate = (int) [ 1000, 48000 ], " "channels = (int) [ 1, 2 ]")
+ "endianness = (int) BYTE_ORDER, "
+ "signed = (boolean) { TRUE, FALSE }, "
+ "width = (int) { 8, 16 }, "
+ "depth = (int) { 8, 16 }, "
+ "rate = (int) [ 1000, 48000 ], " "channels = (int) [ 1, 2 ]")
);
static GstElementClass *parent_class = NULL;
@@ -119,9 +119,10 @@ gst_osssink_get_type (void)
0,
(GInstanceInitFunc) gst_osssink_init,
};
+
osssink_type =
- g_type_register_static (GST_TYPE_OSSELEMENT, "GstOssSink",
- &osssink_info, 0);
+ g_type_register_static (GST_TYPE_OSSELEMENT, "GstOssSink",
+ &osssink_info, 0);
}
return osssink_type;
@@ -159,23 +160,23 @@ gst_osssink_class_init (GstOssSinkClass * klass)
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MUTE,
g_param_spec_boolean ("mute", "Mute", "Mute the audio",
- FALSE, G_PARAM_READWRITE));
+ FALSE, G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SYNC,
g_param_spec_boolean ("sync", "Sync",
- "If syncing on timestamps should be enabled", TRUE,
- G_PARAM_READWRITE));
+ "If syncing on timestamps should be enabled", TRUE,
+ G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_FRAGMENT,
g_param_spec_int ("fragment", "Fragment",
- "The fragment as 0xMMMMSSSS (MMMM = total fragments, 2^SSSS = fragment size)",
- 0, G_MAXINT, 6, G_PARAM_READWRITE));
+ "The fragment as 0xMMMMSSSS (MMMM = total fragments, 2^SSSS = fragment size)",
+ 0, G_MAXINT, 6, G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BUFFER_SIZE,
g_param_spec_uint ("buffer_size", "Buffer size",
- "Size of buffers in osssink's bufferpool (bytes)", 0, G_MAXINT, 4096,
- G_PARAM_READWRITE));
+ "Size of buffers in osssink's bufferpool (bytes)", 0, G_MAXINT, 4096,
+ G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CHUNK_SIZE,
g_param_spec_uint ("chunk_size", "Chunk size",
- "Write data in chunk sized buffers", 0, G_MAXUINT, 4096,
- G_PARAM_READWRITE));
+ "Write data in chunk sized buffers", 0, G_MAXUINT, 4096,
+ G_PARAM_READWRITE));
gst_osssink_signals[SIGNAL_HANDOFF] =
g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
@@ -367,17 +368,17 @@ gst_osssink_chain (GstPad * pad, GstData * _data)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
- ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_SYNC, 0);
- gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock),
- FALSE);
- gst_pad_event_default (pad, event);
- return;
+ ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_SYNC, 0);
+ gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock),
+ FALSE);
+ gst_pad_event_default (pad, event);
+ return;
case GST_EVENT_DISCONTINUOUS:
- osssink->resync = TRUE;
- /* pass-through */
+ osssink->resync = TRUE;
+ /* pass-through */
default:
- gst_pad_event_default (pad, event);
- return;
+ gst_pad_event_default (pad, event);
+ return;
}
g_assert_not_reached ();
}
@@ -385,7 +386,7 @@ gst_osssink_chain (GstPad * pad, GstData * _data)
if (!GST_OSSELEMENT (osssink)->bps) {
gst_buffer_unref (buf);
GST_ELEMENT_ERROR (osssink, CORE, NEGOTIATION, (NULL),
- ("format wasn't negotiated before chain function"));
+ ("format wasn't negotiated before chain function"));
return;
}
@@ -409,8 +410,8 @@ gst_osssink_chain (GstPad * pad, GstData * _data)
if (MAX (buftime, soundtime) - MIN (buftime, soundtime) > (GST_SECOND / 10)) {
/* we need to adjust to the buffers here */
GST_INFO_OBJECT (osssink,
- "need sync: real %" G_GUINT64_FORMAT ", buffer: %" G_GUINT64_FORMAT,
- soundtime, buftime);
+ "need sync: real %" G_GUINT64_FORMAT ", buffer: %" G_GUINT64_FORMAT,
+ soundtime, buftime);
if (soundtime > buftime) {
/* do *not* throw frames out. It's useless. The next frame will come in
* too late. And the next one. And so on. We don't want to lose sound.
@@ -418,34 +419,34 @@ gst_osssink_chain (GstPad * pad, GstData * _data)
* sending events upstream to drop buffers. */
} else {
guint64 to_handle =
- (((buftime -
- soundtime) * GST_OSSELEMENT (osssink)->bps / GST_SECOND) /
- ((GST_OSSELEMENT (osssink)->width / 8) *
- GST_OSSELEMENT (osssink)->channels)) *
- (GST_OSSELEMENT (osssink)->width / 8) *
- GST_OSSELEMENT (osssink)->channels;
+ (((buftime -
+ soundtime) * GST_OSSELEMENT (osssink)->bps / GST_SECOND) /
+ ((GST_OSSELEMENT (osssink)->width / 8) *
+ GST_OSSELEMENT (osssink)->channels)) *
+ (GST_OSSELEMENT (osssink)->width / 8) *
+ GST_OSSELEMENT (osssink)->channels;
if (!osssink->resync) {
- guint8 *buf = g_new (guint8, to_handle);
-
- memset (buf, (GST_OSSELEMENT (osssink)->width == 8) ? 0 : 128,
- to_handle);
- while (to_handle > 0) {
- gint done = write (GST_OSSELEMENT (osssink)->fd, buf,
- MIN (to_handle, osssink->chunk_size));
-
- if (done == -1 && errno != EINTR) {
- break;
- } else {
- to_handle -= done;
- osssink->handled += done;
- }
- }
- g_free (buf);
+ guint8 *buf = g_new (guint8, to_handle);
+
+ memset (buf, (GST_OSSELEMENT (osssink)->width == 8) ? 0 : 128,
+ to_handle);
+ while (to_handle > 0) {
+ gint done = write (GST_OSSELEMENT (osssink)->fd, buf,
+ MIN (to_handle, osssink->chunk_size));
+
+ if (done == -1 && errno != EINTR) {
+ break;
+ } else {
+ to_handle -= done;
+ osssink->handled += done;
+ }
+ }
+ g_free (buf);
} else {
- /* Timestamps at start-of-stream (MPEG) or after seek (hey,
- * again MPEG!) can be borken, therefore this hacklet. */
- osssink->handled += to_handle;
+ /* Timestamps at start-of-stream (MPEG) or after seek (hey,
+ * again MPEG!) can be borken, therefore this hacklet. */
+ osssink->handled += to_handle;
}
}
}
@@ -454,17 +455,17 @@ gst_osssink_chain (GstPad * pad, GstData * _data)
if (!osssink->mute) {
while (to_write > 0) {
- gint done = write (GST_OSSELEMENT (osssink)->fd, data,
- MIN (to_write, osssink->chunk_size));
-
- if (done == -1) {
- if (errno != EINTR)
- break;
- } else {
- to_write -= done;
- data += done;
- osssink->handled += done;
- }
+ gint done = write (GST_OSSELEMENT (osssink)->fd, data,
+ MIN (to_write, osssink->chunk_size));
+
+ if (done == -1) {
+ if (errno != EINTR)
+ break;
+ } else {
+ to_write -= done;
+ data += done;
+ osssink->handled += done;
+ }
}
} else {
g_warning ("muting osssinks unimplemented wrt clocks!");
@@ -486,6 +487,7 @@ gst_osssink_get_formats (GstPad * pad)
GST_FORMAT_BYTES,
0
};
+
return formats;
}
@@ -509,6 +511,7 @@ gst_osssink_get_query_types (GstPad * pad)
GST_QUERY_POSITION,
0,
};
+
return query_types;
}
@@ -524,22 +527,22 @@ gst_osssink_sink_query (GstPad * pad, GstQueryType type, GstFormat * format,
switch (type) {
case GST_QUERY_LATENCY:
if (!gst_osssink_convert (pad,
- GST_FORMAT_BYTES, gst_osssink_get_delay (osssink),
- format, value)) {
- res = FALSE;
+ GST_FORMAT_BYTES, gst_osssink_get_delay (osssink),
+ format, value)) {
+ res = FALSE;
}
break;
case GST_QUERY_POSITION:
if (!gst_osssink_convert (pad,
- GST_FORMAT_TIME, gst_element_get_time (GST_ELEMENT (osssink)),
- format, value)) {
- res = FALSE;
+ GST_FORMAT_TIME, gst_element_get_time (GST_ELEMENT (osssink)),
+ format, value)) {
+ res = FALSE;
}
break;
default:
res =
- gst_pad_query (gst_pad_get_peer (osssink->sinkpad), type, format,
- value);
+ gst_pad_query (gst_pad_get_peer (osssink->sinkpad), type, format,
+ value);
break;
}
@@ -631,17 +634,17 @@ gst_osssink_change_state (GstElement * element)
break;
case GST_STATE_PAUSED_TO_PLAYING:
gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock),
- TRUE);
+ TRUE);
break;
case GST_STATE_PLAYING_TO_PAUSED:
if (GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN))
- ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_RESET, 0);
+ ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_RESET, 0);
gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock),
- FALSE);
+ FALSE);
break;
case GST_STATE_PAUSED_TO_READY:
if (GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN))
- ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_RESET, 0);
+ ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_RESET, 0);
gst_osselement_reset (GST_OSSELEMENT (osssink));
osssink->handled = 0;
osssink->resync = TRUE;