diff options
author | Andy Wingo <wingo@pobox.com> | 2003-07-16 16:08:14 +0000 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2003-07-16 16:08:14 +0000 |
commit | 6f06c87c1255c45d0fd020ff30a41b9a7e83a7d9 (patch) | |
tree | decbc26bb22fa79998cee2d5fa15642c250397ae /sys/oss | |
parent | 4418ea96599cdac151f62689269f88055b3d7edf (diff) |
actually recurse into sndfile if we are able big ladspa cleanups, mainly to comply with the buffer-frames caps proper...
Original commit message from CVS:
* actually recurse into sndfile if we are able
* big ladspa cleanups, mainly to comply with the buffer-frames caps property, but also general
cleanups
- the samplerate prop is gone, if you want to set it explicitly (as in for get-based plugins)
you need to use a filtered connection, just like with buffer-frames
* big float2int and int2float changes for buffer-frames compatibility - I think it's quite a bit
simpler
* make the ossclock general, add it to gstaudio, and use it in sndfile as well
i need to update mimetypes, but that's coming soon. there are some other plugins that don't
support buffer-frames, i guess i need to get around to fixing them as well.
Diffstat (limited to 'sys/oss')
-rw-r--r-- | sys/oss/Makefile.am | 3 | ||||
-rw-r--r-- | sys/oss/gstossaudio.c | 3 | ||||
-rw-r--r-- | sys/oss/gstossclock.c | 191 | ||||
-rw-r--r-- | sys/oss/gstossclock.h | 82 | ||||
-rw-r--r-- | sys/oss/gstosssink.c | 13 | ||||
-rw-r--r-- | sys/oss/gstosssink.h | 2 | ||||
-rw-r--r-- | sys/oss/gstosssrc.c | 10 |
7 files changed, 15 insertions, 289 deletions
diff --git a/sys/oss/Makefile.am b/sys/oss/Makefile.am index be0a9aba..de370819 100644 --- a/sys/oss/Makefile.am +++ b/sys/oss/Makefile.am @@ -8,7 +8,6 @@ libgstossaudio_la_SOURCES = gstosssink.c \ gstosssrc.c \ gstossaudio.c \ gstossgst.c \ - gstossclock.c \ gstosscommon.c libgstossaudio_la_CFLAGS = $(GST_CFLAGS) @@ -18,4 +17,4 @@ libgstossaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstosshelper_la_SOURCES = gstosshelper.c libgstosshelper_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -noinst_HEADERS = gstosssink.h gstosssrc.h gstossgst.h gstossclock.h gstosshelper.h gstosscommon.h +noinst_HEADERS = gstosssink.h gstosssrc.h gstossgst.h gstosshelper.h gstosscommon.h diff --git a/sys/oss/gstossaudio.c b/sys/oss/gstossaudio.c index dbb13875..e1d54c3a 100644 --- a/sys/oss/gstossaudio.c +++ b/sys/oss/gstossaudio.c @@ -27,6 +27,9 @@ plugin_init (GModule *module, GstPlugin *plugin) { gboolean ret; + if (!gst_library_load ("gstaudio")) + return FALSE; + ret = gst_osssink_factory_init (plugin); g_return_val_if_fail (ret == TRUE, FALSE); diff --git a/sys/oss/gstossclock.c b/sys/oss/gstossclock.c deleted file mode 100644 index a6249f03..00000000 --- a/sys/oss/gstossclock.c +++ /dev/null @@ -1,191 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu> - * 2000 Wim Taymans <wtay@chello.be> - * - * gstclock.c: Clock subsystem for maintaining time sync - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstossclock.h" - -static void gst_oss_clock_class_init (GstOssClockClass *klass); -static void gst_oss_clock_init (GstOssClock *clock); - -static GstClockTime gst_oss_clock_get_internal_time (GstClock *clock); -static GstClockReturn gst_oss_clock_id_wait_async (GstClock *clock, - GstClockEntry *entry); -static void gst_oss_clock_id_unschedule (GstClock *clock, - GstClockEntry *entry); - -static GstSystemClockClass *parent_class = NULL; -/* static guint gst_oss_clock_signals[LAST_SIGNAL] = { 0 }; */ - -GType -gst_oss_clock_get_type (void) -{ - static GType clock_type = 0; - - if (!clock_type) { - static const GTypeInfo clock_info = { - sizeof (GstOssClockClass), - NULL, - NULL, - (GClassInitFunc) gst_oss_clock_class_init, - NULL, - NULL, - sizeof (GstOssClock), - 4, - (GInstanceInitFunc) gst_oss_clock_init, - NULL - }; - clock_type = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "GstOssClock", - &clock_info, 0); - } - return clock_type; -} - - -static void -gst_oss_clock_class_init (GstOssClockClass *klass) -{ - GObjectClass *gobject_class; - GstObjectClass *gstobject_class; - GstClockClass *gstclock_class; - - gobject_class = (GObjectClass*) klass; - gstobject_class = (GstObjectClass*) klass; - gstclock_class = (GstClockClass*) klass; - - parent_class = g_type_class_ref (GST_TYPE_SYSTEM_CLOCK); - - gstclock_class->get_internal_time = gst_oss_clock_get_internal_time; - gstclock_class->wait_async = gst_oss_clock_id_wait_async; - gstclock_class->unschedule = gst_oss_clock_id_unschedule; -} - -static void -gst_oss_clock_init (GstOssClock *clock) -{ - gst_object_set_name (GST_OBJECT (clock), "GstOssClock"); - - clock->prev1 = 0; - clock->prev2 = 0; -} - -GstOssClock* -gst_oss_clock_new (gchar *name, GstOssClockGetTimeFunc func, gpointer user_data) -{ - GstOssClock *oss_clock = GST_OSS_CLOCK (g_object_new (GST_TYPE_OSS_CLOCK, NULL)); - - oss_clock->func = func; - oss_clock->user_data = user_data; - oss_clock->adjust = 0; - - return oss_clock; -} - -void -gst_oss_clock_set_active (GstClock *clock, gboolean active) -{ - GstOssClock *oss_clock = GST_OSS_CLOCK (clock); - GTimeVal timeval; - GstClockTime time; - GstClockTime osstime; - - g_get_current_time (&timeval); - time = GST_TIMEVAL_TO_TIME (timeval); - osstime = oss_clock->func (clock, oss_clock->user_data); - - if (active) { - oss_clock->adjust = time - osstime; - } - else { - oss_clock->adjust = osstime - time; - } - - oss_clock->active = active; -} - -static GstClockTime -gst_oss_clock_get_internal_time (GstClock *clock) -{ - GstOssClock *oss_clock = GST_OSS_CLOCK (clock); - - if (oss_clock->active) { - GstClockTime osstime; - - osstime = oss_clock->func (clock, oss_clock->user_data) + oss_clock->adjust; - - return osstime; - } - else { - GstClockTime time; - GTimeVal timeval; - - g_get_current_time (&timeval); - time = GST_TIMEVAL_TO_TIME (timeval); - - return time; - } -} - -void -gst_oss_clock_update_time (GstClock *clock, GstClockTime time) -{ - GstOssClock *oss_clock = (GstOssClock*)clock; - - while (oss_clock->async_entries) { - GstClockEntry *entry = (GstClockEntry*)oss_clock->async_entries->data; - - if (entry->time > time) - break; - - entry->func (clock, time, entry, entry->user_data); - - oss_clock->async_entries = g_slist_delete_link (oss_clock->async_entries, - oss_clock->async_entries); - /* do I need to free the entry? */ - } -} - -static gint -compare_clock_entries (GstClockEntry *entry1, GstClockEntry *entry2) -{ - return entry1->time - entry2->time; -} - -static GstClockReturn -gst_oss_clock_id_wait_async (GstClock *clock, GstClockEntry *entry) -{ - GstOssClock *oss_clock = (GstOssClock*)clock; - - oss_clock->async_entries = g_slist_insert_sorted (oss_clock->async_entries, - entry, - (GCompareFunc)compare_clock_entries); - - /* is this the proper return val? */ - return GST_CLOCK_EARLY; -} - -static void -gst_oss_clock_id_unschedule (GstClock *clock, GstClockEntry *entry) -{ - GstOssClock *oss_clock = (GstOssClock*)clock; - - oss_clock->async_entries = g_slist_remove (oss_clock->async_entries, - entry); -} diff --git a/sys/oss/gstossclock.h b/sys/oss/gstossclock.h deleted file mode 100644 index 279adfa1..00000000 --- a/sys/oss/gstossclock.h +++ /dev/null @@ -1,82 +0,0 @@ -/* GStreamer - * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu> - * 2000 Wim Taymans <wtay@chello.be> - * - * gstclock.h: Header for clock subsystem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __GST_OSS_CLOCK_H__ -#define __GST_OSS_CLOCK_H__ - -#include <gst/gstsystemclock.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -#define GST_TYPE_OSS_CLOCK \ - (gst_oss_clock_get_type()) -#define GST_OSS_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OSS_CLOCK,GstOssClock)) -#define GST_OSS_CLOCK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OSS_CLOCK,GstOssClockClass)) -#define GST_IS_OSS_CLOCK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OSS_CLOCK)) -#define GST_IS_OSS_CLOCK_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OSS_CLOCK)) - -typedef struct _GstOssClock GstOssClock; -typedef struct _GstOssClockClass GstOssClockClass; - -typedef GstClockTime (*GstOssClockGetTimeFunc) (GstClock *clock, gpointer user_data); - - -struct _GstOssClock { - GstSystemClock clock; - - GstOssClockGetTimeFunc func; - gpointer user_data; - - GstClockTime prev1, prev2; - GstClockTimeDiff adjust; - - GSList *async_entries; - - gboolean active; -}; - -struct _GstOssClockClass { - GstSystemClockClass parent_class; -}; - -GType gst_oss_clock_get_type (void); -GstOssClock* gst_oss_clock_new (gchar *name, GstOssClockGetTimeFunc func, - gpointer user_data); -void gst_oss_clock_set_active (GstClock *clock, gboolean active); -void gst_oss_clock_set_time (GstClock *clock, GstClockTime time); - -void gst_oss_clock_update_time (GstClock *clock, GstClockTime time); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __GST_OSS_CLOCK_H__ */ diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c index 904d1919..a881e08b 100644 --- a/sys/oss/gstosssink.c +++ b/sys/oss/gstosssink.c @@ -243,7 +243,7 @@ gst_osssink_init (GstOssSink *osssink) osssink->mute = FALSE; osssink->sync = TRUE; osssink->sinkpool = NULL; - osssink->provided_clock = GST_CLOCK (gst_oss_clock_new ("ossclock", gst_osssink_get_time, osssink)); + osssink->provided_clock = gst_audio_clock_new ("ossclock", gst_osssink_get_time, osssink); gst_object_set_parent (GST_OBJECT (osssink->provided_clock), GST_OBJECT (osssink)); osssink->handled = 0; @@ -348,7 +348,7 @@ gst_osssink_chain (GstPad *pad, GstBuffer *buf) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: ioctl (osssink->common.fd, SNDCTL_DSP_SYNC); - gst_oss_clock_set_active (osssink->provided_clock, FALSE); + gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), FALSE); gst_pad_event_default (pad, event); return; case GST_EVENT_DISCONTINUOUS: @@ -358,7 +358,7 @@ gst_osssink_chain (GstPad *pad, GstBuffer *buf) ioctl (osssink->common.fd, SNDCTL_DSP_RESET); if (gst_event_discont_get_value (event, GST_FORMAT_TIME, &value)) { if (!gst_clock_handle_discont (osssink->clock, value)) - gst_oss_clock_set_active (osssink->provided_clock, FALSE); + gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), FALSE); osssink->handled = 0; } osssink->resync = TRUE; @@ -403,7 +403,7 @@ gst_osssink_chain (GstPad *pad, GstBuffer *buf) if (jitter >= 0) { gst_clock_handle_discont (osssink->clock, buftime - queued + jitter); to_write = size; - gst_oss_clock_set_active (osssink->provided_clock, TRUE); + gst_audio_clock_set_active ((GstAudioClock*)osssink->provided_clock, TRUE); osssink->resync = FALSE; } } @@ -439,8 +439,7 @@ gst_osssink_chain (GstPad *pad, GstBuffer *buf) } } - if (osssink->clock) - gst_oss_clock_update_time (osssink->clock, buftime); + gst_audio_clock_update_time ((GstAudioClock*)osssink->provided_clock, buftime); gst_buffer_unref (buf); } @@ -627,7 +626,7 @@ gst_osssink_change_state (GstElement *element) { if (GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN)) ioctl (osssink->common.fd, SNDCTL_DSP_RESET, 0); - gst_oss_clock_set_active (osssink->provided_clock, FALSE); + gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), FALSE); osssink->resync = TRUE; break; } diff --git a/sys/oss/gstosssink.h b/sys/oss/gstosssink.h index 689d6009..7427769d 100644 --- a/sys/oss/gstosssink.h +++ b/sys/oss/gstosssink.h @@ -28,7 +28,7 @@ #include <gst/gst.h> #include "gstosscommon.h" -#include "gstossclock.h" +#include <gst/audio/audioclock.h> G_BEGIN_DECLS diff --git a/sys/oss/gstosssrc.c b/sys/oss/gstosssrc.c index 9eb24aaf..0e41d247 100644 --- a/sys/oss/gstosssrc.c +++ b/sys/oss/gstosssrc.c @@ -34,7 +34,7 @@ #include <gstosssrc.h> #include <gstosscommon.h> -#include <gstossclock.h> +#include <gst/audio/audioclock.h> /* elementfactory information */ static GstElementDetails gst_osssrc_details = { @@ -197,9 +197,7 @@ gst_osssrc_init (GstOssSrc *osssrc) osssrc->buffersize = 4096; osssrc->curoffset = 0; - osssrc->provided_clock = GST_CLOCK (gst_oss_clock_new ("ossclock", - gst_osssrc_get_time, - osssrc)); + osssrc->provided_clock = gst_audio_clock_new ("ossclock", gst_osssrc_get_time, osssrc); gst_object_set_parent (GST_OBJECT (osssrc->provided_clock), GST_OBJECT (osssrc)); osssrc->clock = NULL; @@ -443,10 +441,10 @@ gst_osssrc_change_state (GstElement *element) osssrc->curoffset = 0; break; case GST_STATE_PAUSED_TO_PLAYING: - gst_oss_clock_set_active (osssrc->provided_clock, TRUE); + gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssrc->provided_clock), TRUE); break; case GST_STATE_PLAYING_TO_PAUSED: - gst_oss_clock_set_active (osssrc->provided_clock, FALSE); + gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssrc->provided_clock), FALSE); break; case GST_STATE_PAUSED_TO_READY: if (GST_FLAG_IS_SET (element, GST_OSSSRC_OPEN)) |