+2007-08-23 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/volume/gstvolume.c:
+ Move passthrough below gst_object_sync_values(). Fixes #442654.
+
2007-08-22 Wim Taymans <wim.taymans@gmail.com>
* gst-libs/gst/audio/audio.c:
gst-libs/gst/Makefile
gst-libs/gst/audio/Makefile
gst-libs/gst/cdda/Makefile
+gst-libs/gst/fft/Makefile
gst-libs/gst/floatcast/Makefile
gst-libs/gst/interfaces/Makefile
gst-libs/gst/netbuffer/Makefile
$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+ $(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/sdp/libgstsdp-@GST_MAJORMINOR@.la \
<!ENTITY GstRingBuffer SYSTEM "xml/gstringbuffer.xml">
<!-- cdda -->
<!ENTITY GstCddaBaseSrc SYSTEM "xml/gstcddabasesrc.xml">
+<!-- fft -->
+<!ENTITY GstFFT SYSTEM "xml/gstfft.xml">
+<!ENTITY GstFFTS16 SYSTEM "xml/gstffts16.xml">
+<!ENTITY GstFFTS32 SYSTEM "xml/gstffts32.xml">
+<!ENTITY GstFFTF32 SYSTEM "xml/gstfftf32.xml">
+<!ENTITY GstFFTF64 SYSTEM "xml/gstfftf64.xml">
<!-- floatcast -->
<!ENTITY GstFloatCast SYSTEM "xml/gstfloatcast.xml">
<!-- interfaces -->
&GstCddaBaseSrc;
</chapter>
+ <chapter id="gstreamer-ffft">
+ <title>FFT Library</title>
+ <para>
+ This library should be linked to by getting cflags and libs from
+ <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+ <filename>-lgstfft-&GST_MAJORMINOR;</filename> to the library flags.
+ </para>
+ &GstFFT;
+ &GstFFTS16;
+ &GstFFTS32;
+ &GstFFTF32;
+ &GstFFTF64;
+ </chapter>
+
<chapter id="gstreamer-floatcast">
<title>FloatCast Library</title>
<para>
gst_cdda_base_src_get_type
</SECTION>
+# fft
+
+<SECTION>
+<FILE>gstfft</FILE>
+<INCLUDE>gst/fft/gstfft.h</INCLUDE>
+GstFFTWindow
+gst_fft_next_fast_length
+</SECTION>
+
+<SECTION>
+<FILE>gstffts16</FILE>
+<INCLUDE>gst/fft/gstffts16.h</INCLUDE>
+GstFFTS16
+GstFFTS16Complex
+gst_fft_s16_new
+gst_fft_s16_fft
+gst_fft_s16_inverse_fft
+gst_fft_s16_free
+gst_fft_s16_magnitude
+gst_fft_s16_phase
+gst_fft_s16_window
+</SECTION>
+
+<SECTION>
+<FILE>gstffts32</FILE>
+<INCLUDE>gst/fft/gstffts32.h</INCLUDE>
+GstFFTS32
+GstFFTS32Complex
+gst_fft_s32_new
+gst_fft_s32_fft
+gst_fft_s32_inverse_fft
+gst_fft_s32_free
+gst_fft_s32_magnitude
+gst_fft_s32_phase
+gst_fft_s32_window
+</SECTION>
+
+<SECTION>
+<FILE>gstfftf32</FILE>
+<INCLUDE>gst/fft/gstfftf32.h</INCLUDE>
+GstFFTF32
+GstFFTF32Complex
+gst_fft_f32_new
+gst_fft_f32_fft
+gst_fft_f32_inverse_fft
+gst_fft_f32_free
+gst_fft_f32_magnitude
+gst_fft_f32_phase
+gst_fft_f32_window
+</SECTION>
+
+<SECTION>
+<FILE>gstfftf64</FILE>
+<INCLUDE>gst/fft/gstfftf64.h</INCLUDE>
+GstFFTF64
+GstFFTF64Complex
+gst_fft_f64_new
+gst_fft_f64_fft
+gst_fft_f64_inverse_fft
+gst_fft_f64_free
+gst_fft_f64_magnitude
+gst_fft_f64_phase
+gst_fft_f64_window
+</SECTION>
# floatcast
ARG_IRADIO_NAME,
ARG_IRADIO_GENRE,
ARG_IRADIO_URL,
- ARG_IRADIO_TITLE
+ ARG_IRADIO_TITLE,
+ ARG_RANDOM_ACCESS
};
static void gst_gnome_vfs_src_base_init (gpointer g_class);
"iradio-title",
"Name of currently playing song", NULL, G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ ARG_RANDOM_ACCESS,
+ g_param_spec_boolean ("random-access",
+ "random-mode",
+ "Enable random file access", FALSE, G_PARAM_READWRITE));
+
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_start);
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_stop);
gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_get_size);
case ARG_IRADIO_MODE:
src->iradio_mode = g_value_get_boolean (value);
break;
+ case ARG_RANDOM_ACCESS:
+ src->random_access = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case ARG_IRADIO_TITLE:
g_value_set_string (value, src->iradio_title);
break;
+ case ARG_RANDOM_ACCESS:
+ g_value_set_boolean (value, src->random_access);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
gst_buffer_set_caps (buf, src->icy_caps);
data = GST_BUFFER_DATA (buf);
- GST_BUFFER_OFFSET (buf) = src->curoffset;
res = gnome_vfs_read (src->handle, data, size, &readbytes);
&& readbytes == 0)))
goto eos;
- GST_BUFFER_SIZE (buf) = readbytes;
-
if (G_UNLIKELY (res != GNOME_VFS_OK))
goto read_failed;
+ GST_BUFFER_OFFSET (buf) = src->curoffset;
+ GST_BUFFER_SIZE (buf) = readbytes;
src->curoffset += readbytes;
/* we're done, return the buffer */
return FALSE;
}
- if (gnome_vfs_uri_is_local (src->uri)) {
+ if (gnome_vfs_uri_is_local (src->uri) || src->random_access) {
GST_LOG_OBJECT (src, "local URI (%s), assuming random access is possible",
GST_STR_NULL (src->uri_name));
return TRUE;
if (src->uri != NULL) {
GnomeVFSOpenMode mode;
+ if (src->random_access)
+ mode = GNOME_VFS_OPEN_READ | GNOME_VFS_OPEN_RANDOM;
+ else
+ mode = GNOME_VFS_OPEN_READ;
+
/* this can block... */
- mode = GNOME_VFS_OPEN_READ;
res = gnome_vfs_open_uri (&src->handle, src->uri, mode);
- if (res != GNOME_VFS_OK)
+ if (res != GNOME_VFS_OK) {
goto open_failed;
+ }
src->own_handle = TRUE;
} else if (!src->handle) {
goto no_filename;
gst_gnome_vfs_src_pop_callbacks (src);
if (src->own_handle) {
- gnome_vfs_close (src->handle);
+ GnomeVFSResult res;
+
+ res = gnome_vfs_close (src->handle);
+ if (res != GNOME_VFS_OK) {
+ GST_ELEMENT_ERROR (src, RESOURCE, CLOSE, (NULL),
+ ("Could not close vfs handle: %s", gnome_vfs_result_to_string (res)));
+ }
src->handle = NULL;
}
src->curoffset = 0;
gchar *iradio_genre;
gchar *iradio_url;
gchar *iradio_title;
+
+ /* random acces read mode */
+ gboolean random_access;
};
struct _GstGnomeVFSSrcClass
tag \
audio \
cdda \
+ fft \
floatcast \
netbuffer \
pbutils \
struct _GstAudioFilterClass {
GstBaseTransformClass basetransformclass;
- /* virtual function, called whenever the format changes */
+ /* virtual function, called whenever the format changes */
gboolean (*setup) (GstAudioFilter * filter, GstRingBufferSpec * format);
/*< private >*/
}G_END_DECLS
-
/*** plugin initialization ***/
#define TYPE_FIND_REGISTER(plugin,name,rank,func,ext,caps,priv,notify) \
if (!gst_type_find_register (plugin, name, rank, func, ext, caps, priv, notify))\
return FALSE; \
}G_END_DECLS
+
+
static gboolean
plugin_init (GstPlugin * plugin)
{
/* FIXME: need oil_scalarmultiply_s16_ns ?
* https://bugs.freedesktop.org/show_bug.cgi?id=7060
* code below
- * - crashes for volume<1.0
- * - is not faster
+ * - crashes :/
+ * - real_vol_i is scaled by VOLUME_UNITY_INT16 and needs the bitshift
* time gst-launch 2>/dev/null audiotestsrc wave=7 num-buffers=100 ! volume volume=1.5 ! fakesink
*/
oil_scalarmult_s16 (data, 0, data, 0,
num_samples = n_bytes / sizeof (gint16);
- /* FIXME: need... liboil...
- * oil_scalarmultiply_s16_ns ?
+ /* FIXME: oil_scalarmultiply_s16_ns ?
* https://bugs.freedesktop.org/show_bug.cgi?id=7060
*/
for (i = 0; i < num_samples; i++) {
GstVolume *this = GST_VOLUME (base);
GstClockTime timestamp;
- /* don't process data in passthrough-mode */
- if (gst_base_transform_is_passthrough (base))
- return GST_FLOW_OK;
-
/* FIXME: if controllers are bound, subdivide GST_BUFFER_SIZE into small
* chunks for smooth fades, what is small? 1/10th sec.
*/
if (GST_CLOCK_TIME_IS_VALID (timestamp))
gst_object_sync_values (G_OBJECT (this), timestamp);
+ /* don't process data in passthrough-mode */
+ if (gst_base_transform_is_passthrough (base))
+ return GST_FLOW_OK;
+
this->process (this, GST_BUFFER_DATA (outbuf), GST_BUFFER_SIZE (outbuf));
return GST_FLOW_OK;
Version: @VERSION@
Requires: gstreamer-@GST_MAJORMINOR@
-Libs: -L${libdir}/audio -L${libdir}/cdda -L${libdir}/floatcast -L${libdir}/interfaces -L${libdir}/netbuffer -L${libdir}/riff -L${libdir}/rtp -L${libdir}/rtsp -L${libdir}/sdp -L${libdir}/tag -L${libdir}/pbutils -L${libdir}/video
+Libs: -L${libdir}/audio -L${libdir}/cdda -L${libdir}/fft -L${libdir}/floatcast -L${libdir}/interfaces -L${libdir}/netbuffer -L${libdir}/riff -L${libdir}/rtp -L${libdir}/rtsp -L${libdir}/sdp -L${libdir}/tag -L${libdir}/pbutils -L${libdir}/video
Cflags: -I${includedir}
-libraries=audio cdda floatcast interfaces netbuffer riff tag pbutils video
+libraries=audio cdda fft floatcast interfaces netbuffer riff tag pbutils video
Libs: -L${libdir}
Cflags: -I${includedir}
-libraries=audio cdda floatcast interfaces netbuffer riff rtp tag pbutils video
+libraries=audio cdda fft floatcast interfaces netbuffer riff rtp tag pbutils video
if (timestamp > latency)
timestamp -= latency;
else
- timestamp = 0;
+ timestamp = GST_CLOCK_TIME_NONE;
GST_BUFFER_TIMESTAMP (buf) = timestamp;
GST_BUFFER_DURATION (buf) = duration;
FT2_SUBDIRS =
endif
-SUBDIRS = $(FT2_SUBDIRS) volume
+SUBDIRS = $(FT2_SUBDIRS) volume xerror
+
+DIST_SUBDIRS = seek volume xerror
-DIST_SUBDIRS = seek volume
#define GST_LICENSE "LGPL"
/* package name in plugins */
-#define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release"
+#define GST_PACKAGE_NAME "GStreamer Base Plug-ins CVS/prerelease"
/* package origin */
#define GST_PACKAGE_ORIGIN "Unknown package origin"
#undef PACKAGE_NAME "GStreamer Base Plug-ins"
/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING "GStreamer Base Plug-ins 0.10.14"
+#undef PACKAGE_STRING "GStreamer Base Plug-ins 0.10.14.1"
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME "gst-plugins-base"
/* Define to the version of this package. */
-#undef PACKAGE_VERSION "0.10.14"
+#undef PACKAGE_VERSION "0.10.14.1"
/* directory where plugins are located */
#undef PLUGINDIR
#undef STDC_HEADERS
/* Version number of package */
-#define VERSION "0.10.14"
+#define VERSION "0.10.14.1"
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#undef inline
#endif
-#define GST_INSTALL_PLUGINS_HELPER "/home/jan/.install/libexec/gst-install-plugins-helper"
+#define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gnome-codec-install"