+2005-05-06 Christian Schaller <uraeus@gnome.org>
+
+ * gst-libs: Remove all files as this is in gst-plugins-base now
+ * gst-libs/README: add a remove informing of this move
+
2005-05-06 Christian Schaller <uraeus@gnome.org>
* PORTED_09: update to add videofilter
+++ /dev/null
-SUBDIRS = gst ext
-
-DIST_SUBDIRS = gst ext
--- /dev/null
+Everything that used to be here is now in gst-plugins-base module
+++ /dev/null
-SUBDIRS =
-DIST_SUBDIRS =
+++ /dev/null
-# variables used for enum/marshal generation
-glib_enum_headers=multichannel.h
-glib_enum_define=GST_AUDIO
-glib_enum_prefix=gst_audio
-
-built_sources = multichannel-enumtypes.c
-built_headers = multichannel-enumtypes.h
-BUILT_SOURCES = $(built_sources) $(built_headers)
-
-librarydir = $(libdir)/gstreamer-@GST_MAJORMINOR@
-
-library_LTLIBRARIES = libgstaudio.la libgstaudiofilter.la
-noinst_LTLIBRARIES = libgstaudiofilterexample.la
-
-EXTRA_DIST = gstaudiofiltertemplate.c make_filter
-CLEANFILES = gstaudiofilterexample.c \
- $(BUILT_SOURCES)
-
-libgstaudio_la_SOURCES = audio.c audioclock.c \
- multichannel.c
-nodist_libgstaudio_la_SOURCES = $(built_sources)
-
-libgstaudioincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/audio
-libgstaudioinclude_HEADERS = \
- audio.h \
- audioclock.h \
- gstaudiofilter.h \
- multichannel.h
-
-nodist_libgstaudioinclude_HEADERS = \
- multichannel-enumtypes.h
-
-libgstaudio_la_LIBADD =
-libgstaudio_la_CFLAGS = $(GST_CFLAGS)
-libgstaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-
-libgstaudiofilter_la_SOURCES = gstaudiofilter.c gstaudiofilter.h
-libgstaudiofilter_la_CFLAGS = $(GST_CFLAGS)
-libgstaudiofilter_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-
-libgstaudiofilterexample_la_SOURCES = gstaudiofilterexample.c
-libgstaudiofilterexample_la_CFLAGS = $(GST_CFLAGS)
-libgstaudiofilterexample_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-
-gstaudiofilterexample.c: $(srcdir)/make_filter $(srcdir)/gstaudiofiltertemplate.c
- $(srcdir)/make_filter AudiofilterExample $(srcdir)/gstaudiofiltertemplate.c
-
-noinst_PROGRAMS = testchannels
-testchannels_SOURCES = testchannels.c
-testchannels_CFLAGS = $(GST_CFLAGS)
-testchannels_LDFLAGS = $(GST_LIBS)
-
-include $(top_srcdir)/common/glib-gen.mak
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "audio.h"
-#include "multichannel-enumtypes.h"
-
-#include <gst/gststructure.h>
-
-int
-gst_audio_frame_byte_size (GstPad * pad)
-{
-/* calculate byte size of an audio frame
- * this should be moved closer to the gstreamer core
- * and be implemented for every mime type IMO
- * returns -1 if there's an error (to avoid division by zero),
- * or the byte size if everything's ok
- */
-
- int width = 0;
- int channels = 0;
- const GstCaps *caps = NULL;
- GstStructure *structure;
-
- /* get caps of pad */
- caps = GST_PAD_CAPS (pad);
-
- if (caps == NULL) {
- /* ERROR: could not get caps of pad */
- g_warning ("gstaudio: could not get caps of pad %s:%s\n",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- return 0;
- }
-
- structure = gst_caps_get_structure (caps, 0);
-
- gst_structure_get_int (structure, "width", &width);
- gst_structure_get_int (structure, "channels", &channels);
- return (width / 8) * channels;
-}
-
-long
-gst_audio_frame_length (GstPad * pad, GstBuffer * buf)
-/* calculate length of buffer in frames
- * this should be moved closer to the gstreamer core
- * and be implemented for every mime type IMO
- * returns 0 if there's an error, or the number of frames if everything's ok
- */
-{
- int frame_byte_size = 0;
-
- frame_byte_size = gst_audio_frame_byte_size (pad);
- if (frame_byte_size == 0)
- /* error */
- return 0;
- /* FIXME: this function assumes the buffer size to be a whole multiple
- * of the frame byte size
- */
- return GST_BUFFER_SIZE (buf) / frame_byte_size;
-}
-
-long
-gst_audio_frame_rate (GstPad * pad)
-/*
- * calculate frame rate (based on caps of pad)
- * returns 0 if failed, rate if success
- */
-{
- const GstCaps *caps = NULL;
- gint rate;
- GstStructure *structure;
-
- /* get caps of pad */
- caps = GST_PAD_CAPS (pad);
-
- if (caps == NULL) {
- /* ERROR: could not get caps of pad */
- g_warning ("gstaudio: could not get caps of pad %s:%s\n",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- return 0;
- } else {
- structure = gst_caps_get_structure (caps, 0);
- gst_structure_get_int (structure, "rate", &rate);
- return rate;
- }
-}
-
-double
-gst_audio_length (GstPad * pad, GstBuffer * buf)
-{
-/* calculate length in seconds
- * of audio buffer buf
- * based on capabilities of pad
- */
-
- long bytes = 0;
- int width = 0;
- int channels = 0;
- int rate = 0;
-
- double length;
-
- const GstCaps *caps = NULL;
- GstStructure *structure;
-
- g_assert (GST_IS_BUFFER (buf));
- /* get caps of pad */
- caps = GST_PAD_CAPS (pad);
- if (caps == NULL) {
- /* ERROR: could not get caps of pad */
- g_warning ("gstaudio: could not get caps of pad %s:%s\n",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- length = 0.0;
- } else {
- structure = gst_caps_get_structure (caps, 0);
- bytes = GST_BUFFER_SIZE (buf);
- gst_structure_get_int (structure, "width", &width);
- gst_structure_get_int (structure, "channels", &channels);
- gst_structure_get_int (structure, "rate", &rate);
-
- g_assert (bytes != 0);
- g_assert (width != 0);
- g_assert (channels != 0);
- g_assert (rate != 0);
- length = (bytes * 8.0) / (double) (rate * channels * width);
- }
- /* g_print ("DEBUG: audio: returning length of %f\n", length); */
- return length;
-}
-
-long
-gst_audio_highest_sample_value (GstPad * pad)
-/* calculate highest possible sample value
- * based on capabilities of pad
- */
-{
- gboolean is_signed = FALSE;
- gint width = 0;
- const GstCaps *caps = NULL;
- GstStructure *structure;
-
- caps = GST_PAD_CAPS (pad);
- if (caps == NULL) {
- g_warning ("gstaudio: could not get caps of pad %s:%s\n",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- }
-
- structure = gst_caps_get_structure (caps, 0);
- gst_structure_get_int (structure, "width", &width);
- gst_structure_get_boolean (structure, "signed", &is_signed);
-
- if (is_signed)
- --width;
- /* example : 16 bit, signed : samples between -32768 and 32767 */
- return ((long) (1 << width));
-}
-
-gboolean
-gst_audio_is_buffer_framed (GstPad * pad, GstBuffer * buf)
-/* check if the buffer size is a whole multiple of the frame size */
-{
- if (GST_BUFFER_SIZE (buf) % gst_audio_frame_byte_size (pad) == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-/* _getcaps helper functions
- * sets structure fields to default for audio type
- * flag determines which structure fields to set to default
- * keep these functions in sync with the templates in audio.h
- */
-
-/* private helper function
- * sets a list on the structure
- * pass in structure, fieldname for the list, type of the list values,
- * number of list values, and each of the values, terminating with NULL
- */
-static void
-_gst_audio_structure_set_list (GstStructure * structure,
- const gchar * fieldname, GType type, int number, ...)
-{
- va_list varargs;
- GValue value = { 0 };
- GArray *array;
- int j;
-
- g_return_if_fail (structure != NULL);
-
- g_value_init (&value, GST_TYPE_LIST);
- array = g_value_peek_pointer (&value);
-
- va_start (varargs, number);
-
- for (j = 0; j < number; ++j) {
- int i;
- gboolean b;
-
- GValue list_value = { 0 };
-
- switch (type) {
- case G_TYPE_INT:
- i = va_arg (varargs, int);
-
- g_value_init (&list_value, G_TYPE_INT);
- g_value_set_int (&list_value, i);
- break;
- case G_TYPE_BOOLEAN:
- b = va_arg (varargs, gboolean);
- g_value_init (&list_value, G_TYPE_BOOLEAN);
- g_value_set_boolean (&list_value, b);
- break;
- default:
- g_warning
- ("_gst_audio_structure_set_list: LIST of given type not implemented.");
- }
- g_array_append_val (array, list_value);
-
- }
- gst_structure_set_value (structure, fieldname, &value);
- va_end (varargs);
-}
-
-void
-gst_audio_structure_set_int (GstStructure * structure, GstAudioFieldFlag flag)
-{
- if (flag & GST_AUDIO_FIELD_RATE)
- gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
- NULL);
- if (flag & GST_AUDIO_FIELD_CHANNELS)
- gst_structure_set (structure, "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT,
- NULL);
- if (flag & GST_AUDIO_FIELD_ENDIANNESS)
- _gst_audio_structure_set_list (structure, "endianness", G_TYPE_INT, 2,
- G_LITTLE_ENDIAN, G_BIG_ENDIAN, NULL);
- if (flag & GST_AUDIO_FIELD_WIDTH)
- _gst_audio_structure_set_list (structure, "width", G_TYPE_INT, 3, 8, 16, 32,
- NULL);
- if (flag & GST_AUDIO_FIELD_DEPTH)
- gst_structure_set (structure, "depth", GST_TYPE_INT_RANGE, 1, 32, NULL);
- if (flag & GST_AUDIO_FIELD_SIGNED)
- _gst_audio_structure_set_list (structure, "signed", G_TYPE_BOOLEAN, 2, TRUE,
- FALSE, NULL);
- if (flag & GST_AUDIO_FIELD_BUFFER_FRAMES)
- gst_structure_set (structure, "buffer-frames", GST_TYPE_INT_RANGE, 1,
- G_MAXINT, NULL);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- gst_audio_channel_position_get_type ();
-
- return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "gstaudio",
- "Support services for audio plugins",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN);
+++ /dev/null
-EXPORTS
- gst_plugin_desc
- gst_audio_length
- gst_audio_is_buffer_framed
- gst_audio_highest_sample_value
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Library <2001> Thomas Vander Stichele <thomas@apestaart.org>
- *
- * 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 <gst/gst.h>
-
-#include <gst/audio/audioclock.h>
-
-#ifndef __GST_AUDIO_AUDIO_H__
-#define __GST_AUDIO_AUDIO_H__
-
-G_BEGIN_DECLS
-
-/* For people that are looking at this source: the purpose of these defines is
- * to make GstCaps a bit easier, in that you don't have to know all of the
- * properties that need to be defined. you can just use these macros. currently
- * (8/01) the only plugins that use these are the passthrough, speed, volume,
- * adder, and [de]interleave plugins. These are for convenience only, and do not
- * specify the 'limits' of GStreamer. you might also use these definitions as a
- * base for making your own caps, if need be.
- *
- * For example, to make a source pad that can output streams of either mono
- * float or any channel int:
- *
- * template = gst_pad_template_new
- * ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- * gst_caps_append(gst_caps_new ("sink_int", "audio/x-raw-int",
- * GST_AUDIO_INT_PAD_TEMPLATE_PROPS),
- * gst_caps_new ("sink_float", "audio/x-raw-float",
- * GST_AUDIO_FLOAT_PAD_TEMPLATE_PROPS)),
- * NULL);
- *
- * sinkpad = gst_pad_new_from_template(template, "sink");
- *
- * Andy Wingo, 18 August 2001
- * Thomas, 6 September 2002 */
-
-#define GST_AUDIO_DEF_RATE 44100
-
-#define GST_AUDIO_INT_PAD_TEMPLATE_CAPS \
- "audio/x-raw-int, " \
- "rate = (int) [ 1, MAX ], " \
- "channels = (int) [ 1, MAX ], " \
- "endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }, " \
- "width = (int) { 8, 16, 24, 32 }, " \
- "depth = (int) [ 1, 32 ], " \
- "signed = (boolean) { true, false }"
-
-
-/* "standard" int audio is native order, 16 bit stereo. */
-#define GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS \
- "audio/x-raw-int, " \
- "rate = (int) [ 1, MAX ], " \
- "channels = (int) 2, " \
- "endianness = (int) BYTE_ORDER, " \
- "width = (int) 16, " \
- "depth = (int) 16, " \
- "signed = (boolean) true"
-
-#define GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS \
- "audio/x-raw-float, " \
- "rate = (int) [ 1, MAX ], " \
- "channels = (int) [ 1, MAX ], " \
- "endianness = (int) { LITTLE_ENDIAN , BIG_ENDIAN }, " \
- "width = (int) { 32, 64 }, " \
- "buffer-frames = (int) [ 1, MAX]"
-
-/* "standard" float audio is native order, 32 bit mono. */
-#define GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_CAPS \
- "audio/x-raw-float, " \
- "width = (int) 32, " \
- "rate = (int) [ 1, MAX ], " \
- "channels = (int) 1, " \
- "endianness = (int) BYTE_ORDER, " \
- "buffer-frames = (int) [ 1, MAX]"
-
-/*
- * this library defines and implements some helper functions for audio
- * handling
- */
-
-/* get byte size of audio frame (based on caps of pad */
-int gst_audio_frame_byte_size (GstPad* pad);
-
-/* get length in frames of buffer */
-long gst_audio_frame_length (GstPad* pad, GstBuffer* buf);
-
-/* get frame rate based on caps */
-long gst_audio_frame_rate (GstPad *pad);
-
-/* calculate length in seconds of audio buffer buf based on caps of pad */
-double gst_audio_length (GstPad* pad, GstBuffer* buf);
-
-/* calculate highest possible sample value based on capabilities of pad */
-long gst_audio_highest_sample_value (GstPad* pad);
-
-/* check if the buffer size is a whole multiple of the frame size */
-gboolean gst_audio_is_buffer_framed (GstPad* pad, GstBuffer* buf);
-
-/* functions useful for _getcaps functions */
-typedef enum {
- GST_AUDIO_FIELD_RATE = (1 << 0),
- GST_AUDIO_FIELD_CHANNELS = (1 << 1),
- GST_AUDIO_FIELD_ENDIANNESS = (1 << 2),
- GST_AUDIO_FIELD_WIDTH = (1 << 3),
- GST_AUDIO_FIELD_DEPTH = (1 << 4),
- GST_AUDIO_FIELD_SIGNED = (1 << 5),
- GST_AUDIO_FIELD_BUFFER_FRAMES = (1 << 6)
-} GstAudioFieldFlag;
-
-void gst_audio_structure_set_int (GstStructure *structure, GstAudioFieldFlag flag);
-
-G_END_DECLS
-
-#endif /* __GST_AUDIO_AUDIO_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="audio"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67893}"
- RootNamespace="audio"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;AUDIO_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstaudio.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="audio.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/audio.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstaudio.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;AUDIO_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstaudio.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="audio.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstaudio.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\audio.c">
- </File>
- <File
- RelativePath=".\audio.def">
- </File>
- <File
- RelativePath=".\audioclock.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\audio.h">
- </File>
- <File
- RelativePath=".\audioclock.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/* GStreamer
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- * 2000 Wim Taymans <wtay@chello.be>
- *
- * audioclock.c: Clock for use by audio plugins
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "audioclock.h"
-
-static void gst_audio_clock_class_init (GstAudioClockClass * klass);
-static void gst_audio_clock_init (GstAudioClock * clock);
-
-static GstClockTime gst_audio_clock_get_internal_time (GstClock * clock);
-static GstClockEntryStatus gst_audio_clock_id_wait_async (GstClock * clock,
- GstClockEntry * entry);
-static void gst_audio_clock_id_unschedule (GstClock * clock,
- GstClockEntry * entry);
-
-static GstSystemClockClass *parent_class = NULL;
-
-/* static guint gst_audio_clock_signals[LAST_SIGNAL] = { 0 }; */
-
-GType
-gst_audio_clock_get_type (void)
-{
- static GType clock_type = 0;
-
- if (!clock_type) {
- static const GTypeInfo clock_info = {
- sizeof (GstAudioClockClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_audio_clock_class_init,
- NULL,
- NULL,
- sizeof (GstAudioClock),
- 4,
- (GInstanceInitFunc) gst_audio_clock_init,
- NULL
- };
-
- clock_type = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "GstAudioClock",
- &clock_info, 0);
- }
- return clock_type;
-}
-
-
-static void
-gst_audio_clock_class_init (GstAudioClockClass * 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_audio_clock_get_internal_time;
- gstclock_class->wait_async = gst_audio_clock_id_wait_async;
- gstclock_class->unschedule = gst_audio_clock_id_unschedule;
-}
-
-static void
-gst_audio_clock_init (GstAudioClock * clock)
-{
- gst_object_set_name (GST_OBJECT (clock), "GstAudioClock");
-
- clock->prev1 = 0;
- clock->prev2 = 0;
-}
-
-GstClock *
-gst_audio_clock_new (gchar * name, GstAudioClockGetTimeFunc func,
- gpointer user_data)
-{
- GstAudioClock *aclock =
- GST_AUDIO_CLOCK (g_object_new (GST_TYPE_AUDIO_CLOCK, NULL));
-
- aclock->func = func;
- aclock->user_data = user_data;
- aclock->adjust = 0;
-
- return (GstClock *) aclock;
-}
-
-void
-gst_audio_clock_set_active (GstAudioClock * aclock, gboolean active)
-{
- GstClockTime audio_time, system_time;
- GstClock *clock;
- GTimeVal timeval;
-
- g_return_if_fail (GST_IS_AUDIO_CLOCK (aclock));
- clock = GST_CLOCK (aclock);
-
- if (active == aclock->active) {
- /* Nothing to do. */
- return;
- }
-
- audio_time = aclock->func (clock, aclock->user_data);
-
- g_get_current_time (&timeval);
- system_time = GST_TIMEVAL_TO_TIME (timeval);
-
- /* Set the new adjust value in such a way that there's no abrupt
- discontinuity, i.e. if gst_audio_clock_get_internal_time is
- invoked right before and right after (de)activating the clock,
- the values returned will be close to each other, and the second
- value will be greater than or equal than the first. */
- if (active) {
- aclock->adjust = aclock->adjust + system_time - audio_time;
- } else {
- aclock->adjust = aclock->adjust + audio_time - system_time;
- }
-
- aclock->active = active;
-}
-
-static GstClockTime
-gst_audio_clock_get_internal_time (GstClock * clock)
-{
- GstAudioClock *aclock = GST_AUDIO_CLOCK (clock);
-
- if (aclock->active) {
- return aclock->func (clock, aclock->user_data) + aclock->adjust;
- } else {
- GTimeVal timeval;
-
- g_get_current_time (&timeval);
- return GST_TIMEVAL_TO_TIME (timeval) + aclock->adjust;
- }
-}
-
-void
-gst_audio_clock_update_time (GstAudioClock * aclock, GstClockTime time)
-{
- /* I don't know of a purpose in updating these; perhaps they can be removed */
- aclock->prev2 = aclock->prev1;
- aclock->prev1 = time;
-
- /* FIXME: the wait_async subsystem should be made threadsafe, but I don't want
- * to lock and unlock a mutex on every iteration... */
- while (aclock->async_entries) {
- GstClockEntry *entry = (GstClockEntry *) aclock->async_entries->data;
-
- if (entry->time > time)
- break;
-
- entry->func ((GstClock *) aclock, time, entry, entry->user_data);
-
- aclock->async_entries = g_slist_delete_link (aclock->async_entries,
- aclock->async_entries);
- /* do I need to free the entry? */
- }
-}
-
-static gint
-compare_clock_entries (GstClockEntry * entry1, GstClockEntry * entry2)
-{
- return entry1->time - entry2->time;
-}
-
-static GstClockEntryStatus
-gst_audio_clock_id_wait_async (GstClock * clock, GstClockEntry * entry)
-{
- GstAudioClock *aclock = (GstAudioClock *) clock;
-
- aclock->async_entries = g_slist_insert_sorted (aclock->async_entries,
- entry, (GCompareFunc) compare_clock_entries);
-
- /* is this the proper return val? */
- return GST_CLOCK_EARLY;
-}
-
-static void
-gst_audio_clock_id_unschedule (GstClock * clock, GstClockEntry * entry)
-{
- GstAudioClock *aclock = (GstAudioClock *) clock;
-
- aclock->async_entries = g_slist_remove (aclock->async_entries, entry);
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- * 2000 Wim Taymans <wtay@chello.be>
- *
- * audioclock.h: Clock for use by audio plugins
- *
- * 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_AUDIO_CLOCK_H__
-#define __GST_AUDIO_CLOCK_H__
-
-#include <gst/gstsystemclock.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AUDIO_CLOCK \
- (gst_audio_clock_get_type())
-#define GST_AUDIO_CLOCK(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_CLOCK,GstAudioClock))
-#define GST_AUDIO_CLOCK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_CLOCK,GstAudioClockClass))
-#define GST_IS_AUDIO_CLOCK(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_CLOCK))
-#define GST_IS_AUDIO_CLOCK_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_CLOCK))
-
-typedef struct _GstAudioClock GstAudioClock;
-typedef struct _GstAudioClockClass GstAudioClockClass;
-
-typedef GstClockTime (*GstAudioClockGetTimeFunc) (GstClock *clock, gpointer user_data);
-
-
-struct _GstAudioClock {
- GstSystemClock clock;
-
- GstClockTime prev1, prev2;
-
- /* --- protected --- */
- GstAudioClockGetTimeFunc func;
- gpointer user_data;
-
- GstClockTimeDiff adjust;
-
- GSList *async_entries;
-
- gboolean active;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-struct _GstAudioClockClass {
- GstSystemClockClass parent_class;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-GType gst_audio_clock_get_type (void);
-GstClock* gst_audio_clock_new (gchar *name, GstAudioClockGetTimeFunc func,
- gpointer user_data);
-void gst_audio_clock_set_active (GstAudioClock *aclock, gboolean active);
-
-void gst_audio_clock_update_time (GstAudioClock *aclock, GstClockTime time);
-
-G_END_DECLS
-
-#endif /* __GST_AUDIO_CLOCK_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="audiofilter"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67894}"
- RootNamespace="audiofilter"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;AUDIOFILTER_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstaudiofilter.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="audio.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/audiofilter.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstaudiofilter.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;AUDIOFILTER_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstaudiofilter.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="audio.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstaudiofilter.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\gstaudiofilter.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\gstaudiofilter.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2003> David Schleef <ds@schleef.org>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/*#define DEBUG_ENABLED */
-#include "gstaudiofilter.h"
-
-#include <string.h>
-
-
-/* GstAudiofilter signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- ARG_0,
- ARG_METHOD
- /* FILL ME */
-};
-
-static void gst_audiofilter_base_init (gpointer g_class);
-static void gst_audiofilter_class_init (gpointer g_class, gpointer class_data);
-static void gst_audiofilter_init (GTypeInstance * instance, gpointer g_class);
-
-static void gst_audiofilter_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_audiofilter_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-static void gst_audiofilter_chain (GstPad * pad, GstData * _data);
-GstCaps *gst_audiofilter_class_get_capslist (GstAudiofilterClass * klass);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_audiofilter_get_type (void)
-{
- static GType audiofilter_type = 0;
-
- if (!audiofilter_type) {
- static const GTypeInfo audiofilter_info = {
- sizeof (GstAudiofilterClass),
- gst_audiofilter_base_init,
- NULL,
- gst_audiofilter_class_init,
- NULL,
- NULL,
- sizeof (GstAudiofilter),
- 0,
- gst_audiofilter_init,
- };
-
- audiofilter_type = g_type_register_static (GST_TYPE_ELEMENT,
- "GstAudiofilter", &audiofilter_info, G_TYPE_FLAG_ABSTRACT);
- }
- return audiofilter_type;
-}
-
-static void
-gst_audiofilter_base_init (gpointer g_class)
-{
- static GstElementDetails audiofilter_details = {
- "Audio filter base class",
- "Filter/Effect/Audio",
- "Filters audio",
- "David Schleef <ds@schleef.org>"
- };
- GstAudiofilterClass *klass = (GstAudiofilterClass *) g_class;
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_set_details (element_class, &audiofilter_details);
-}
-
-static void
-gst_audiofilter_class_init (gpointer g_class, gpointer class_data)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
- GstAudiofilterClass *klass;
-
- klass = (GstAudiofilterClass *) g_class;
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
-
- gobject_class->set_property = gst_audiofilter_set_property;
- gobject_class->get_property = gst_audiofilter_get_property;
-}
-
-static GstPadLinkReturn
-gst_audiofilter_link (GstPad * pad, const GstCaps * caps)
-{
- GstAudiofilter *audiofilter;
- GstPadLinkReturn ret;
- GstPadLinkReturn link_ret;
- GstStructure *structure;
- GstAudiofilterClass *audiofilter_class;
-
- GST_DEBUG ("gst_audiofilter_link");
- audiofilter = GST_AUDIOFILTER (gst_pad_get_parent (pad));
- audiofilter_class = GST_AUDIOFILTER_CLASS (G_OBJECT_GET_CLASS (audiofilter));
-
- ret = GST_PAD_LINK_DELAYED; /* intialise with dummy value */
- if (pad == audiofilter->srcpad) {
- link_ret = gst_pad_try_set_caps (audiofilter->sinkpad, caps);
- } else {
- link_ret = gst_pad_try_set_caps (audiofilter->srcpad, caps);
- }
-
- if (GST_PAD_LINK_FAILED (link_ret)) {
- return link_ret;
- }
-
- structure = gst_caps_get_structure (caps, 0);
-
- if (strcmp (gst_structure_get_name (structure), "audio/x-raw-int") == 0) {
- ret = gst_structure_get_int (structure, "depth", &audiofilter->depth);
- ret &= gst_structure_get_int (structure, "width", &audiofilter->width);
- } else if (strcmp (gst_structure_get_name (structure), "audio/x-raw-float")
- == 0) {
- ret &= gst_structure_get_int (structure, "width", &audiofilter->width);
- } else {
- g_assert_not_reached ();
- }
- ret &= gst_structure_get_int (structure, "rate", &audiofilter->rate);
- ret &= gst_structure_get_int (structure, "channels", &audiofilter->channels);
-
- if (!ret)
- return GST_PAD_LINK_REFUSED;
-
- audiofilter->bytes_per_sample = (audiofilter->width / 8) *
- audiofilter->channels;
-
- if (audiofilter_class->setup)
- (audiofilter_class->setup) (audiofilter);
-
- return GST_PAD_LINK_OK;
-}
-
-static void
-gst_audiofilter_init (GTypeInstance * instance, gpointer g_class)
-{
- GstAudiofilter *audiofilter = GST_AUDIOFILTER (instance);
- GstPadTemplate *pad_template;
-
- GST_DEBUG ("gst_audiofilter_init");
-
- pad_template =
- gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink");
- g_return_if_fail (pad_template != NULL);
- audiofilter->sinkpad = gst_pad_new_from_template (pad_template, "sink");
- gst_element_add_pad (GST_ELEMENT (audiofilter), audiofilter->sinkpad);
- gst_pad_set_chain_function (audiofilter->sinkpad, gst_audiofilter_chain);
- gst_pad_set_link_function (audiofilter->sinkpad, gst_audiofilter_link);
- gst_pad_set_getcaps_function (audiofilter->sinkpad, gst_pad_proxy_getcaps);
-
- pad_template =
- gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src");
- g_return_if_fail (pad_template != NULL);
- audiofilter->srcpad = gst_pad_new_from_template (pad_template, "src");
- gst_element_add_pad (GST_ELEMENT (audiofilter), audiofilter->srcpad);
- gst_pad_set_link_function (audiofilter->srcpad, gst_audiofilter_link);
- gst_pad_set_getcaps_function (audiofilter->srcpad, gst_pad_proxy_getcaps);
-
- audiofilter->inited = FALSE;
-}
-
-static void
-gst_audiofilter_chain (GstPad * pad, GstData * data)
-{
- GstBuffer *inbuf = GST_BUFFER (data);
- GstAudiofilter *audiofilter;
- GstBuffer *outbuf;
- GstAudiofilterClass *audiofilter_class;
-
- GST_DEBUG ("gst_audiofilter_chain");
-
- g_return_if_fail (pad != NULL);
- g_return_if_fail (GST_IS_PAD (pad));
- g_return_if_fail (inbuf != NULL);
-
- audiofilter = GST_AUDIOFILTER (gst_pad_get_parent (pad));
- //g_return_if_fail (audiofilter->inited);
- audiofilter_class = GST_AUDIOFILTER_CLASS (G_OBJECT_GET_CLASS (audiofilter));
-
- GST_DEBUG ("gst_audiofilter_chain: got buffer of %d bytes in '%s'",
- GST_BUFFER_SIZE (inbuf), GST_OBJECT_NAME (audiofilter));
-
- if (audiofilter->passthru) {
- gst_pad_push (audiofilter->srcpad, data);
- return;
- }
-
- audiofilter->size = GST_BUFFER_SIZE (inbuf);
- audiofilter->n_samples = audiofilter->size / audiofilter->bytes_per_sample;
-
- if (gst_data_is_writable (data)) {
- if (audiofilter_class->filter_inplace) {
- (audiofilter_class->filter_inplace) (audiofilter, inbuf);
- outbuf = inbuf;
- } else {
- outbuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (inbuf));
- GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (inbuf);
- GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (inbuf);
-
- (audiofilter_class->filter) (audiofilter, outbuf, inbuf);
- gst_buffer_unref (inbuf);
- }
- } else {
- outbuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (inbuf));
- GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (inbuf);
- GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (inbuf);
- if (audiofilter_class->filter) {
- (audiofilter_class->filter) (audiofilter, outbuf, inbuf);
- } else {
- memcpy (GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf),
- GST_BUFFER_SIZE (inbuf));
-
- (audiofilter_class->filter_inplace) (audiofilter, outbuf);
- }
- gst_buffer_unref (inbuf);
- }
-
- gst_pad_push (audiofilter->srcpad, GST_DATA (outbuf));
-}
-
-static void
-gst_audiofilter_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstAudiofilter *src;
-
- /* it's not null if we got it, but it might not be ours */
- g_return_if_fail (GST_IS_AUDIOFILTER (object));
- src = GST_AUDIOFILTER (object);
-
- GST_DEBUG ("gst_audiofilter_set_property");
- switch (prop_id) {
- default:
- break;
- }
-}
-
-static void
-gst_audiofilter_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstAudiofilter *src;
-
- /* it's not null if we got it, but it might not be ours */
- g_return_if_fail (GST_IS_AUDIOFILTER (object));
- src = GST_AUDIOFILTER (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-void
-gst_audiofilter_class_add_pad_templates (GstAudiofilterClass *
- audiofilter_class, const GstCaps * caps)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (audiofilter_class);
-
- audiofilter_class->caps = gst_caps_copy (caps);
-
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_copy (caps)));
-
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- gst_caps_copy (caps)));
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "gstaudiofilter",
- "Audio filter parent class",
- plugin_init, VERSION, "LGPL", GST_PACKAGE, GST_ORIGIN)
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_AUDIOFILTER_H__
-#define __GST_AUDIOFILTER_H__
-
-
-#include <gst/gst.h>
-
-
-G_BEGIN_DECLS
-
-typedef struct _GstAudiofilter GstAudiofilter;
-typedef struct _GstAudiofilterClass GstAudiofilterClass;
-
-typedef void (*GstAudiofilterFilterFunc)(GstAudiofilter *filter,
- GstBuffer *outbuf, GstBuffer *inbuf);
-typedef void (*GstAudiofilterInplaceFilterFunc)(GstAudiofilter *filter,
- GstBuffer *buffer);
-
-typedef void (*GstAudiofilterSetupFunc) (GstAudiofilter *filter);
-
-
-#define GST_TYPE_AUDIOFILTER \
- (gst_audiofilter_get_type())
-#define GST_AUDIOFILTER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIOFILTER,GstAudiofilter))
-#define GST_AUDIOFILTER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIOFILTER,GstAudiofilterClass))
-#define GST_IS_AUDIOFILTER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIOFILTER))
-#define GST_IS_AUDIOFILTER_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIOFILTER))
-
-struct _GstAudiofilter {
- GstElement element;
-
- GstPad *sinkpad,*srcpad;
-
- /* audio state */
- gboolean inited;
- gboolean passthru;
-
- int rate;
- int width;
- int channels;
- int depth;
-
- int n_samples;
- int size;
- int bytes_per_sample;
-};
-
-struct _GstAudiofilterClass {
- GstElementClass parent_class;
-
- GstCaps *caps;
- GstAudiofilterSetupFunc setup;
- GstAudiofilterInplaceFilterFunc filter_inplace;
- GstAudiofilterFilterFunc filter;
-};
-
-GType gst_audiofilter_get_type(void);
-
-void gst_audiofilter_class_add_pad_templates (GstAudiofilterClass *audiofilterclass, const GstCaps *caps);
-
-G_END_DECLS
-
-#endif /* __GST_AUDIOFILTER_H__ */
-
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2003> David Schleef <ds@schleef.org>
- *
- * 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.
- */
-
-/*
- * This file was (probably) generated from
- * $Id$
- * and
- * MAKEFILTERVERSION
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-#include <gst/audio/gstaudiofilter.h>
-#include <string.h>
-
-typedef struct _GstAudiofilterTemplate GstAudiofilterTemplate;
-typedef struct _GstAudiofilterTemplateClass GstAudiofilterTemplateClass;
-
-#define GST_TYPE_AUDIOFILTER_TEMPLATE \
- (gst_audiofilter_template_get_type())
-#define GST_AUDIOFILTER_TEMPLATE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIOFILTER_TEMPLATE,GstAudiofilterTemplate))
-#define GST_AUDIOFILTER_TEMPLATE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIOFILTER_TEMPLATE,GstAudiofilterTemplateClass))
-#define GST_IS_AUDIOFILTER_TEMPLATE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIOFILTER_TEMPLATE))
-#define GST_IS_AUDIOFILTER_TEMPLATE_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIOFILTER_TEMPLATE))
-
-struct _GstAudiofilterTemplate
-{
- GstAudiofilter audiofilter;
-
-};
-
-struct _GstAudiofilterTemplateClass
-{
- GstAudiofilterClass parent_class;
-
-};
-
-
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- ARG_0
- /* FILL ME */
-};
-
-static void gst_audiofilter_template_base_init (gpointer g_class);
-static void gst_audiofilter_template_class_init (gpointer g_class,
- gpointer class_data);
-static void gst_audiofilter_template_init (GTypeInstance * instance,
- gpointer g_class);
-
-static void gst_audiofilter_template_set_property (GObject * object,
- guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_audiofilter_template_get_property (GObject * object,
- guint prop_id, GValue * value, GParamSpec * pspec);
-
-static void gst_audiofilter_template_setup (GstAudiofilter * audiofilter);
-static void gst_audiofilter_template_filter (GstAudiofilter * audiofilter,
- GstBuffer * outbuf, GstBuffer * inbuf);
-static void gst_audiofilter_template_filter_inplace (GstAudiofilter *
- audiofilter, GstBuffer * buf);
-
-GType
-gst_audiofilter_template_get_type (void)
-{
- static GType audiofilter_template_type = 0;
-
- if (!audiofilter_template_type) {
- static const GTypeInfo audiofilter_template_info = {
- sizeof (GstAudiofilterTemplateClass),
- gst_audiofilter_template_base_init,
- NULL,
- gst_audiofilter_template_class_init,
- NULL,
- gst_audiofilter_template_init,
- sizeof (GstAudiofilterTemplate),
- 0,
- NULL,
- };
-
- audiofilter_template_type = g_type_register_static (GST_TYPE_AUDIOFILTER,
- "GstAudiofilterTemplate", &audiofilter_template_info, 0);
- }
- return audiofilter_template_type;
-}
-
-static void
-gst_audiofilter_template_base_init (gpointer g_class)
-{
- static GstElementDetails audiofilter_template_details = {
- "Audio filter template",
- "Filter/Effect/Audio",
- "Filters audio",
- "David Schleef <ds@schleef.org>"
- };
- GstAudiofilterTemplateClass *klass = (GstAudiofilterTemplateClass *) g_class;
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_set_details (element_class, &audiofilter_template_details);
-
- gst_audiofilter_class_add_pad_templates (GST_AUDIOFILTER_CLASS (g_class),
- gst_caps_from_string (GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS));
-}
-
-static void
-gst_audiofilter_template_class_init (gpointer g_class, gpointer class_data)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
- GstAudiofilterTemplateClass *klass;
- GstAudiofilterClass *audiofilter_class;
-
- klass = (GstAudiofilterTemplateClass *) g_class;
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
- audiofilter_class = (GstAudiofilterClass *) g_class;
-
-#if 0
- g_object_class_install_property (gobject_class, ARG_METHOD,
- g_param_spec_enum ("method", "method", "method",
- GST_TYPE_AUDIOTEMPLATE_METHOD, GST_AUDIOTEMPLATE_METHOD_1,
- G_PARAM_READWRITE));
-#endif
-
- gobject_class->set_property = gst_audiofilter_template_set_property;
- gobject_class->get_property = gst_audiofilter_template_get_property;
-
- audiofilter_class->setup = gst_audiofilter_template_setup;
- audiofilter_class->filter = gst_audiofilter_template_filter;
- audiofilter_class->filter_inplace = gst_audiofilter_template_filter_inplace;
- audiofilter_class->filter = NULL;
-}
-
-static void
-gst_audiofilter_template_init (GTypeInstance * instance, gpointer g_class)
-{
- //GstAudiofilterTemplate *audiofilter_template = GST_AUDIOFILTER_TEMPLATE (instance);
- //GstAudiofilter *audiofilter = GST_AUDIOFILTER (instance);
-
- GST_DEBUG ("gst_audiofilter_template_init");
-
- /* do stuff */
-
-}
-
-static void
-gst_audiofilter_template_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstAudiofilterTemplate *src;
-
- /* it's not null if we got it, but it might not be ours */
- g_return_if_fail (GST_IS_AUDIOFILTER_TEMPLATE (object));
- src = GST_AUDIOFILTER_TEMPLATE (object);
-
- GST_DEBUG ("gst_audiofilter_template_set_property");
- switch (prop_id) {
- default:
- break;
- }
-}
-
-static void
-gst_audiofilter_template_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstAudiofilterTemplate *src;
-
- /* it's not null if we got it, but it might not be ours */
- g_return_if_fail (GST_IS_AUDIOFILTER_TEMPLATE (object));
- src = GST_AUDIOFILTER_TEMPLATE (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- if (!gst_library_load ("gstaudiofilter"))
- return FALSE;
-
- return gst_element_register (plugin, "audiofiltertemplate", GST_RANK_NONE,
- GST_TYPE_AUDIOFILTER_TEMPLATE);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "gstaudiofilter_template",
- "Audio filter template",
- plugin_init, VERSION, "LGPL", GST_PACKAGE, GST_ORIGIN)
-
- static void gst_audiofilter_template_setup (GstAudiofilter * audiofilter)
-{
- GstAudiofilterTemplate *audiofilter_template;
-
- g_return_if_fail (GST_IS_AUDIOFILTER_TEMPLATE (audiofilter));
- audiofilter_template = GST_AUDIOFILTER_TEMPLATE (audiofilter);
-
- /* if any setup needs to be done, do it here */
-
-}
-
-/* You may choose to implement either a copying filter or an
- * in-place filter (or both). Implementing only one will give
- * full functionality, however, implementing both will cause
- * audiofilter to use the optimal function in every situation,
- * with a minimum of memory copies. */
-
-static void
-gst_audiofilter_template_filter (GstAudiofilter * audiofilter,
- GstBuffer * outbuf, GstBuffer * inbuf)
-{
- GstAudiofilterTemplate *audiofilter_template;
-
- g_return_if_fail (GST_IS_AUDIOFILTER_TEMPLATE (audiofilter));
- audiofilter_template = GST_AUDIOFILTER_TEMPLATE (audiofilter);
-
- /* do something interesting here. This simply copies the source
- * to the destination. */
-
- memcpy (GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf), audiofilter->size);
-}
-
-static void
-gst_audiofilter_template_filter_inplace (GstAudiofilter * audiofilter,
- GstBuffer * buf)
-{
- GstAudiofilterTemplate *audiofilter_template;
-
- g_return_if_fail (GST_IS_AUDIOFILTER_TEMPLATE (audiofilter));
- audiofilter_template = GST_AUDIOFILTER_TEMPLATE (audiofilter);
-
- /* do something interesting here. This simply copies the source
- * to the destination. */
-
-}
+++ /dev/null
-#!/bin/sh
-
-LANG=C
-LC_COLLATE=C
-export LANG
-export LC_COLLATE
-
-Template=$1;
-srcfile=$2;
-
-if test x"$1" = x ; then
- echo "$0 Objectname [srcfile]\n";
- echo " creates gstobjectname.{c,h} implementing GstObjectname,\n";
- echo " subclassing GstAudiofilter.\n";
- exit 1;
-fi
-
-if test x"$2" = x ; then
- srcfile="gstaudiofiltertemplate.c"
-fi
-
-id=`echo '$Id$' | sed \
- -e 's/\$I[d]: \([^$]*\)\$/\1/g'`
-echo $id
-
-TEMPLATE=`echo $Template | tr [:lower:] [:upper:]`
-template=`echo $Template | tr [:upper:] [:lower:]`
-
-echo TEMPLATE $TEMPLATE
-echo template $template
-
-# remember to break up the Id: in the line below
-sed \
- -e 's/gstaudiofiltertemplate\.c/SOURCEFILE/g' \
- -e "s/AudiofilterTemplate/$Template/g" \
- -e "s/audiofiltertemplate/$template/g" \
- -e "s/VIDEOFILTERTEMPLATE/$TEMPLATE/g" \
- -e 's/\$I[d]: \([^$]*\)\$/\1/g' \
- -e 's/SOURCEFILE/gstaudiofiltertemplate\.c/g' \
- -e "s%MAKEFILTERVERSION%$id%g" \
- $srcfile >gst$template.c.tmp && mv gst$template.c.tmp gst$template.c
-
+++ /dev/null
-/* GStreamer Multichannel-Audio helper functions
- * (c) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "multichannel.h"
-
-#define GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME "channel-positions"
-
-/*
- * This function checks if basic assumptions apply:
- * - does each position occur at most once?
- * - do conflicting positions occur?
- * + front_mono vs. front_left/right
- * + front_center vs. front_left/right_of_center
- * + rear_center vs. rear_left/right
- * It also adds some hacks that 0.8.x needs for compatibility:
- * - if channels == 1, are we really mono?
- * - if channels == 2, are we really stereo?
- */
-
-static gboolean
-gst_audio_check_channel_positions (const GstAudioChannelPosition * pos,
- gint channels)
-{
- gint i, n;
- struct
- {
- GstAudioChannelPosition pos1[2];
- GstAudioChannelPosition pos2[1];
- } conf[] = {
- /* front: mono <-> stereo */
- { {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
- GST_AUDIO_CHANNEL_POSITION_FRONT_MONO}},
- /* front center: 2 <-> 1 */
- { {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}},
- /* rear: 2 <-> 1 */
- { {
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, { {
- GST_AUDIO_CHANNEL_POSITION_INVALID}}
- };
-
- /* check for invalid channel positions */
- for (n = 0; n < channels; n++) {
- if (pos[n] == GST_AUDIO_CHANNEL_POSITION_INVALID) {
- g_warning ("Position %d is invalid, not allowed", n);
- return FALSE;
- }
- }
-
- /* check for multiple position occurrences */
- for (i = GST_AUDIO_CHANNEL_POSITION_INVALID + 1;
- i < GST_AUDIO_CHANNEL_POSITION_NUM; i++) {
- gint count = 0;
-
- for (n = 0; n < channels; n++) {
- if (pos[n] == i)
- count++;
- }
-
- if (count > 1) {
- g_warning ("Channel position %d occurred %d times, not allowed",
- i, count);
- return FALSE;
- }
- }
-
- /* check for position conflicts */
- for (i = 0; conf[i].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; i++) {
- gboolean found1 = FALSE, found2 = FALSE;
-
- for (n = 0; n < channels; n++) {
- if (pos[n] == conf[i].pos1[0] || pos[n] == conf[i].pos1[1])
- found1 = TRUE;
- else if (pos[n] == conf[i].pos2[0])
- found2 = TRUE;
- }
-
- if (found1 && found2) {
- g_warning ("Found conflicting channel positions %d/%d and %d",
- conf[i].pos1[0], conf[i].pos1[1], conf[i].pos2[0]);
- return FALSE;
- }
- }
-
- /* 0.8.x evilry */
- if ((channels == 1 && pos[0] != GST_AUDIO_CHANNEL_POSITION_FRONT_MONO) ||
- (channels == 2 && (pos[0] != GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT ||
- pos[1] != GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT))) {
- g_warning ("0.8.x: channels=1 implies mono; channels=2 implies stereo");
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- * gst_audio_get_channel_positions:
- * @str: A #GstStructure to retrieve channel positions from.
- *
- * Retrieves a number of (fixed!) audio channel positions from
- * the provided #GstStructure and returns it as a newly allocated
- * array. The caller should g_free () this array. The caller
- * should also check that the members in this #GstStructure are
- * indeed "fixed" before calling this function.
- *
- * Returns: a newly allocated array containing the channel
- * positions as provided in the given #GstStructure. Returns
- * NULL on error.
- */
-
-GstAudioChannelPosition *
-gst_audio_get_channel_positions (GstStructure * str)
-{
- GstAudioChannelPosition *pos;
- gint channels, n;
- const GValue *pos_val_arr, *pos_val_entry;
- gboolean res;
- GType t;
-
- /* get number of channels, general type checkups */
- g_return_val_if_fail (str != NULL, NULL);
- res = gst_structure_get_int (str, "channels", &channels);
- g_return_val_if_fail (res, NULL);
- g_return_val_if_fail (channels > 0, NULL);
- pos_val_arr = gst_structure_get_value (str,
- GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME);
-
- /* The following checks are here to retain compatibility for plugins not
- * implementing this property. They expect that channels=1 implies mono
- * and channels=2 implies stereo, so we follow that.
- * This might be removed during 0.9.x. */
- if (!pos_val_arr && (channels == 1 || channels == 2)) {
- pos = g_new (GstAudioChannelPosition, channels);
- if (channels == 1) {
- pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
- } else {
- pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- }
- return pos;
- }
- g_return_val_if_fail (pos_val_arr != NULL, NULL);
- g_return_val_if_fail (gst_value_list_get_size (pos_val_arr) == channels,
- NULL);
- for (n = 0; n < channels; n++) {
- t = G_VALUE_TYPE (gst_value_list_get_value (pos_val_arr, n));
- g_return_val_if_fail (t == GST_TYPE_AUDIO_CHANNEL_POSITION, NULL);
- }
-
- /* ... and fill array */
- pos = g_new (GstAudioChannelPosition, channels);
- for (n = 0; n < channels; n++) {
- pos_val_entry = gst_value_list_get_value (pos_val_arr, n);
- pos[n] = g_value_get_enum (pos_val_entry);
- }
-
- if (!gst_audio_check_channel_positions (pos, channels)) {
- g_free (pos);
- return NULL;
- }
-
- return pos;
-}
-
-/**
- * gst_audio_set_channel_positions:
- * @str: A #GstStructure to retrieve channel positions from.
- * @pos: an array of channel positions. The number of members
- * in this array should be equal to the (fixed!) number
- * of the "channels" property in the given #GstStructure.
- *
- * Adds a "channel-positions" property to the given #GstStructure,
- * which will represent the channel positions as given in the
- * provided #GstAudioChannelPosition array.
- */
-
-void
-gst_audio_set_channel_positions (GstStructure * str,
- const GstAudioChannelPosition * pos)
-{
- GValue pos_val_arr = { 0 }, pos_val_entry = {
- 0};
- gint channels, n;
- gboolean res;
-
- /* get number of channels, checkups */
- g_return_if_fail (str != NULL);
- g_return_if_fail (pos != NULL);
- res = gst_structure_get_int (str, "channels", &channels);
- g_return_if_fail (res);
- g_return_if_fail (channels > 0);
- if (!gst_audio_check_channel_positions (pos, channels))
- return;
-
- /* build gvaluearray from positions */
- g_value_init (&pos_val_entry, GST_TYPE_AUDIO_CHANNEL_POSITION);
- g_value_init (&pos_val_arr, GST_TYPE_FIXED_LIST);
- for (n = 0; n < channels; n++) {
- g_value_set_enum (&pos_val_entry, pos[n]);
- gst_value_list_append_value (&pos_val_arr, &pos_val_entry);
- }
- g_value_unset (&pos_val_entry);
-
- /* add to structure */
- gst_structure_set_value (str,
- GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME, &pos_val_arr);
- g_value_unset (&pos_val_arr);
-}
-
-/**
- * gst_audio_set_structure_channel_positions_list:
- * @str: #GstStructure to set the list of channel positions
- * on.
- * @pos: the array containing one or more possible audio
- * channel positions that we should add in each value
- * of the array in the given structure.
- * @num_positions: the number of values in pos.
- *
- * Sets a (possibly non-fixed) list of possible audio channel
- * positions (given in pos) on the given structure. The
- * structure, after this function has been called, will contain
- * a "channel-positions" property with an array of the size of
- * the "channels" property value in the given structure (note
- * that this means that the channels property in the provided
- * structure should be fixed!). Each value in the array will
- * contain each of the values given in the pos array.
- */
-
-void
-gst_audio_set_structure_channel_positions_list (GstStructure * str,
- const GstAudioChannelPosition * pos, gint num_positions)
-{
- gint channels, n, c;
- GValue pos_val_arr = { 0 }, pos_val_list = {
- 0}, pos_val_entry = {
- 0};
- gboolean res;
-
- /* get number of channels, general type checkups */
- g_return_if_fail (str != NULL);
- g_return_if_fail (num_positions > 0);
- g_return_if_fail (pos != NULL);
- res = gst_structure_get_int (str, "channels", &channels);
- g_return_if_fail (res);
- g_return_if_fail (channels > 0);
-
- /* 0.8.x: channels=1 or channels=2 is mono/stereo, no positions needed
- * there (we discard them anyway) */
- if (channels == 1 || channels == 2)
- return;
-
- /* create the array of lists */
- g_value_init (&pos_val_arr, GST_TYPE_FIXED_LIST);
- g_value_init (&pos_val_entry, GST_TYPE_AUDIO_CHANNEL_POSITION);
- for (n = 0; n < channels; n++) {
- g_value_init (&pos_val_list, GST_TYPE_LIST);
- for (c = 0; c < num_positions; c++) {
- g_value_set_enum (&pos_val_entry, pos[c]);
- gst_value_list_append_value (&pos_val_list, &pos_val_entry);
- }
- gst_value_list_append_value (&pos_val_arr, &pos_val_list);
- g_value_unset (&pos_val_list);
- }
- g_value_unset (&pos_val_entry);
- gst_structure_set_value (str, GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME,
- &pos_val_arr);
- g_value_unset (&pos_val_arr);
-}
-
-/*
- * Helper function for below. The structure will be conserved,
- * but might be cut down. Any additional structures that were
- * created will be stored in the returned caps.
- */
-
-static GstCaps *
-add_list_to_struct (GstStructure * str,
- const GstAudioChannelPosition * pos, gint num_positions)
-{
- GstCaps *caps = gst_caps_new_empty ();
- const GValue *chan_val;
-
- chan_val = gst_structure_get_value (str, "channels");
- if (G_VALUE_TYPE (chan_val) == G_TYPE_INT) {
- gst_audio_set_structure_channel_positions_list (str, pos, num_positions);
- } else if (G_VALUE_TYPE (chan_val) == GST_TYPE_LIST) {
- gint size;
- const GValue *sub_val;
-
- size = gst_value_list_get_size (chan_val);
- sub_val = gst_value_list_get_value (chan_val, 0);
- gst_structure_set_value (str, "channels", sub_val);
- gst_caps_append (caps, add_list_to_struct (str, pos, num_positions));
- while (--size > 0) {
- str = gst_structure_copy (str);
- sub_val = gst_value_list_get_value (chan_val, size);
- gst_structure_set_value (str, "channels", sub_val);
- gst_caps_append (caps, add_list_to_struct (str, pos, num_positions));
- gst_caps_append_structure (caps, str);
- }
- } else if (G_VALUE_TYPE (chan_val) == GST_TYPE_INT_RANGE) {
- gint min, max;
-
- min = gst_value_get_int_range_min (chan_val);
- max = gst_value_get_int_range_max (chan_val);
-
- gst_structure_set (str, "channels", G_TYPE_INT, min, NULL);
- gst_audio_set_structure_channel_positions_list (str, pos, num_positions);
- for (++min; min < max; min++) {
- str = gst_structure_copy (str);
- gst_structure_set (str, "channels", G_TYPE_INT, min, NULL);
- gst_audio_set_structure_channel_positions_list (str, pos, num_positions);
- gst_caps_append_structure (caps, str);
- }
- } else {
- g_warning ("Unknown value type for channels property");
- }
-
- return caps;
-}
-
-/**
- * gst_audio_set_caps_channel_positions_list:
- * @caps: #GstCaps to set the list of channel positions on.
- * @pos: the array containing one or more possible audio
- * channel positions that we should add in each value
- * of the array in the given structure.
- * @num_positions: the number of values in pos.
- *
- * Sets a (possibly non-fixed) list of possible audio channel
- * positions (given in pos) on the given caps. Each of the
- * structures of the caps, after this function has been called,
- * will contain a "channel-positions" property with an array.
- * Each value in the array will contain each of the values given
- * in the pos array. Note that the size of the caps might be
- * increased by this, since each structure with a "channel-
- * positions" property needs to have a fixed "channels" property.
- * The input caps is not required to have this.
- */
-
-void
-gst_audio_set_caps_channel_positions_list (GstCaps * caps,
- const GstAudioChannelPosition * pos, gint num_positions)
-{
- gint size, n;
-
- /* get number of channels, general type checkups */
- g_return_if_fail (caps != NULL);
- g_return_if_fail (num_positions > 0);
- g_return_if_fail (pos != NULL);
-
- size = gst_caps_get_size (caps);
- for (n = 0; n < size; n++) {
- gst_caps_append (caps, add_list_to_struct (gst_caps_get_structure (caps,
- n), pos, num_positions));
- }
-}
-
-/**
- * gst_audio_fixate_channel_positions:
- * @str: a #GstStructure containing a (possibly unfixed)
- * "channel-positions" property.
- *
- * Custom fixate function. Elements that implement some sort of
- * channel conversion algorhithm should use this function for
- * fixating on GstAudioChannelPosition properties. It will take
- * care of equal channel positioning (left/right). Caller g_free()s
- * the return value. The input properties may be (and are supposed
- * to be) unfixed.
- * Note that this function is mostly a hack because we currently
- * have no way to add default fixation functions for new GTypes.
- *
- * Returns: fixed values that the caller could use as a fixed
- * set of #GstAudioChannelPosition values.
- */
-
-GstAudioChannelPosition *
-gst_audio_fixate_channel_positions (GstStructure * str)
-{
- GstAudioChannelPosition *pos;
- gint channels, n, num_unfixed = 0, i, c;
- const GValue *pos_val_arr, *pos_val_entry, *pos_val;
- gboolean res, is_stereo = TRUE;
- GType t;
-
- /*
- * We're going to do this cluelessly. We'll make an array of values that
- * conflict with each other and, for each iteration in this array, pick
- * either one until all unknown values are filled. This might not work in
- * corner cases but should work OK for the general case.
- */
- struct
- {
- GstAudioChannelPosition pos1[2];
- GstAudioChannelPosition pos2[1];
- } conf[] = {
- /* front: mono <-> stereo */
- { {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
- GST_AUDIO_CHANNEL_POSITION_FRONT_MONO}},
- /* front center: 2 <-> 1 */
- { {
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}},
- /* rear: 2 <-> 1 */
- { {
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, { {
- GST_AUDIO_CHANNEL_POSITION_INVALID, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
- GST_AUDIO_CHANNEL_POSITION_LFE}}, { {
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
- GST_AUDIO_CHANNEL_POSITION_INVALID}}, { {
- GST_AUDIO_CHANNEL_POSITION_INVALID, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
- GST_AUDIO_CHANNEL_POSITION_INVALID}}
- };
- struct
- {
- gint num_opt[3];
- guint num_opts[3];
- gboolean is_fixed[3];
- gint choice; /* -1 is none, 0 is the two, 1 is the one */
- } opt;
-
- /* get number of channels, general type checkups */
- g_return_val_if_fail (str != NULL, NULL);
- res = gst_structure_get_int (str, "channels", &channels);
- g_return_val_if_fail (res, NULL);
- g_return_val_if_fail (channels > 0, NULL);
-
- /* 0.8.x mono/stereo checks */
- pos_val_arr = gst_structure_get_value (str,
- GST_AUDIO_CHANNEL_POSITIONS_PROPERTY_NAME);
- if (!pos_val_arr && (channels == 1 || channels == 2)) {
- pos = g_new (GstAudioChannelPosition, channels);
- if (channels == 1) {
- pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
- } else {
- pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
- pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
- }
- return pos;
- }
- g_return_val_if_fail (pos_val_arr != NULL, NULL);
- g_return_val_if_fail (gst_value_list_get_size (pos_val_arr) == channels,
- NULL);
- for (n = 0; n < channels; n++) {
- t = G_VALUE_TYPE (gst_value_list_get_value (pos_val_arr, n));
- g_return_val_if_fail (t == GST_TYPE_LIST ||
- t == GST_TYPE_AUDIO_CHANNEL_POSITION, NULL);
- }
-
- /* all unknown, to start with */
- pos = g_new (GstAudioChannelPosition, channels);
- for (n = 0; n < channels; n++)
- pos[n] = GST_AUDIO_CHANNEL_POSITION_INVALID;
- num_unfixed = channels;
-
- /* Iterate the array of conflicting values */
- for (i = 0; conf[i].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID ||
- conf[i].pos2[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; i++) {
- /* front/center only important if not mono (obviously) */
- if (conf[i].pos1[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER &&
- !is_stereo)
- continue;
-
- /* init values */
- for (n = 0; n < 3; n++) {
- opt.num_opt[n] = -1;
- opt.num_opts[n] = -1;
- opt.is_fixed[n] = FALSE;
- }
-
- /* Now, we'll see for each channel if it allows for any of the values in
- * the set of conflicting audio channel positions and keep scores. */
- for (n = 0; n < channels; n++) {
- /* if the channel is already taken, don't bother */
- if (pos[n] != GST_AUDIO_CHANNEL_POSITION_INVALID)
- continue;
-
- pos_val_entry = gst_value_list_get_value (pos_val_arr, n);
- t = G_VALUE_TYPE (pos_val_entry);
- if (t == GST_TYPE_LIST) {
- /* This algorhythm is suboptimal. */
- for (c = 0; c < gst_value_list_get_size (pos_val_entry); c++) {
- pos_val = gst_value_list_get_value (pos_val_entry, c);
- if (g_value_get_enum (pos_val) == conf[i].pos1[0] &&
- opt.num_opts[0] > gst_value_list_get_size (pos_val_entry) &&
- !opt.is_fixed[0]) {
- /* Now test if the old position of num_opt[0] also allows for
- * the other channel (which was skipped previously). If so,
- * keep score. */
- if (opt.num_opt[0] != -1) {
- gint c1;
-
- pos_val_entry = gst_value_list_get_value (pos_val_arr,
- opt.num_opt[0]);
- if (G_VALUE_TYPE (pos_val_entry) == GST_TYPE_LIST) {
- for (c1 = 0; c1 < gst_value_list_get_size (pos_val_entry); c1++) {
- pos_val = gst_value_list_get_value (pos_val_entry, c1);
- if (g_value_get_enum (pos_val) == conf[i].pos1[1] &&
- opt.num_opts[1] > opt.num_opts[0] && !opt.is_fixed[1]) {
- opt.num_opts[1] = opt.num_opts[0];
- opt.num_opt[1] = opt.num_opt[0];
- }
- }
- pos_val = gst_value_list_get_value (pos_val_entry, c);
- }
- pos_val_entry = gst_value_list_get_value (pos_val_arr, n);
- }
-
- /* and save values */
- opt.num_opts[0] = gst_value_list_get_size (pos_val_entry);
- opt.num_opt[0] = n;
- } else if (g_value_get_enum (pos_val) == conf[i].pos1[1] &&
- opt.num_opts[1] > gst_value_list_get_size (pos_val_entry) &&
- !opt.is_fixed[1] && n != opt.num_opt[0]) {
- opt.num_opts[1] = gst_value_list_get_size (pos_val_entry);
- opt.num_opt[1] = n;
- }
-
- /* 2 goes separately, because 0/1 vs. 2 are separate */
- if (g_value_get_enum (pos_val) == conf[i].pos2[0] &&
- opt.num_opts[2] > gst_value_list_get_size (pos_val_entry) &&
- !opt.is_fixed[2]) {
- opt.num_opts[2] = gst_value_list_get_size (pos_val_entry);
- opt.num_opt[2] = n;
- }
- }
- } else {
- if (g_value_get_enum (pos_val_entry) == conf[i].pos1[0]) {
- opt.num_opt[0] = n;
- opt.is_fixed[0] = TRUE;
- } else if (g_value_get_enum (pos_val_entry) == conf[i].pos1[1]) {
- opt.num_opt[1] = n;
- opt.is_fixed[1] = TRUE;
- } else if (g_value_get_enum (pos_val_entry) == conf[i].pos2[0]) {
- opt.num_opt[2] = n;
- opt.is_fixed[2] = TRUE;
- }
- }
- }
-
- /* check our results and choose either one */
- if ((opt.is_fixed[0] || opt.is_fixed[1]) && opt.is_fixed[2]) {
- g_warning ("Pre-fixated on both %d/%d and %d - conflict!",
- conf[i].pos1[0], conf[i].pos1[1], conf[i].pos2[0]);
- g_free (pos);
- return NULL;
- } else if ((opt.is_fixed[0] && opt.num_opt[1] == -1) ||
- (opt.is_fixed[1] && opt.num_opt[0] == -1)) {
- g_warning ("Pre-fixated one side, but other side n/a of %d/%d",
- conf[i].pos1[0], conf[i].pos1[1]);
- g_free (pos);
- return NULL;
- } else if (opt.is_fixed[0] || opt.is_fixed[1]) {
- opt.choice = 0;
- } else if (opt.is_fixed[2]) {
- opt.choice = 1;
- } else if (opt.num_opt[0] != -1 && opt.num_opt[1] != -1) {
- opt.choice = 0;
- } else if (opt.num_opt[2] != -1) {
- opt.choice = 1;
- } else {
- opt.choice = -1;
- }
-
- /* stereo? Note that we keep is_stereo to TRUE if we didn't decide on
- * any arrangement. The mono/stereo channels might be handled elsewhere
- * which is clearly outside the scope of this element, so we cannot
- * know and expect the application to handle that then. */
- if (conf[i].pos2[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_MONO &&
- opt.choice == 1) {
- is_stereo = FALSE;
- }
-
- /* now actually decide what we'll do and fixate on that */
- if (opt.choice == 0) {
- g_assert (conf[i].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID &&
- conf[i].pos1[1] != GST_AUDIO_CHANNEL_POSITION_INVALID);
- pos[opt.num_opt[0]] = conf[i].pos1[0];
- pos[opt.num_opt[1]] = conf[i].pos1[1];
- num_unfixed -= 2;
- } else if (opt.choice == 1) {
- g_assert (conf[i].pos2[0] != GST_AUDIO_CHANNEL_POSITION_INVALID);
- pos[opt.num_opt[2]] = conf[i].pos2[0];
- num_unfixed--;
- }
- }
-
- /* safety check */
- if (num_unfixed > 0) {
- g_warning ("%d unfixed channel positions left after fixation!",
- num_unfixed);
- g_free (pos);
- return NULL;
- }
-
- if (!gst_audio_check_channel_positions (pos, channels)) {
- g_free (pos);
- return NULL;
- }
-
- return pos;
-}
+++ /dev/null
-/* GStreamer Multichannel-Audio helper functions
- * (c) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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_AUDIO_MULTICHANNEL_H__
-#define __GST_AUDIO_MULTICHANNEL_H__
-
-#include <gst/audio/audio.h>
-#include <gst/audio/multichannel-enumtypes.h>
-
-G_BEGIN_DECLS
-
-typedef enum {
- GST_AUDIO_CHANNEL_POSITION_INVALID = -1,
-
- /* Main front speakers. Mono and left/right are mututally exclusive! */
- GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-
- /* rear. Left/right and center are mututally exclusive! */
- GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
- GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
- GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-
- /* subwoofer/low-frequency */
- GST_AUDIO_CHANNEL_POSITION_LFE,
-
- /* Center front speakers. Center and left/right_of_center cannot be
- * used together! */
- GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
-
- /* sides */
- GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
- GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-
- /* don't use - counter */
- GST_AUDIO_CHANNEL_POSITION_NUM
-} GstAudioChannelPosition;
-
-/* Retrieves or sets the positions from/to a GstStructure. Only
- * works with fixed caps, caller should check for that! Caller
- * g_free()s result of the getter. */
-GstAudioChannelPosition *
- gst_audio_get_channel_positions (GstStructure *str);
-void gst_audio_set_channel_positions (GstStructure *str,
- const GstAudioChannelPosition *pos);
-
-/* Sets a (non-fixed) list of possible audio channel positions
- * on a structure (this requires the "channels" property to
- * be fixed!) or on a caps (here, the "channels" property may be
- * unfixed and the caps may even contain multiple structures). */
-void gst_audio_set_structure_channel_positions_list
- (GstStructure *str,
- const GstAudioChannelPosition *pos,
- gint num_positions);
-void gst_audio_set_caps_channel_positions_list
- (GstCaps *caps,
- const GstAudioChannelPosition *pos,
- gint num_positions);
-
-/* Custom fixate function. Elements that implement some sort of
- * channel conversion algorhithm should use this function for
- * fixating on GstAudioChannelPosition properties. It will take
- * care of equal channel positioning (left/right). Caller g_free()s
- * the return value. The input properties may be (and are supposed
- * to be) unfixed. */
-GstAudioChannelPosition *
- gst_audio_fixate_channel_positions (GstStructure *str);
-
-G_END_DECLS
-
-#endif /* __GST_AUDIO_MULTICHANNEL_H__ */
+++ /dev/null
-/* GStreamer Multichannel Test
- * (c) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gst/gst.h>
-
-#include <multichannel.c>
-#include <multichannel-enumtypes.c>
-
-gint
-main (gint argc, gchar * argv[])
-{
- gchar *str;
- GstCaps *caps;
- GstAudioChannelPosition pos[2] = { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
- GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
- };
-
- /* register multichannel type */
- gst_init (&argc, &argv);
- gst_audio_channel_position_get_type ();
-
- /* test some caps-string conversions */
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "channels", G_TYPE_INT, 2, NULL);
- str = gst_caps_to_string (caps);
- g_print ("Test caps #1: %s\n", str);
- g_free (str);
- gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
- str = gst_caps_to_string (caps);
- g_print ("Test caps #2: %s\n", str);
- g_free (str);
- gst_caps_free (caps);
-
- return 0;
-}
+++ /dev/null
-# variables used for enum/marshal generation
-glib_enum_headers=$(colorbalance_headers)
-glib_enum_define=GST_COLOR_BALANCE
-glib_enum_prefix=gst_color_balance
-
-libgstcolorbalanceincludedir = \
- $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/colorbalance
-
-colorbalance_headers = \
- colorbalance.h \
- colorbalancechannel.h
-
-built_sources = \
- colorbalance-marshal.c \
- colorbalance-enumtypes.c
-
-built_headers = \
- colorbalance-marshal.h \
- colorbalance-enumtypes.h
-
-libgstcolorbalanceinclude_HEADERS = \
- $(colorbalance_headers)
-
-nodist_libgstcolorbalanceinclude_HEADERS = \
- colorbalance-enumtypes.h
-
-noinst_LTLIBRARIES = libgstcolorbalance.la
-
-libgstcolorbalance_la_SOURCES = \
- colorbalance.c \
- colorbalancechannel.c
-
-nodist_libgstcolorbalance_la_SOURCES = \
- $(built_sources) \
- colorbalance-marshal.h
-
-libgstcolorbalance_la_CFLAGS = $(GST_CFLAGS)
-
-BUILT_SOURCES = \
- $(built_sources) \
- $(built_headers)
-
-EXTRA_DIST = colorbalance-marshal.list
-
-CLEANFILES = $(BUILT_SOURCES)
-
-include $(top_srcdir)/common/glib-gen.mak
+++ /dev/null
-VOID:OBJECT,INT
+++ /dev/null
-/* GStreamer Color Balance
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * colorbalance.c: image color balance interface design
- * virtual class function wrappers
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "colorbalance.h"
-#include "colorbalance-marshal.h"
-
-enum
-{
- VALUE_CHANGED,
- LAST_SIGNAL
-};
-
-static void gst_color_balance_class_init (GstColorBalanceClass * klass);
-
-static guint gst_color_balance_signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_color_balance_get_type (void)
-{
- static GType gst_color_balance_type = 0;
-
- if (!gst_color_balance_type) {
- static const GTypeInfo gst_color_balance_info = {
- sizeof (GstColorBalanceClass),
- (GBaseInitFunc) gst_color_balance_class_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- gst_color_balance_type = g_type_register_static (G_TYPE_INTERFACE,
- "GstColorBalance", &gst_color_balance_info, 0);
- g_type_interface_add_prerequisite (gst_color_balance_type,
- GST_TYPE_IMPLEMENTS_INTERFACE);
- }
-
- return gst_color_balance_type;
-}
-
-static void
-gst_color_balance_class_init (GstColorBalanceClass * klass)
-{
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- gst_color_balance_signals[VALUE_CHANGED] =
- g_signal_new ("value-changed",
- GST_TYPE_COLOR_BALANCE, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstColorBalanceClass, value_changed),
- NULL, NULL,
- gst_color_balance_marshal_VOID__OBJECT_INT,
- G_TYPE_NONE, 2, GST_TYPE_COLOR_BALANCE_CHANNEL, G_TYPE_INT);
-
- initialized = TRUE;
- }
-
- klass->balance_type = GST_COLOR_BALANCE_SOFTWARE;
-
- /* default virtual functions */
- klass->list_channels = NULL;
- klass->set_value = NULL;
- klass->get_value = NULL;
-}
-
-const GList *
-gst_color_balance_list_channels (GstColorBalance * balance)
-{
- GstColorBalanceClass *klass = GST_COLOR_BALANCE_GET_CLASS (balance);
-
- if (klass->list_channels) {
- return klass->list_channels (balance);
- }
-
- return NULL;
-}
-
-void
-gst_color_balance_set_value (GstColorBalance * balance,
- GstColorBalanceChannel * channel, gint value)
-{
- GstColorBalanceClass *klass = GST_COLOR_BALANCE_GET_CLASS (balance);
-
- if (klass->set_value) {
- klass->set_value (balance, channel, value);
- }
-}
-
-gint
-gst_color_balance_get_value (GstColorBalance * balance,
- GstColorBalanceChannel * channel)
-{
- GstColorBalanceClass *klass = GST_COLOR_BALANCE_GET_CLASS (balance);
-
- if (klass->get_value) {
- return klass->get_value (balance, channel);
- }
-
- return channel->min_value;
-}
-
-void
-gst_color_balance_value_changed (GstColorBalance * balance,
- GstColorBalanceChannel * channel, gint value)
-{
- g_signal_emit (G_OBJECT (balance),
- gst_color_balance_signals[VALUE_CHANGED], 0, channel, value);
-
- g_signal_emit_by_name (G_OBJECT (channel), "value_changed", value);
-}
+++ /dev/null
-/* GStreamer Color Balance
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * color-balance.h: image color balance interface design
- *
- * 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_COLOR_BALANCE_H__
-#define __GST_COLOR_BALANCE_H__
-
-#include <gst/gst.h>
-#include <gst/colorbalance/colorbalancechannel.h>
-#include <gst/colorbalance/colorbalance-enumtypes.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_COLOR_BALANCE \
- (gst_color_balance_get_type ())
-#define GST_COLOR_BALANCE(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE, \
- GstColorBalance))
-#define GST_COLOR_BALANCE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE, \
- GstColorBalanceClass))
-#define GST_IS_COLOR_BALANCE(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE))
-#define GST_IS_COLOR_BALANCE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE))
-#define GST_COLOR_BALANCE_GET_CLASS(inst) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_COLOR_BALANCE, GstColorBalanceClass))
-
-#define GST_COLOR_BALANCE_TYPE(klass) (klass->balance_type)
-
-typedef struct _GstColorBalance GstColorBalance;
-
-typedef enum
-{
- GST_COLOR_BALANCE_HARDWARE,
- GST_COLOR_BALANCE_SOFTWARE
-} GstColorBalanceType;
-
-typedef struct _GstColorBalanceClass {
- GTypeInterface klass;
-
- GstColorBalanceType balance_type;
-
- /* virtual functions */
- const GList * (* list_channels) (GstColorBalance *balance);
-
- void (* set_value) (GstColorBalance *balance,
- GstColorBalanceChannel *channel,
- gint value);
- gint (* get_value) (GstColorBalance *balance,
- GstColorBalanceChannel *channel);
-
- /* signals */
- void (* value_changed) (GstColorBalance *balance,
- GstColorBalanceChannel *channel,
- gint value);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstColorBalanceClass;
-
-GType gst_color_balance_get_type (void);
-
-/* virtual class function wrappers */
-const GList *
- gst_color_balance_list_channels (GstColorBalance *balance);
-void gst_color_balance_set_value (GstColorBalance *balance,
- GstColorBalanceChannel *channel,
- gint value);
-gint gst_color_balance_get_value (GstColorBalance *balance,
- GstColorBalanceChannel *channel);
-
-/* trigger signal */
-void gst_color_balance_value_changed (GstColorBalance *balance,
- GstColorBalanceChannel *channel,
- gint value);
-
-G_END_DECLS
-
-#endif /* __GST_COLOR_BALANCE_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="colorbalance"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67894}"
- RootNamespace="colorbalance"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstcolorbalance.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="colorbalance.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/colorbalance.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstcolorbalance.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstcolorbalance.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="colorbalance.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstcolorbalance.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\colorbalance.c">
- </File>
- <File
- RelativePath=".\colorbalancechannel.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\colorbalance.h">
- </File>
- <File
- RelativePath=".\colorbalancechannel.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/* GStreamer Color Balance
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * colorbalancechannel.c: colorbalance channel object design
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "colorbalancechannel.h"
-
-enum
-{
- /* FILL ME */
- SIGNAL_VALUE_CHANGED,
- LAST_SIGNAL
-};
-
-static void gst_color_balance_channel_class_init (GstColorBalanceChannelClass *
- klass);
-static void gst_color_balance_channel_init (GstColorBalanceChannel * balance);
-static void gst_color_balance_channel_dispose (GObject * object);
-
-static GObjectClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_color_balance_channel_get_type (void)
-{
- static GType gst_color_balance_channel_type = 0;
-
- if (!gst_color_balance_channel_type) {
- static const GTypeInfo color_balance_channel_info = {
- sizeof (GstColorBalanceChannelClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_color_balance_channel_class_init,
- NULL,
- NULL,
- sizeof (GstColorBalanceChannel),
- 0,
- (GInstanceInitFunc) gst_color_balance_channel_init,
- NULL
- };
-
- gst_color_balance_channel_type =
- g_type_register_static (G_TYPE_OBJECT,
- "GstColorBalanceChannel", &color_balance_channel_info, 0);
- }
-
- return gst_color_balance_channel_type;
-}
-
-static void
-gst_color_balance_channel_class_init (GstColorBalanceChannelClass * klass)
-{
- GObjectClass *object_klass = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
-
- signals[SIGNAL_VALUE_CHANGED] =
- g_signal_new ("value-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstColorBalanceChannelClass,
- value_changed),
- NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
- object_klass->dispose = gst_color_balance_channel_dispose;
-}
-
-static void
-gst_color_balance_channel_init (GstColorBalanceChannel * channel)
-{
- channel->label = NULL;
- channel->min_value = channel->max_value = 0;
-}
-
-static void
-gst_color_balance_channel_dispose (GObject * object)
-{
- GstColorBalanceChannel *channel = GST_COLOR_BALANCE_CHANNEL (object);
-
- if (channel->label)
- g_free (channel->label);
-
- channel->label = NULL;
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
+++ /dev/null
-/* GStreamer Color Balance
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * colorbalancechannel.h: individual channel object
- *
- * 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_COLOR_BALANCE_CHANNEL_H__
-#define __GST_COLOR_BALANCE_CHANNEL_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_COLOR_BALANCE_CHANNEL \
- (gst_color_balance_channel_get_type ())
-#define GST_COLOR_BALANCE_CHANNEL(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL, \
- GstColorBalanceChannel))
-#define GST_COLOR_BALANCE_CHANNEL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL, \
- GstColorBalanceChannelClass))
-#define GST_IS_COLOR_BALANCE_CHANNEL(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL))
-#define GST_IS_COLOR_BALANCE_CHANNEL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL))
-
-typedef struct _GstColorBalanceChannel {
- GObject parent;
-
- gchar *label;
- gint min_value,
- max_value;
-} GstColorBalanceChannel;
-
-typedef struct _GstColorBalanceChannelClass {
- GObjectClass parent;
-
- /* signals */
- void (* value_changed) (GstColorBalanceChannel *channel,
- gint value);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstColorBalanceChannelClass;
-
-GType gst_color_balance_channel_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_COLOR_BALANCE_CHANNEL_H__ */
+++ /dev/null
-floatcastincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/floatcast
-floatcastinclude_HEADERS = floatcast.h
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Library <2002> Steve Baker <stevebaker_org@yahoo.co.uk>
- *
- * 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 __FLOATCAST_H__
-#define __FLOATCAST_H__
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-#include <glib/gtypes.h>
-
-G_BEGIN_DECLS
-
-#if (HAVE_LRINT && HAVE_LRINTF)
-
- /* These defines enable functionality introduced with the 1999 ISO C
- ** standard. They must be defined before the inclusion of math.h to
- ** engage them. If optimisation is enabled, these functions will be
- ** inlined. With optimisation switched off, you have to link in the
- ** maths library using -lm.
- */
-
- #define _ISOC9X_SOURCE 1
- #define _ISOC99_SOURCE 1
-
- #define __USE_ISOC9X 1
- #define __USE_ISOC99 1
-
- #include <math.h>
-
- #define gst_cast_float(x) ((gint)lrintf(x))
- #define gst_cast_double(x) ((gint)lrint(x))
-
-#else
- /* use a standard c cast, but do rounding correctly */
- #define gst_cast_float(x) ((gint)floor((x)+0.5))
- #define gst_cast_double(x) ((gint)floor((x)+0.5))
-
-#endif
-
-inline static gfloat
-GFLOAT_SWAP_LE_BE(gfloat in)
-{
- gint32 swap;
- gfloat out;
- memcpy(&swap, &in, 4);
- swap = GUINT32_SWAP_LE_BE_CONSTANT (swap);
- memcpy(&out, &swap, 4);
- return out;
-}
-
-inline static gdouble
-GDOUBLE_SWAP_LE_BE(gdouble in)
-{
- gint64 swap;
- gdouble out;
- memcpy(&swap, &in, 8);
- swap = GUINT64_SWAP_LE_BE_CONSTANT (swap);
- memcpy(&out, &swap, 8);
- return out;
-}
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define GFLOAT_TO_LE(val) ((gfloat) (val))
-#define GFLOAT_TO_BE(val) (GFLOAT_SWAP_LE_BE (val))
-#define GDOUBLE_TO_LE(val) ((gdouble) (val))
-#define GDOUBLE_TO_BE(val) (GDOUBLE_SWAP_LE_BE (val))
-
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
-#define GFLOAT_TO_LE(val) (GFLOAT_SWAP_LE_BE (val))
-#define GFLOAT_TO_BE(val) ((gfloat) (val))
-#define GDOUBLE_TO_LE(val) (GDOUBLE_SWAP_LE_BE (val))
-#define GDOUBLE_TO_BE(val) ((gdouble) (val))
-
-#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
-#error unknown ENDIAN type
-#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
-
-#define GFLOAT_FROM_LE(val) (GFLOAT_TO_LE (val))
-#define GFLOAT_FROM_BE(val) (GDOUBLE_TO_BE (val))
-#define GDOUBLE_FROM_LE(val) (GFLOAT_TO_LE (val))
-#define GDOUBLE_FROM_BE(val) (GDOUBLE_TO_BE (val))
-
-G_END_DECLS
-
-#endif /* __FLOATCAST_H__ */
-
+++ /dev/null
-librarydir = $(libdir)
-
-library_LTLIBRARIES = libgstgconf-@GST_MAJORMINOR@.la
-
-libgstgconf_@GST_MAJORMINOR@_la_SOURCES = gconf.c
-
-libgstgconf_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/gconf
-libgstgconf_@GST_MAJORMINOR@include_HEADERS = gconf.h
-
-noinst_PROGRAMS = test-gconf
-
-# add define for GST_GCONF_DIR
-DIR_CFLAGS=-DGST_GCONF_DIR=\"/system/gstreamer/@GST_MAJORMINOR@\"
-
-test_gconf_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) $(DIR_CFLAGS)
-test_gconf_LDADD = $(GST_LIBS) $(GCONF_LIBS) libgstgconf-@GST_MAJORMINOR@.la
-
-libgstgconf_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(GCONF_LIBS)
-libgstgconf_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS) $(GCONF_CFLAGS) $(DIR_CFLAGS)
-libgstgconf_@GST_MAJORMINOR@_la_LDFLAGS = @GST_PLUGINS_LT_LDFLAGS@ -version-info @GST_PLUGINS_LIBVERSION@
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2002> Thomas Vander Stichele <thomas@apestaart.org>
- *
- * 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.
- */
-
-/*
- * this library handles interaction with GConf
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gconf.h"
-
-#ifndef GST_GCONF_DIR
-#error "GST_GCONF_DIR is not defined !"
-#endif
-
-static GConfClient *_gst_gconf_client = NULL; /* GConf connection */
-
-
-/* internal functions */
-
-static GConfClient *
-gst_gconf_get_client (void)
-{
- if (!_gst_gconf_client)
- _gst_gconf_client = gconf_client_get_default ();
-
- return _gst_gconf_client;
-}
-
-/* go through a bin, finding the one pad that is unconnected in the given
- * * direction, and return that pad */
-static GstPad *
-gst_bin_find_unconnected_pad (GstBin * bin, GstPadDirection direction)
-{
- GstPad *pad = NULL;
- GList *elements = NULL;
- const GList *pads = NULL;
- GstElement *element = NULL;
-
- elements = (GList *) gst_bin_get_list (bin);
- /* traverse all elements looking for unconnected pads */
- while (elements && pad == NULL) {
- element = GST_ELEMENT (elements->data);
- pads = gst_element_get_pad_list (element);
- while (pads) {
- /* check if the direction matches */
- if (GST_PAD_DIRECTION (GST_PAD (pads->data)) == direction) {
- if (GST_PAD_PEER (GST_PAD (pads->data)) == NULL) {
- /* found it ! */
- pad = GST_PAD (pads->data);
- }
- }
- if (pad)
- break; /* found one already */
- pads = g_list_next (pads);
- }
- elements = g_list_next (elements);
- }
- return pad;
-}
-
-/* external functions */
-
-/**
- * gst_gconf_get_string:
- * @key: a #gchar corresponding to the key you want to get.
- *
- * Get GConf key @key's string value.
- *
- * Returns: a newly allocated #gchar string containing @key's value,
- * or NULL in the case of an error..
- */
-gchar *
-gst_gconf_get_string (const gchar * key)
-{
- GError *error = NULL;
- gchar *value = NULL;
- gchar *full_key = g_strdup_printf ("%s/%s", GST_GCONF_DIR, key);
-
-
- value = gconf_client_get_string (gst_gconf_get_client (), full_key, &error);
- g_free (full_key);
-
- if (error) {
- g_warning ("gst_gconf_get_string: error: %s\n", error->message);
- g_error_free (error);
- return NULL;
- }
-
- return value;
-}
-
-/**
- * gst_gconf_set_string:
- * @key: a #gchar corresponding to the key you want to set.
- * @value: a #gchar containing key value.
- *
- * Set GConf key @key to string value @value.
- */
-void
-gst_gconf_set_string (const gchar * key, const gchar * value)
-{
- GError *error = NULL;
- gchar *full_key = g_strdup_printf ("%s/%s", GST_GCONF_DIR, key);
-
- gconf_client_set_string (gst_gconf_get_client (), full_key, value, &error);
- if (error) {
- GST_ERROR ("gst_gconf_set_string: error: %s\n", error->message);
- g_error_free (error);
- }
- g_free (full_key);
-}
-
-/**
- * gst_gconf_render_bin_from_description:
- * @description: a #gchar string describing the bin.
- *
- * Render bin from description @description.
- *
- * Returns: a #GstElement containing the rendered bin.
- */
-GstElement *
-gst_gconf_render_bin_from_description (const gchar * description)
-{
- GstElement *bin = NULL;
- GstPad *pad = NULL;
- GError *error = NULL;
- gchar *desc = NULL;
-
- /* parse the pipeline to a bin */
- desc = g_strdup_printf ("bin.( %s )", description);
- bin = GST_ELEMENT (gst_parse_launch (desc, &error));
- g_free (desc);
- if (error) {
- GST_ERROR ("gstgconf: error parsing pipeline %s\n%s\n",
- description, error->message);
- g_error_free (error);
- return NULL;
- }
-
- /* find pads and ghost them if necessary */
- if ((pad = gst_bin_find_unconnected_pad (GST_BIN (bin), GST_PAD_SRC))) {
- gst_element_add_ghost_pad (bin, pad, "src");
- }
- if ((pad = gst_bin_find_unconnected_pad (GST_BIN (bin), GST_PAD_SINK))) {
- gst_element_add_ghost_pad (bin, pad, "sink");
- }
- return bin;
-}
-
-/**
- * gst_gconf_render_bin_from_key:
- * @key: a #gchar string corresponding to a GConf key.
- *
- * Render bin from GConf key @key.
- *
- * Returns: a #GstElement containing the rendered bin.
- */
-GstElement *
-gst_gconf_render_bin_from_key (const gchar * key)
-{
- GstElement *bin = NULL;
- gchar *value;
-
- value = gst_gconf_get_string (key);
- if (value)
- bin = gst_gconf_render_bin_from_description (value);
- g_free (value);
- return bin;
-}
-
-/**
- * gst_gconf_get_default_audio_sink:
- *
- * Render audio output bin from GStreamer GConf key : "default/audiosink".
- * If key is invalid, the default audio sink for the platform is used
- * (typically osssink or sunaudiosink).
- *
- * Returns: a #GstElement containing the audio output bin, or NULL if
- * everything failed.
- */
-GstElement *
-gst_gconf_get_default_audio_sink (void)
-{
- GstElement *ret = gst_gconf_render_bin_from_key ("default/audiosink");
-
- if (!ret) {
- ret = gst_element_factory_make (DEFAULT_AUDIOSINK, NULL);
-
- if (!ret)
- g_warning ("No GConf default audio sink key and %s doesn't work",
- DEFAULT_AUDIOSINK);
- }
-
- return ret;
-}
-
-/**
- * gst_gconf_get_default_video_sink:
- *
- * Render video output bin from GStreamer GConf key : "default/videosink".
- * If key is invalid, the default video sink for the platform is used
- * (typically xvimagesink or ximagesink).
- *
- * Returns: a #GstElement containing the video output bin, or NULL if
- * everything failed.
- */
-GstElement *
-gst_gconf_get_default_video_sink (void)
-{
- GstElement *ret = gst_gconf_render_bin_from_key ("default/videosink");
-
- if (!ret) {
- ret = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL);
-
- if (!ret)
- g_warning ("No GConf default video sink key and %s doesn't work",
- DEFAULT_VIDEOSINK);
- }
-
- return ret;
-}
-
-/**
- * gst_gconf_get_default_audio_src:
- *
- * Render audio acquisition bin from GStreamer GConf key : "default/audiosrc".
- * If key is invalid, the default audio source for the plaform is used.
- * (typically osssrc or sunaudiosrc).
- *
- * Returns: a #GstElement containing the audio source bin, or NULL if
- * everything failed.
- */
-GstElement *
-gst_gconf_get_default_audio_src (void)
-{
- GstElement *ret = gst_gconf_render_bin_from_key ("default/audiosrc");
-
- if (!ret) {
- ret = gst_element_factory_make (DEFAULT_AUDIOSRC, NULL);
-
- if (!ret)
- g_warning ("No GConf default audio src key and %s doesn't work",
- DEFAULT_AUDIOSRC);
- }
-
- return ret;
-}
-
-/**
- * gst_gconf_get_default_video_src:
- *
- * Render video acquisition bin from GStreamer GConf key :
- * "default/videosrc". If key is invalid, the default video source
- * for the platform is used (typically videotestsrc).
- *
- * Returns: a #GstElement containing the video source bin, or NULL if
- * everything failed.
- */
-GstElement *
-gst_gconf_get_default_video_src (void)
-{
- GstElement *ret = gst_gconf_render_bin_from_key ("default/videosrc");
-
- if (!ret) {
- ret = gst_element_factory_make (DEFAULT_VIDEOSRC, NULL);
-
- if (!ret)
- g_warning ("No GConf default video src key and %s doesn't work",
- DEFAULT_VIDEOSRC);
- }
-
- return ret;
-}
-
-/**
- * gst_gconf_get_default_visualization_element:
- *
- * Render visualization bin from GStreamer GConf key : "default/visualization".
- * If key is invalid, the default visualization element is used.
- *
- * Returns: a #GstElement containing the visualization bin, or NULL if
- * everything failed.
- */
-GstElement *
-gst_gconf_get_default_visualization_element (void)
-{
- GstElement *ret = gst_gconf_render_bin_from_key ("default/visualization");
-
- if (!ret) {
- ret = gst_element_factory_make (DEFAULT_VISUALIZER, NULL);
-
- if (!ret)
- g_warning
- ("No GConf default visualization plugin key and %s doesn't work",
- DEFAULT_VISUALIZER);
- }
-
- return ret;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2002> Thomas Vander Stichele <thomas@apestaart.org>
- *
- * 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_GCONF_H
-#define GST_GCONF_H
-
-/*
- * this library handles interaction with GConf
- */
-
-#include <gst/gst.h>
-#include <gconf/gconf-client.h>
-
-G_BEGIN_DECLS
-
-gchar * gst_gconf_get_string (const gchar *key);
-void gst_gconf_set_string (const gchar *key,
- const gchar *value);
-
-GstElement * gst_gconf_render_bin_from_key (const gchar *key);
-GstElement * gst_gconf_render_bin_from_description (const gchar *description);
-
-GstElement * gst_gconf_get_default_video_sink (void);
-GstElement * gst_gconf_get_default_audio_sink (void);
-GstElement * gst_gconf_get_default_video_src (void);
-GstElement * gst_gconf_get_default_audio_src (void);
-GstElement * gst_gconf_get_default_visualization_element (void);
-
-G_END_DECLS
-
-#endif /* GST_GCONF_H */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <2002> Thomas Vander Stichele <thomas@apestaart.org>
- *
- * 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 "gconf.h"
-
-int
-main (int argc, char *argv[])
-{
- gst_init (&argc, &argv);
-
- printf ("Default video sink : %s\n",
- gst_gconf_get_string ("default/videosink"));
- printf ("Default audio sink : %s\n",
- gst_gconf_get_string ("default/audiosink"));
- printf ("Default video src : %s\n",
- gst_gconf_get_string ("default/videosrc"));
- printf ("Default audio src : %s\n",
- gst_gconf_get_string ("default/audiosrc"));
- return 0;
-}
+++ /dev/null
-
-librarydir = $(libdir)/gstreamer-@GST_MAJORMINOR@
-
-library_LTLIBRARIES = libgstidct.la
-
-libgstidct_la_SOURCES = \
- fastintidct.c \
- floatidct.c \
- idct.c \
- intidct.c
-
-libgstidctincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/idct
-libgstidctinclude_HEADERS = idct.h
-noinst_HEADERS = dct.h
-
-## check_PROGRAMS = ieeetest
-
-## ieeetest_SOURCES = ieeetest.c
-## ieeetest_LDADD = libgstidct.la
-## ieeetest_CFLAGS = $(GST_CFLAGS)
-## ieeetest_LDFLAGS = $(GST_LIBS)
-
-
-libgstidct_la_LIBADD =
-libgstidct_la_CFLAGS = $(GST_CFLAGS)
-libgstidct_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+++ /dev/null
-This archive contains a quick & dirty implementation of the IEEE Standard
-1180-1990 accuracy test for inverse DCT. It is not guaranteed to be
-correct ... but if you find any bugs, please let me know (by email to
-tgl@cs.cmu.edu).
-
-The test harness consists of the C program ieeetest.c and shell script
-doieee. For comparison purposes I have also supplied a copy of jrevdct.c,
-the inverse DCT routine from release 4 of the Independent JPEG Group's
-free JPEG software. (jrevdct.c is slightly modified from the IJG release
-so that it will compile without the IJG include files.) jrevdct.c passes
-the 1180 test --- or at least, this program thinks so. jrevdct.out is
-the output from a test run.
-
-Note that numerical results may vary somewhat across machines. This appears
-to be mostly due to differing results from the cosine function.
-
-
-INSTALLATION:
- Check the Makefile, change CC and CFLAGS if needed. Then say "make".
-If your C compiler is non-ANSI, you may need to change includes and/or
-function headers.
-
- To test a different IDCT routine, link with that routine instead of
-jrevdct.o. You will need to modify dct.h and/or ieeetest.c if your
-routine's calling convention is not in-place modification of an array
-of 64 "short"s.
-
-
-USAGE:
- The standard test procedure is
- doieee ieeetest >outputfile
-Expect it to take a while (almost 80 minutes on my old 68030 box).
-Each of the six passes will emit a row of 100 dots as it runs.
-
-You can grep the output for the word FAILS if you just want to know
-yea or nay.
-
-
-LEGAL MUMBO-JUMBO:
- I hereby release the test harness to the public domain.
- Thomas G. Lane, 22 Nov 1993
-
-IMPORTANT: jrevdct.c is NOT public domain, but is copyrighted free software
-(not the same thing at all). It is subject to IJG's distribution terms, which
-primarily state that if you incorporate it into a program you must acknowledge
-IJG's contribution in your program documentation. For more details and the
-complete IJG software, see the IJG FTP archive at ftp.uu.net, in directory
-/graphics/jpeg.
+++ /dev/null
-/* define DCT types */
-
-/*
- * DCTSIZE underlying (1d) transform size
- * DCTSIZE2 DCTSIZE squared
- */
-
-#define DCTSIZE (8)
-#define DCTSIZE2 (DCTSIZE*DCTSIZE)
-
-#define EIGHT_BIT_SAMPLES /* needed in jrevdct.c */
-
-typedef short DCTELEM; /* must be at least 16 bits */
-
-typedef DCTELEM DCTBLOCK[DCTSIZE2];
-
-typedef long INT32; /* must be at least 32 bits */
-
-extern void gst_idct_int_idct();
-
-extern void gst_idct_init_fast_int_idct (void);
-extern void gst_idct_fast_int_idct (short *block);
-
-extern void gst_idct_init_float_idct(void);
-extern void gst_idct_float_idct (short *block);
-
+++ /dev/null
-# perform IEEE 1180 test series
-# Typical usage:
-# doieee >outfile
-# where progname is ieeetest or a variant
-
-for i in 1 2 3 4 5;
-do
-time ./ieeetest $i -256 255 1 10000
-time ./ieeetest $i -5 5 1 10000
-time ./ieeetest $i -300 300 1 10000
-
-time ./ieeetest $i -256 255 -1 10000
-time ./ieeetest $i -5 5 -1 10000
-time ./ieeetest $i -300 300 -1 10000
-done
+++ /dev/null
-/* idct.c, inverse fast discrete cosine transform */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-/**********************************************************/
-/* inverse two dimensional DCT, Chen-Wang algorithm */
-/* (cf. IEEE ASSP-32, pp. 803-816, Aug. 1984) */
-/* 32-bit integer arithmetic (8 bit coefficients) */
-/* 11 mults, 29 adds per DCT */
-/* sE, 18.8.91 */
-/**********************************************************/
-/* coefficients extended to 12 bit for IEEE1180-1990 */
-/* compliance sE, 2.1.94 */
-/**********************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* this code assumes >> to be a two's-complement arithmetic */
-/* right shift: (-2)>>1 == -1 , (-3)>>1 == -2 */
-
-#define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
-#define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
-#define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
-#define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
-#define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
-#define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */
-
-#include "dct.h"
-
-/* private data */
-static short iclip[1024]; /* clipping table */
-static short *iclp;
-
-/* private prototypes */
-static void idctrow (short *blk);
-static void idctcol (short *blk);
-
-/* row (horizontal) IDCT
- *
- * 7 pi 1
- * dst[k] = sum c[l] * src[l] * cos( -- * ( k + - ) * l )
- * l=0 8 2
- *
- * where: c[0] = 128
- * c[1..7] = 128*sqrt(2)
- */
-
-static void
-idctrow (blk)
- short *blk;
-{
- int x0, x1, x2, x3, x4, x5, x6, x7, x8;
-
- /* shortcut */
- if (!((x1 = blk[4] << 11) | (x2 = blk[6]) | (x3 = blk[2]) |
- (x4 = blk[1]) | (x5 = blk[7]) | (x6 = blk[5]) | (x7 = blk[3]))) {
- blk[0] = blk[1] = blk[2] = blk[3] = blk[4] = blk[5] = blk[6] = blk[7] =
- blk[0] << 3;
- return;
- }
-
- x0 = (blk[0] << 11) + 128; /* for proper rounding in the fourth stage */
-
- /* first stage */
- x8 = W7 * (x4 + x5);
- x4 = x8 + (W1 - W7) * x4;
- x5 = x8 - (W1 + W7) * x5;
- x8 = W3 * (x6 + x7);
- x6 = x8 - (W3 - W5) * x6;
- x7 = x8 - (W3 + W5) * x7;
-
- /* second stage */
- x8 = x0 + x1;
- x0 -= x1;
- x1 = W6 * (x3 + x2);
- x2 = x1 - (W2 + W6) * x2;
- x3 = x1 + (W2 - W6) * x3;
- x1 = x4 + x6;
- x4 -= x6;
- x6 = x5 + x7;
- x5 -= x7;
-
- /* third stage */
- x7 = x8 + x3;
- x8 -= x3;
- x3 = x0 + x2;
- x0 -= x2;
- x2 = (181 * (x4 + x5) + 128) >> 8;
- x4 = (181 * (x4 - x5) + 128) >> 8;
-
- /* fourth stage */
- blk[0] = (x7 + x1) >> 8;
- blk[1] = (x3 + x2) >> 8;
- blk[2] = (x0 + x4) >> 8;
- blk[3] = (x8 + x6) >> 8;
- blk[4] = (x8 - x6) >> 8;
- blk[5] = (x0 - x4) >> 8;
- blk[6] = (x3 - x2) >> 8;
- blk[7] = (x7 - x1) >> 8;
-}
-
-/* column (vertical) IDCT
- *
- * 7 pi 1
- * dst[8*k] = sum c[l] * src[8*l] * cos( -- * ( k + - ) * l )
- * l=0 8 2
- *
- * where: c[0] = 1/1024
- * c[1..7] = (1/1024)*sqrt(2)
- */
-static void
-idctcol (blk)
- short *blk;
-{
- int x0, x1, x2, x3, x4, x5, x6, x7, x8;
-
- /* shortcut */
- if (!((x1 = (blk[8 * 4] << 8)) | (x2 = blk[8 * 6]) | (x3 = blk[8 * 2]) |
- (x4 = blk[8 * 1]) | (x5 = blk[8 * 7]) | (x6 = blk[8 * 5]) | (x7 =
- blk[8 * 3]))) {
- blk[8 * 0] = blk[8 * 1] = blk[8 * 2] = blk[8 * 3] = blk[8 * 4] =
- blk[8 * 5] = blk[8 * 6] = blk[8 * 7] = iclp[(blk[8 * 0] + 32) >> 6];
- return;
- }
-
- x0 = (blk[8 * 0] << 8) + 8192;
-
- /* first stage */
- x8 = W7 * (x4 + x5) + 4;
- x4 = (x8 + (W1 - W7) * x4) >> 3;
- x5 = (x8 - (W1 + W7) * x5) >> 3;
- x8 = W3 * (x6 + x7) + 4;
- x6 = (x8 - (W3 - W5) * x6) >> 3;
- x7 = (x8 - (W3 + W5) * x7) >> 3;
-
- /* second stage */
- x8 = x0 + x1;
- x0 -= x1;
- x1 = W6 * (x3 + x2) + 4;
- x2 = (x1 - (W2 + W6) * x2) >> 3;
- x3 = (x1 + (W2 - W6) * x3) >> 3;
- x1 = x4 + x6;
- x4 -= x6;
- x6 = x5 + x7;
- x5 -= x7;
-
- /* third stage */
- x7 = x8 + x3;
- x8 -= x3;
- x3 = x0 + x2;
- x0 -= x2;
- x2 = (181 * (x4 + x5) + 128) >> 8;
- x4 = (181 * (x4 - x5) + 128) >> 8;
-
- /* fourth stage */
- blk[8 * 0] = iclp[(x7 + x1) >> 14];
- blk[8 * 1] = iclp[(x3 + x2) >> 14];
- blk[8 * 2] = iclp[(x0 + x4) >> 14];
- blk[8 * 3] = iclp[(x8 + x6) >> 14];
- blk[8 * 4] = iclp[(x8 - x6) >> 14];
- blk[8 * 5] = iclp[(x0 - x4) >> 14];
- blk[8 * 6] = iclp[(x3 - x2) >> 14];
- blk[8 * 7] = iclp[(x7 - x1) >> 14];
-}
-
-/* two dimensional inverse discrete cosine transform */
-void
-gst_idct_fast_int_idct (block)
- short *block;
-{
- int i;
-
- for (i = 0; i < 8; i++)
- idctrow (block + 8 * i);
-
- for (i = 0; i < 8; i++)
- idctcol (block + i);
-}
-
-void
-gst_idct_init_fast_int_idct ()
-{
- int i;
-
- iclp = iclip + 512;
- for (i = -512; i < 512; i++)
- iclp[i] = (i < -256) ? -256 : ((i > 255) ? 255 : i);
-}
+++ /dev/null
-/* Reference_IDCT.c, Inverse Discrete Fourier Transform, double precision */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- *
- */
-
-/* Perform IEEE 1180 reference (64-bit floating point, separable 8x1
- * direct matrix multiply) Inverse Discrete Cosine Transform
-*/
-
-
-/* Here we use math.h to generate constants. Compiler results may
- vary a little */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-
-#ifndef PI
-# ifdef M_PI
-# define PI M_PI
-# else
-# define PI 3.14159265358979323846
-# endif
-#endif
-
-/* private data */
-
-/* cosine transform matrix for 8x1 IDCT */
-static double gst_idct_float_c[8][8];
-
-/* initialize DCT coefficient matrix */
-
-void
-gst_idct_init_float_idct ()
-{
- int freq, time;
- double scale;
-
- for (freq = 0; freq < 8; freq++) {
- scale = (freq == 0) ? sqrt (0.125) : 0.5;
- for (time = 0; time < 8; time++)
- gst_idct_float_c[freq][time] =
- scale * cos ((PI / 8.0) * freq * (time + 0.5));
- }
-}
-
-/* perform IDCT matrix multiply for 8x8 coefficient block */
-
-void
-gst_idct_float_idct (block)
- short *block;
-{
- int i, j, k, v;
- double partial_product;
- double tmp[64];
-
- for (i = 0; i < 8; i++)
- for (j = 0; j < 8; j++) {
- partial_product = 0.0;
-
- for (k = 0; k < 8; k++)
- partial_product += gst_idct_float_c[k][j] * block[8 * i + k];
-
- tmp[8 * i + j] = partial_product;
- }
-
- /* Transpose operation is integrated into address mapping by switching
- loop order of i and j */
-
- for (j = 0; j < 8; j++)
- for (i = 0; i < 8; i++) {
- partial_product = 0.0;
-
- for (k = 0; k < 8; k++)
- partial_product += gst_idct_float_c[k][i] * tmp[8 * k + j];
-
- v = (int) floor (partial_product + 0.5);
- block[8 * i + j] = (v < -256) ? -256 : ((v > 255) ? 255 : v);
- }
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/idct/idct.h>
-#include "dct.h"
-
-static void gst_idct_int_sparse_idct (short *data);
-
-GstIDCT *
-gst_idct_new (GstIDCTMethod method)
-{
- GstIDCT *new = g_malloc (sizeof (GstIDCT));
-
- new->need_transpose = FALSE;
-
- if (method == GST_IDCT_DEFAULT) {
- method = GST_IDCT_FAST_INT;
- }
-
- new->convert_sparse = gst_idct_int_sparse_idct;
-
- switch (method) {
- case GST_IDCT_FAST_INT:
- GST_INFO ("using fast_int_idct");
- gst_idct_init_fast_int_idct ();
- new->convert = gst_idct_fast_int_idct;
- break;
- case GST_IDCT_INT:
- GST_INFO ("using int_idct");
- new->convert = gst_idct_int_idct;
- break;
- case GST_IDCT_FLOAT:
- GST_INFO ("using float_idct");
- gst_idct_init_float_idct ();
- new->convert = gst_idct_float_idct;
- break;
- default:
- GST_INFO ("method not supported");
- g_free (new);
- return NULL;
- }
- return new;
-}
-
-static void
-gst_idct_int_sparse_idct (short *data)
-{
- short val;
- gint32 v, *dp = (guint32 *) data;
-
- v = *data;
-
- if (v < 0) {
- val = -v;
- val += (8 >> 1);
- val /= 8;
- val = -val;
- } else {
- val = (v + (8 >> 1)) / 8;
- }
- v = ((val & 0xffff) | (val << 16));
-
- dp[0] = v;
- dp[1] = v;
- dp[2] = v;
- dp[3] = v;
- dp[4] = v;
- dp[5] = v;
- dp[6] = v;
- dp[7] = v;
- dp[8] = v;
- dp[9] = v;
- dp[10] = v;
- dp[11] = v;
- dp[12] = v;
- dp[13] = v;
- dp[14] = v;
- dp[15] = v;
- dp[16] = v;
- dp[17] = v;
- dp[18] = v;
- dp[19] = v;
- dp[20] = v;
- dp[21] = v;
- dp[22] = v;
- dp[23] = v;
- dp[24] = v;
- dp[25] = v;
- dp[26] = v;
- dp[27] = v;
- dp[28] = v;
- dp[29] = v;
- dp[30] = v;
- dp[31] = v;
-}
-
-void
-gst_idct_destroy (GstIDCT * idct)
-{
- g_return_if_fail (idct != NULL);
-
- g_free (idct);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "gstidct",
- "Accelerated IDCT routines",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_IDCT_H__
-#define __GST_IDCT_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef enum {
- GST_IDCT_DEFAULT,
- GST_IDCT_INT,
- GST_IDCT_FAST_INT,
- GST_IDCT_FLOAT,
-} GstIDCTMethod;
-
-typedef struct _GstIDCT GstIDCT;
-typedef void (*GstIDCTFunction) (gshort *block);
-
-#define GST_IDCT_TRANSPOSE(idct) ((idct)->need_transpose)
-
-struct _GstIDCT {
- /* private */
- GstIDCTFunction convert;
- GstIDCTFunction convert_sparse;
- gboolean need_transpose;
-};
-
-
-GstIDCT *gst_idct_new(GstIDCTMethod method);
-#define gst_idct_convert(idct, blocks) (idct)->convert((blocks))
-#define gst_idct_convert_sparse(idct, blocks) (idct)->convert_sparse((blocks))
-void gst_idct_destroy(GstIDCT *idct);
-
-G_END_DECLS
-
-#endif /* __GST_IDCT_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="idtc"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67895}"
- RootNamespace="idtc"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstidtc.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/idtc.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstidtc.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstidtc.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstidtc.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\fastintidct.c">
- </File>
- <File
- RelativePath=".\floatidct.c">
- </File>
- <File
- RelativePath=".\idct.c">
- </File>
- <File
- RelativePath=".\intidct.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\dct.h">
- </File>
- <File
- RelativePath=".\idtc.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/*
- * ieeetest.c --- test IDCT code against the IEEE Std 1180-1990 spec
- *
- * Note that this does only one pass of the test.
- * Six invocations of ieeetest are needed to complete the entire spec.
- * The shell script "doieee" performs the complete test.
- *
- * Written by Tom Lane (tgl@cs.cmu.edu).
- * Released to public domain 11/22/93.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include <gst/gst.h>
-#include <gst/idct/idct.h>
-#include "dct.h"
-
-
-/* prototypes */
-
-void usage (char *msg);
-long ieeerand (long L, long H);
-void dct_init (void);
-void ref_fdct (DCTELEM block[8][8]);
-void ref_idct (DCTELEM block[8][8]);
-
-/* error stat accumulators -- assume initialized to 0 */
-
-long sumerrs[DCTSIZE2];
-long sumsqerrs[DCTSIZE2];
-int maxerr[DCTSIZE2];
-
-
-char *
-meets (double val, double limit)
-{
- return ((fabs (val) <= limit) ? "meets" : "FAILS");
-}
-
-int
-main (int argc, char **argv)
-{
- long minpix, maxpix, sign;
- long curiter, niters;
- int i, j;
- double max, total;
- int method;
- DCTELEM block[DCTSIZE2]; /* random source data */
- DCTELEM refcoefs[DCTSIZE2]; /* coefs from reference FDCT */
- DCTELEM refout[DCTSIZE2]; /* output from reference IDCT */
- DCTELEM testout[DCTSIZE2]; /* output from test IDCT */
- GstIDCT *idct;
- guint64 tscstart, tscmin = ~0, tscmax = 0;
- guint64 tscstop;
-
- /* Argument parsing --- not very bulletproof at all */
-
- if (argc != 6)
- usage (NULL);
-
- method = atoi (argv[1]);
- minpix = atoi (argv[2]);
- maxpix = atoi (argv[3]);
- sign = atoi (argv[4]);
- niters = atol (argv[5]);
-
- gst_library_load ("gstidct");
-
- idct = gst_idct_new (method);
- if (idct == 0) {
- printf ("method not available\n\n\n");
-
- return 0;
- }
-
- dct_init ();
-
- /* Loop once per generated random-data block */
-
- for (curiter = 0; curiter < niters; curiter++) {
-
- /* generate a pseudo-random block of data */
- for (i = 0; i < DCTSIZE2; i++)
- block[i] = (DCTELEM) (ieeerand (-minpix, maxpix) * sign);
-
- /* perform reference FDCT */
- memcpy (refcoefs, block, sizeof (DCTELEM) * DCTSIZE2);
- ref_fdct ((DCTELEM **) & refcoefs);
- /* clip */
- for (i = 0; i < DCTSIZE2; i++) {
- if (refcoefs[i] < -2048)
- refcoefs[i] = -2048;
- else if (refcoefs[i] > 2047)
- refcoefs[i] = 2047;
- }
-
- /* perform reference IDCT */
- memcpy (refout, refcoefs, sizeof (DCTELEM) * DCTSIZE2);
- ref_idct (refout);
- /* clip */
- for (i = 0; i < DCTSIZE2; i++) {
- if (refout[i] < -256)
- refout[i] = -256;
- else if (refout[i] > 255)
- refout[i] = 255;
- }
-
- /* perform test IDCT */
- if (GST_IDCT_TRANSPOSE (idct)) {
- for (j = 0; j < DCTSIZE; j++) {
- for (i = 0; i < DCTSIZE; i++) {
- testout[i * DCTSIZE + j] = refcoefs[j * DCTSIZE + i];
- }
- }
- } else {
- memcpy (testout, refcoefs, sizeof (DCTELEM) * DCTSIZE2);
- }
-
- gst_trace_read_tsc (&tscstart);
- gst_idct_convert (idct, testout);
- gst_trace_read_tsc (&tscstop);
- /*printf("time %llu, %llu %lld\n", tscstart, tscstop, tscstop-tscstart); */
- if (tscstop - tscstart < tscmin)
- tscmin = tscstop - tscstart;
- if (tscstop - tscstart > tscmax)
- tscmax = tscstop - tscstart;
-
- /* clip */
- for (i = 0; i < DCTSIZE2; i++) {
- if (testout[i] < -256)
- testout[i] = -256;
- else if (testout[i] > 255)
- testout[i] = 255;
- }
-
- /* accumulate error stats */
- for (i = 0; i < DCTSIZE2; i++) {
- register int err = testout[i] - refout[i];
-
- sumerrs[i] += err;
- sumsqerrs[i] += err * err;
- if (err < 0)
- err = -err;
- if (maxerr[i] < err)
- maxerr[i] = err;
- }
-
- if (curiter % 100 == 99) {
- fprintf (stderr, ".");
- fflush (stderr);
- }
- }
- fprintf (stderr, "\n");
-
- /* print results */
-
- printf
- ("IEEE test conditions: -L = %ld, +H = %ld, sign = %ld, #iters = %ld\n",
- minpix, maxpix, sign, niters);
-
- printf ("Speed, min time %lld, max %lld\n", tscmin, tscmax);
-
- printf ("Peak absolute values of errors:\n");
- for (i = 0, j = 0; i < DCTSIZE2; i++) {
- if (j < maxerr[i])
- j = maxerr[i];
- printf ("%4d", maxerr[i]);
- if ((i % DCTSIZE) == DCTSIZE - 1)
- printf ("\n");
- }
- printf ("Worst peak error = %d (%s spec limit 1)\n\n", j,
- meets ((double) j, 1.0));
-
- printf ("Mean square errors:\n");
- max = total = 0.0;
- for (i = 0; i < DCTSIZE2; i++) {
- double err = (double) sumsqerrs[i] / ((double) niters);
-
- total += (double) sumsqerrs[i];
- if (max < err)
- max = err;
- printf (" %8.4f", err);
- if ((i % DCTSIZE) == DCTSIZE - 1)
- printf ("\n");
- }
- printf ("Worst pmse = %.6f (%s spec limit 0.06)\n", max, meets (max, 0.06));
- total /= (double) (64 * niters);
- printf ("Overall mse = %.6f (%s spec limit 0.02)\n\n", total,
- meets (total, 0.02));
-
- printf ("Mean errors:\n");
- max = total = 0.0;
- for (i = 0; i < DCTSIZE2; i++) {
- double err = (double) sumerrs[i] / ((double) niters);
-
- total += (double) sumerrs[i];
- printf (" %8.4f", err);
- if (err < 0.0)
- err = -err;
- if (max < err)
- max = err;
- if ((i % DCTSIZE) == DCTSIZE - 1)
- printf ("\n");
- }
- printf ("Worst mean error = %.6f (%s spec limit 0.015)\n", max,
- meets (max, 0.015));
- total /= (double) (64 * niters);
- printf ("Overall mean error = %.6f (%s spec limit 0.0015)\n\n", total,
- meets (total, 0.0015));
-
- /* test for 0 input giving 0 output */
- memset (testout, 0, sizeof (DCTELEM) * DCTSIZE2);
- gst_idct_convert (idct, testout);
- for (i = 0, j = 0; i < DCTSIZE2; i++) {
- if (testout[i]) {
- printf ("Position %d of IDCT(0) = %d (FAILS)\n", i, testout[i]);
- j++;
- }
- }
- printf ("%d elements of IDCT(0) were not zero\n\n\n", j);
-
- exit (0);
- return 0;
-}
-
-
-void
-usage (char *msg)
-{
- if (msg != NULL)
- fprintf (stderr, "\nerror: %s\n", msg);
-
- fprintf (stderr, "\n");
- fprintf (stderr, "usage: ieeetest minpix maxpix sign niters\n");
- fprintf (stderr, "\n");
- fprintf (stderr, " test = 1 - 5\n");
- fprintf (stderr, " minpix = -L value per IEEE spec\n");
- fprintf (stderr, " maxpix = H value per IEEE spec\n");
- fprintf (stderr, " sign = +1 for normal, -1 to run negated test\n");
- fprintf (stderr, " niters = # iterations (10000 for full test)\n");
- fprintf (stderr, "\n");
-
- exit (1);
-}
-
-
-/* Pseudo-random generator specified by IEEE 1180 */
-
-long
-ieeerand (long L, long H)
-{
- static long randx = 1;
- static double z = (double) 0x7fffffff;
-
- long i, j;
- double x;
-
- randx = (randx * 1103515245) + 12345;
- i = randx & 0x7ffffffe;
- x = ((double) i) / z;
- x *= (L + H + 1);
- j = x;
- return j - L;
-}
-
-
-/* Reference double-precision FDCT and IDCT */
-
-
-/* The cosine lookup table */
-/* coslu[a][b] = C(b)/2 * cos[(2a+1)b*pi/16] */
-double coslu[8][8];
-
-
-/* Routine to initialise the cosine lookup table */
-void
-dct_init (void)
-{
- int a, b;
- double tmp;
-
- for (a = 0; a < 8; a++)
- for (b = 0; b < 8; b++) {
- tmp = cos ((double) ((a + a + 1) * b) * (3.14159265358979323846 / 16.0));
- if (b == 0)
- tmp /= sqrt (2.0);
- coslu[a][b] = tmp * 0.5;
- }
-}
-
-
-void
-ref_fdct (DCTELEM block[8][8])
-{
- int x, y, u, v;
- double tmp, tmp2;
- double res[8][8];
-
- for (v = 0; v < 8; v++) {
- for (u = 0; u < 8; u++) {
- tmp = 0.0;
- for (y = 0; y < 8; y++) {
- tmp2 = 0.0;
- for (x = 0; x < 8; x++) {
- tmp2 += (double) block[y][x] * coslu[x][u];
- }
- tmp += coslu[y][v] * tmp2;
- }
- res[v][u] = tmp;
- }
- }
-
- for (v = 0; v < 8; v++) {
- for (u = 0; u < 8; u++) {
- tmp = res[v][u];
- if (tmp < 0.0) {
- x = -((int) (0.5 - tmp));
- } else {
- x = (int) (tmp + 0.5);
- }
- block[v][u] = (DCTELEM) x;
- }
- }
-}
-
-
-void
-ref_idct (DCTELEM block[8][8])
-{
- int x, y, u, v;
- double tmp, tmp2;
- double res[8][8];
-
- for (y = 0; y < 8; y++) {
- for (x = 0; x < 8; x++) {
- tmp = 0.0;
- for (v = 0; v < 8; v++) {
- tmp2 = 0.0;
- for (u = 0; u < 8; u++) {
- tmp2 += (double) block[v][u] * coslu[x][u];
- }
- tmp += coslu[y][v] * tmp2;
- }
- res[y][x] = tmp;
- }
- }
-
- for (v = 0; v < 8; v++) {
- for (u = 0; u < 8; u++) {
- tmp = res[v][u];
- if (tmp < 0.0) {
- x = -((int) (0.5 - tmp));
- } else {
- x = (int) (tmp + 0.5);
- }
- block[v][u] = (DCTELEM) x;
- }
- }
-}
+++ /dev/null
-/*
- * jrevdct.c
- *
- * Copyright (C) 1991, 1992, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the basic inverse-DCT transformation subroutine.
- *
- * This implementation is based on an algorithm described in
- * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
- * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
- * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
- * The primary algorithm described there uses 11 multiplies and 29 adds.
- * We use their alternate method with 12 multiplies and 32 adds.
- * The advantage of this method is that no data path contains more than one
- * multiplication; this allows a very simple and accurate implementation in
- * scaled fixed-point arithmetic, with a minimal number of shifts.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "dct.h"
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity. This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit. But some
- * C compilers implement >> with an unsigned shift. For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts. SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft) \
- ((shift_temp = (x)) < 0 ? \
- (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
- (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft) ((x) >> (shft))
-#endif
-
-
-/*
- * This routine is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-Sorry, this code only copes with 8 x8 DCTs. /* deliberate syntax err */
-#endif
-/*
- * A 2-D IDCT can be done by 1-D IDCT on each row followed by 1-D IDCT
- * on each column. Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * The poop on this scaling stuff is as follows:
- *
- * Each 1-D IDCT step produces outputs which are a factor of sqrt(N)
- * larger than the true IDCT outputs. The final outputs are therefore
- * a factor of N larger than desired; since N=8 this can be cured by
- * a simple right shift at the end of the algorithm. The advantage of
- * this arrangement is that we save two multiplications per 1-D IDCT,
- * because the y0 and y4 inputs need not be divided by sqrt(N).
- *
- * We have to do addition and subtraction of the integer inputs, which
- * is no problem, and multiplication by fractional constants, which is
- * a problem to do in integer arithmetic. We multiply all the constants
- * by CONST_SCALE and convert them to integer constants (thus retaining
- * CONST_BITS bits of precision in the constants). After doing a
- * multiplication we have to divide the product by CONST_SCALE, with proper
- * rounding, to produce the correct output. This division can be done
- * cheaply as a right shift of CONST_BITS bits. We postpone shifting
- * as long as possible so that partial sums can be added together with
- * full fractional precision.
- *
- * The outputs of the first pass are scaled up by PASS1_BITS bits so that
- * they are represented to better-than-integral precision. These outputs
- * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
- * with the recommended scaling. (To scale up 12-bit sample data further, an
- * intermediate INT32 array would be needed.)
- *
- * To avoid overflow of the 32-bit intermediate results in pass 2, we must
- * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis
- * shows that the values given below are the most effective.
- */
-#ifdef EIGHT_BIT_SAMPLES
-#define CONST_BITS 13
-#define PASS1_BITS 2
-#else
-#define CONST_BITS 13
-#define PASS1_BITS 1 /* lose a little precision to avoid overflow */
-#endif
-#define ONE ((INT32) 1)
-#define CONST_SCALE (ONE << CONST_BITS)
-/* Convert a positive real constant to an integer scaled by CONST_SCALE. */
-#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5))
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-#if CONST_BITS == 13
-#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */
-#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */
-#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */
-#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */
-#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */
-#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */
-#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */
-#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */
-#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */
-#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */
-#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */
-#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */
-#else
-#define FIX_0_298631336 FIX(0.298631336)
-#define FIX_0_390180644 FIX(0.390180644)
-#define FIX_0_541196100 FIX(0.541196100)
-#define FIX_0_765366865 FIX(0.765366865)
-#define FIX_0_899976223 FIX(0.899976223)
-#define FIX_1_175875602 FIX(1.175875602)
-#define FIX_1_501321110 FIX(1.501321110)
-#define FIX_1_847759065 FIX(1.847759065)
-#define FIX_1_961570560 FIX(1.961570560)
-#define FIX_2_053119869 FIX(2.053119869)
-#define FIX_2_562915447 FIX(2.562915447)
-#define FIX_3_072711026 FIX(3.072711026)
-#endif
-/* Descale and correctly round an INT32 value that's scaled by N bits.
- * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
- * the fudge factor is correct for either sign of X.
- */
-#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * For 8-bit samples with the recommended scaling, all the variable
- * and constant values involved are no more than 16 bits wide, so a
- * 16x16->32 bit multiply can be used instead of a full 32x32 multiply;
- * this provides a useful speedup on many machines.
- * There is no way to specify a 16x16->32 multiply in portable C, but
- * some C compilers will do the right thing if you provide the correct
- * combination of casts.
- * NB: for 12-bit samples, a full 32-bit multiplication will be needed.
- */
-#ifdef EIGHT_BIT_SAMPLES
-#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */
-#define MULTIPLY(var,const) (((INT16) (var)) * ((INT16) (const)))
-#endif
-#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */
-#define MULTIPLY(var,const) (((INT16) (var)) * ((INT32) (const)))
-#endif
-#endif
-#ifndef MULTIPLY /* default definition */
-#define MULTIPLY(var,const) ((var) * (const))
-#endif
-/*
- * Perform the inverse DCT on one block of coefficients.
- */
- void
-gst_idct_int_idct (DCTBLOCK data)
-{
- INT32 tmp0, tmp1, tmp2, tmp3;
- INT32 tmp10, tmp11, tmp12, tmp13;
- INT32 z1, z2, z3, z4, z5;
- register DCTELEM *dataptr;
- int rowctr;
-
- SHIFT_TEMPS
- /* Pass 1: process rows. */
- /* Note results are scaled up by sqrt(8) compared to a true IDCT; */
- /* furthermore, we scale the results by 2**PASS1_BITS. */
- dataptr = data;
- for (rowctr = DCTSIZE - 1; rowctr >= 0; rowctr--) {
- /* Due to quantization, we will usually find that many of the input
- * coefficients are zero, especially the AC terms. We can exploit this
- * by short-circuiting the IDCT calculation for any row in which all
- * the AC terms are zero. In that case each output is equal to the
- * DC coefficient (with scale factor as needed).
- * With typical images and quantization tables, half or more of the
- * row DCT calculations can be simplified this way.
- */
-
- if ((dataptr[1] | dataptr[2] | dataptr[3] | dataptr[4] |
- dataptr[5] | dataptr[6] | dataptr[7]) == 0) {
- /* AC terms all zero */
- DCTELEM dcval = (DCTELEM) (dataptr[0] << PASS1_BITS);
-
- dataptr[0] = dcval;
- dataptr[1] = dcval;
- dataptr[2] = dcval;
- dataptr[3] = dcval;
- dataptr[4] = dcval;
- dataptr[5] = dcval;
- dataptr[6] = dcval;
- dataptr[7] = dcval;
-
- dataptr += DCTSIZE; /* advance pointer to next row */
- continue;
- }
-
- /* Even part: reverse the even part of the forward DCT. */
- /* The rotator is sqrt(2)*c(-6). */
-
- z2 = (INT32) dataptr[2];
- z3 = (INT32) dataptr[6];
-
- z1 = MULTIPLY (z2 + z3, FIX_0_541196100);
- tmp2 = z1 + MULTIPLY (z3, -FIX_1_847759065);
- tmp3 = z1 + MULTIPLY (z2, FIX_0_765366865);
-
- tmp0 = ((INT32) dataptr[0] + (INT32) dataptr[4]) << CONST_BITS;
- tmp1 = ((INT32) dataptr[0] - (INT32) dataptr[4]) << CONST_BITS;
-
- tmp10 = tmp0 + tmp3;
- tmp13 = tmp0 - tmp3;
- tmp11 = tmp1 + tmp2;
- tmp12 = tmp1 - tmp2;
-
- /* Odd part per figure 8; the matrix is unitary and hence its
- * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively.
- */
-
- tmp0 = (INT32) dataptr[7];
- tmp1 = (INT32) dataptr[5];
- tmp2 = (INT32) dataptr[3];
- tmp3 = (INT32) dataptr[1];
-
- z1 = tmp0 + tmp3;
- z2 = tmp1 + tmp2;
- z3 = tmp0 + tmp2;
- z4 = tmp1 + tmp3;
- z5 = MULTIPLY (z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
-
- tmp0 = MULTIPLY (tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
- tmp1 = MULTIPLY (tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
- tmp2 = MULTIPLY (tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
- tmp3 = MULTIPLY (tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
- z1 = MULTIPLY (z1, -FIX_0_899976223); /* sqrt(2) * (c7-c3) */
- z2 = MULTIPLY (z2, -FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
- z3 = MULTIPLY (z3, -FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
- z4 = MULTIPLY (z4, -FIX_0_390180644); /* sqrt(2) * (c5-c3) */
-
- z3 += z5;
- z4 += z5;
-
- tmp0 += z1 + z3;
- tmp1 += z2 + z4;
- tmp2 += z2 + z3;
- tmp3 += z1 + z4;
-
- /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
- dataptr[0] = (DCTELEM) DESCALE (tmp10 + tmp3, CONST_BITS - PASS1_BITS);
- dataptr[7] = (DCTELEM) DESCALE (tmp10 - tmp3, CONST_BITS - PASS1_BITS);
- dataptr[1] = (DCTELEM) DESCALE (tmp11 + tmp2, CONST_BITS - PASS1_BITS);
- dataptr[6] = (DCTELEM) DESCALE (tmp11 - tmp2, CONST_BITS - PASS1_BITS);
- dataptr[2] = (DCTELEM) DESCALE (tmp12 + tmp1, CONST_BITS - PASS1_BITS);
- dataptr[5] = (DCTELEM) DESCALE (tmp12 - tmp1, CONST_BITS - PASS1_BITS);
- dataptr[3] = (DCTELEM) DESCALE (tmp13 + tmp0, CONST_BITS - PASS1_BITS);
- dataptr[4] = (DCTELEM) DESCALE (tmp13 - tmp0, CONST_BITS - PASS1_BITS);
-
- dataptr += DCTSIZE; /* advance pointer to next row */
- }
-
- /* Pass 2: process columns. */
- /* Note that we must descale the results by a factor of 8 == 2**3, */
- /* and also undo the PASS1_BITS scaling. */
-
- dataptr = data;
- for (rowctr = DCTSIZE - 1; rowctr >= 0; rowctr--) {
- /* Columns of zeroes can be exploited in the same way as we did with rows.
- * However, the row calculation has created many nonzero AC terms, so the
- * simplification applies less often (typically 5% to 10% of the time).
- * On machines with very fast multiplication, it's possible that the
- * test takes more time than it's worth. In that case this section
- * may be commented out.
- */
-
-#ifndef NO_ZERO_COLUMN_TEST
- if ((dataptr[DCTSIZE * 1] | dataptr[DCTSIZE * 2] | dataptr[DCTSIZE * 3] |
- dataptr[DCTSIZE * 4] | dataptr[DCTSIZE * 5] | dataptr[DCTSIZE * 6] |
- dataptr[DCTSIZE * 7]) == 0) {
- /* AC terms all zero */
- DCTELEM dcval = (DCTELEM) DESCALE ((INT32) dataptr[0], PASS1_BITS + 3);
-
- dataptr[DCTSIZE * 0] = dcval;
- dataptr[DCTSIZE * 1] = dcval;
- dataptr[DCTSIZE * 2] = dcval;
- dataptr[DCTSIZE * 3] = dcval;
- dataptr[DCTSIZE * 4] = dcval;
- dataptr[DCTSIZE * 5] = dcval;
- dataptr[DCTSIZE * 6] = dcval;
- dataptr[DCTSIZE * 7] = dcval;
-
- dataptr++; /* advance pointer to next column */
- continue;
- }
-#endif
-
- /* Even part: reverse the even part of the forward DCT. */
- /* The rotator is sqrt(2)*c(-6). */
-
- z2 = (INT32) dataptr[DCTSIZE * 2];
- z3 = (INT32) dataptr[DCTSIZE * 6];
-
- z1 = MULTIPLY (z2 + z3, FIX_0_541196100);
- tmp2 = z1 + MULTIPLY (z3, -FIX_1_847759065);
- tmp3 = z1 + MULTIPLY (z2, FIX_0_765366865);
-
- tmp0 =
- ((INT32) dataptr[DCTSIZE * 0] +
- (INT32) dataptr[DCTSIZE * 4]) << CONST_BITS;
- tmp1 =
- ((INT32) dataptr[DCTSIZE * 0] -
- (INT32) dataptr[DCTSIZE * 4]) << CONST_BITS;
-
- tmp10 = tmp0 + tmp3;
- tmp13 = tmp0 - tmp3;
- tmp11 = tmp1 + tmp2;
- tmp12 = tmp1 - tmp2;
-
- /* Odd part per figure 8; the matrix is unitary and hence its
- * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively.
- */
-
- tmp0 = (INT32) dataptr[DCTSIZE * 7];
- tmp1 = (INT32) dataptr[DCTSIZE * 5];
- tmp2 = (INT32) dataptr[DCTSIZE * 3];
- tmp3 = (INT32) dataptr[DCTSIZE * 1];
-
- z1 = tmp0 + tmp3;
- z2 = tmp1 + tmp2;
- z3 = tmp0 + tmp2;
- z4 = tmp1 + tmp3;
- z5 = MULTIPLY (z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
-
- tmp0 = MULTIPLY (tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
- tmp1 = MULTIPLY (tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
- tmp2 = MULTIPLY (tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
- tmp3 = MULTIPLY (tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
- z1 = MULTIPLY (z1, -FIX_0_899976223); /* sqrt(2) * (c7-c3) */
- z2 = MULTIPLY (z2, -FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
- z3 = MULTIPLY (z3, -FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
- z4 = MULTIPLY (z4, -FIX_0_390180644); /* sqrt(2) * (c5-c3) */
-
- z3 += z5;
- z4 += z5;
-
- tmp0 += z1 + z3;
- tmp1 += z2 + z4;
- tmp2 += z2 + z3;
- tmp3 += z1 + z4;
-
- /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
- dataptr[DCTSIZE * 0] = (DCTELEM) DESCALE (tmp10 + tmp3,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 7] = (DCTELEM) DESCALE (tmp10 - tmp3,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 1] = (DCTELEM) DESCALE (tmp11 + tmp2,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 6] = (DCTELEM) DESCALE (tmp11 - tmp2,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 2] = (DCTELEM) DESCALE (tmp12 + tmp1,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 5] = (DCTELEM) DESCALE (tmp12 - tmp1,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 3] = (DCTELEM) DESCALE (tmp13 + tmp0,
- CONST_BITS + PASS1_BITS + 3);
- dataptr[DCTSIZE * 4] = (DCTELEM) DESCALE (tmp13 - tmp0,
- CONST_BITS + PASS1_BITS + 3);
-
- dataptr++; /* advance pointer to next column */
- }
-}
+++ /dev/null
-lib_LTLIBRARIES = libgstmedia-info-@GST_MAJORMINOR@.la
-
-libgstmedia_info_@GST_MAJORMINOR@_la_SOURCES = media-info.c media-info-priv.c
-
-libgstmedia_info_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGIN_CFLAGS)
-libgstmedia_info_@GST_MAJORMINOR@_la_LIBADD = \
- $(GST_LIBS) $(GST_PLUGIN_LIBS)
-libgstmedia_info_@GST_MAJORMINOR@_la_LDFLAGS = \
- -version-info @GST_PLUGINS_LIBVERSION@
-
-
-libincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/media-info
-libinclude_HEADERS = media-info.h
-
-noinst_PROGRAMS = media-info-test
-noinst_HEADERS = media-info-priv.h
-
-media_info_test_SOURCES = media-info-test.c
-media_info_test_CFLAGS = $(GST_CFLAGS)
-media_info_test_LDADD = $(GST_LIBS) libgstmedia-info-@GST_MAJORMINOR@.la
+++ /dev/null
-* media-info is a library to collect metadata and streaminfo from media
- files
-
-* the current implementation is idler-based.
-
-* you create a new media_info object
-* you set the string name of a source element to use using g_object_set or
- gst_media_info_set_source
-* you declare you'll read a given file by using gst_media_info_read_with_idler
-* you loop gst_media_info_read_idler (info, &stream) as long as it returns TRUE
- and as long as stream is still NULL
-
-
-* INTERNALS:
- - instance_init sets up the media info reader, its elements, and connects
- the deep_notify callback
- - read_with_idler resets the media info reader object,
- and sets location and flags
-
- - read_idler runs through a state machine:
- NULL - TYPEFIND - STREAM - METADATA - STREAMINFO - FORMAT
-
- - NULL: just returns find_type_pre, which moves state to TYPEFIND
- - TYPEFIND:
- - iterates as long as it can until it has priv->type
- - find_type_post
- - call gmi_set_mime which creates a pipeline to decode stuff
- - move to STREAM
-
- - STREAM
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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.
- */
-
-/* media-info-priv.c - handling of internal stuff */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <string.h>
-#include "media-info.h"
-#include "media-info-priv.h"
-
-
-/* helper structs bits */
-GstMediaInfoStream *
-gmi_stream_new (void)
-{
- GstMediaInfoStream *stream;
-
- stream = (GstMediaInfoStream *) g_malloc (sizeof (GstMediaInfoStream));
-
- stream->length_tracks = 0;
- stream->length_time = 0;
- stream->bitrate = 0;
- stream->seekable = FALSE;
- stream->path = NULL;
- stream->mime = NULL;
- stream->tracks = NULL;
-
- return stream;
-}
-
-void
-gmi_stream_free (GstMediaInfoStream * stream)
-{
- if (stream->mime)
- g_free (stream->mime);
- /* FIXME: free tracks */
- g_free (stream);
-}
-
-GstMediaInfoTrack *
-gmi_track_new (void)
-{
- GstMediaInfoTrack *track;
-
- track = g_malloc (sizeof (GstMediaInfoTrack));
-
- track->metadata = NULL;
- track->streaminfo = NULL;
- track->format = NULL;
- track->length_time = 0;
- track->con_streams = NULL;
-
- return track;
-}
-
-/**
- * private functions
- */
-
-/* callbacks */
-static void
-have_type_callback (GstElement * typefind, guint probability, GstCaps * type,
- GstMediaInfoPriv * priv)
-{
- GstStructure *str;
- const gchar *mime;
-
- priv->type = gst_caps_copy (type);
- str = gst_caps_get_structure (type, 0);
- mime = gst_structure_get_name (str);
- GST_DEBUG ("caps %p, mime %s", type, mime);
-
- /* FIXME: this code doesn't yet work, test it later */
-#ifdef DONTWORK
- if (strcmp (mime, "application/x-id3") == 0) {
- /* dig a little deeper */
- GST_DEBUG ("dealing with id3, digging deeper");
- gst_element_set_state (priv->pipeline, GST_STATE_READY);
- gst_element_unlink (priv->source, priv->typefind);
- g_assert (priv->decontainer == NULL);
- priv->decontainer = gst_element_factory_make ("id3tag", "decontainer");
- gst_bin_add (GST_BIN (priv->pipeline), priv->decontainer);
- if (priv->decontainer == NULL)
- /* FIXME: signal error */
- g_warning ("Couldn't create id3tag");
- if (!gst_element_link_many (priv->source, priv->decontainer, priv->typefind,
- NULL));
- g_warning ("Couldn't link in id3tag");
-
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE)
- g_warning ("Couldn't set to playing");
- }
-#endif
-}
-
-void
-deep_notify_callback (GObject * object, GstObject * origin,
- GParamSpec * pspec, GstMediaInfoPriv * priv)
-{
- GValue value = { 0, };
-
- /* we only care about pad notifies */
- if (!GST_IS_PAD (origin))
- return;
-
- /*
- GST_DEBUG ("DEBUG: deep_notify: have notify of %s from object %s:%s !",
- pspec->name, gst_element_get_name (gst_pad_get_parent (GST_PAD (origin))),
- gst_object_get_name (origin));
- */
- else if (strcmp (pspec->name, "caps") == 0) {
- /* check if we're getting it from fakesink */
- if (GST_IS_PAD (origin) && GST_PAD_PARENT (origin) == priv->fakesink) {
- GST_DEBUG ("have caps on fakesink pad !");
- g_value_init (&value, pspec->value_type);
- g_object_get_property (G_OBJECT (origin), pspec->name, &value);
- priv->format = g_value_peek_pointer (&value);
- GST_DEBUG ("caps: %" GST_PTR_FORMAT, priv->format);
- } else
- GST_DEBUG ("ignoring caps on object %s:%s",
- gst_object_get_name (gst_object_get_parent (origin)),
- gst_object_get_name (origin));
- } else if (strcmp (pspec->name, "offset") == 0) {
- /* we REALLY ignore offsets, we hate them */
- }
- //else GST_DEBUG ("ignoring notify of %s", pspec->name);
-}
-
-typedef struct
-{
- guint meta;
- guint encoded;
-}
-TagFlagScore;
-
-static void
-tag_flag_score (const GstTagList * list, const gchar * tag, gpointer user_data)
-{
- TagFlagScore *score = (TagFlagScore *) user_data;
- GstTagFlag flag;
-
- flag = gst_tag_get_flag (tag);
- if (flag == GST_TAG_FLAG_META)
- score->meta++;
- if (flag == GST_TAG_FLAG_ENCODED)
- score->encoded++;
-}
-
-void
-found_tag_callback (GObject * pipeline, GstElement * source, GstTagList * tags,
- GstMediaInfoPriv * priv)
-{
- TagFlagScore score;
-
- score.meta = 0;
- score.encoded = 0;
- GST_DEBUG ("element %s found tag", GST_STR_NULL (GST_ELEMENT_NAME (source)));
-
- /* decide if it's likely to be metadata or streaminfo */
- /* FIXME: this is a hack, there must be a better way,
- but as long as elements can report both mixed we need to do this */
-
- gst_tag_list_foreach (tags, tag_flag_score, &score);
-
- if (score.meta > score.encoded) {
- GST_DEBUG ("found tags from decoder, adding them as metadata");
- priv->metadata = gst_tag_list_copy (tags);
- } else {
- GST_DEBUG ("found tags, adding them as streaminfo");
- priv->streaminfo = gst_tag_list_copy (tags);
- }
-}
-
-void
-error_callback (GObject * element, GstElement * source, GError * error,
- gchar * debug, GstMediaInfoPriv * priv)
-{
- g_print ("ERROR: %s\n", error->message);
- g_error_free (error);
-}
-
-/* helpers */
-
-/* General GError creation */
-static void
-gst_media_info_error_create (GError ** error, const gchar * message)
-{
- /* check if caller wanted an error reported */
- if (error == NULL)
- return;
-
- *error = g_error_new (GST_MEDIA_INFO_ERROR, 0, message);
- return;
-}
-
-/* GError creation when element is missing */
-static void
-gst_media_info_error_element (const gchar * element, GError ** error)
-{
- gchar *message;
-
- message = g_strdup_printf ("The %s element could not be found. "
- "This element is essential for reading. "
- "Please install the right plug-in and verify "
- "that it works by running 'gst-inspect %s'", element, element);
- gst_media_info_error_create (error, message);
- g_free (message);
- return;
-}
-
-/* initialise priv; done the first time */
-gboolean
-gmip_init (GstMediaInfoPriv * priv, GError ** error)
-{
-#define GST_MEDIA_INFO_MAKE_OR_ERROR(el, factory, name, error) \
-G_STMT_START { \
- el = gst_element_factory_make (factory, name); \
- if (!GST_IS_ELEMENT (el)) \
- { \
- gst_media_info_error_element (factory, error); \
- return FALSE; \
- } \
-} G_STMT_END
- /* create the typefind element and make sure it stays around by reffing */
- GST_MEDIA_INFO_MAKE_OR_ERROR (priv->typefind, "typefind", "typefind", error);
- gst_object_ref (GST_OBJECT (priv->typefind));
-
- /* create the fakesink element and make sure it stays around by reffing */
- GST_MEDIA_INFO_MAKE_OR_ERROR (priv->fakesink, "fakesink", "fakesink", error);
- gst_object_ref (GST_OBJECT (priv->fakesink));
- /* source element for media info reading */
- priv->source = NULL;
- priv->source_name = NULL;
- return TRUE;
-}
-
-/* called at the beginning of each use cycle */
-/* reset info to a state where it can be used to query for media info */
-void
-gmip_reset (GstMediaInfoPriv * priv)
-{
-
-#define STRING_RESET(string) \
-G_STMT_START { \
- if (string) g_free (string); \
- string = NULL; \
-} G_STMT_END
-
- STRING_RESET (priv->pipeline_desc);
- STRING_RESET (priv->location);
-#undef STRING_RESET
-
-#define CAPS_RESET(target) \
-G_STMT_START { \
- if (target) gst_caps_free (target); \
- target = NULL; \
-} G_STMT_END
- CAPS_RESET (priv->type);
- CAPS_RESET (priv->format);
-#undef CAPS_RESET
-
-#define TAGS_RESET(target) \
-G_STMT_START { \
- if (target) \
- gst_tag_list_free (target); \
- target = NULL; \
-} G_STMT_END
- TAGS_RESET (priv->metadata);
- TAGS_RESET (priv->streaminfo);
-#undef TAGS_RESET
-
- if (priv->stream) {
- gmi_stream_free (priv->stream);
- priv->stream = NULL;
- }
- priv->flags = 0;
- priv->state = GST_MEDIA_INFO_STATE_NULL;
-
- priv->error = NULL;
-}
-
-/* seek to a track and reset metadata and streaminfo structs */
-gboolean
-gmi_seek_to_track (GstMediaInfo * info, long track)
-{
- GstEvent *event;
- GstFormat track_format = 0;
- GstMediaInfoPriv *priv = info->priv;
- gboolean res;
-
- /* FIXME: consider more nicks as "track" */
- track_format = gst_format_get_by_nick ("logical_stream");
- if (track_format == 0)
- return FALSE;
- GST_DEBUG ("Track format: %d", track_format);
-
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE)
- g_warning ("Couldn't set to play");
- g_assert (GST_IS_PAD (info->priv->decoder_pad));
- event = gst_event_new_seek (track_format |
- GST_SEEK_METHOD_SET | GST_SEEK_FLAG_FLUSH, track);
- res = gst_pad_send_event (info->priv->decoder_pad, event);
- if (!res) {
- g_warning ("seek to logical track on pad %s:%s failed",
- GST_DEBUG_PAD_NAME (info->priv->decoder_pad));
- return FALSE;
- }
- /* clear structs because of the seek */
- if (priv->metadata) {
- gst_tag_list_free (priv->metadata);
- priv->metadata = NULL;
- }
- if (priv->streaminfo) {
- gst_tag_list_free (priv->streaminfo);
- priv->streaminfo = NULL;
- }
- return TRUE;
-}
-
-/* set the mime type on the media info getter */
-gboolean
-gmi_set_mime (GstMediaInfo * info, const char *mime)
-{
- gchar *desc = NULL;
- GError *error = NULL;
- GstMediaInfoPriv *priv = info->priv;
-
- /* FIXME: please figure out proper mp3 mimetypes */
- if ((strcmp (mime, "application/x-ogg") == 0) ||
- (strcmp (mime, "application/ogg") == 0))
- desc =
- g_strdup_printf
- ("%s name=source ! oggdemux ! vorbisdec name=decoder ! fakesink name=sink",
- priv->source_name);
- else if ((strcmp (mime, "audio/mpeg") == 0)
- || (strcmp (mime, "audio/x-mp3") == 0)
- || (strcmp (mime, "audio/mp3") == 0)
- || (strcmp (mime, "application/x-id3") == 0)
- || (strcmp (mime, "audio/x-id3") == 0))
- desc =
- g_strdup_printf
- ("%s name=source ! id3tag ! mad name=decoder ! audio/x-raw-int ! fakesink name=sink",
- priv->source_name);
- else if ((strcmp (mime, "application/x-flac") == 0)
- || (strcmp (mime, "audio/x-flac") == 0))
- desc =
- g_strdup_printf
- ("%s name=source ! flacdec name=decoder ! audio/x-raw-int ! fakesink name=sink",
- priv->source_name);
- else if ((strcmp (mime, "audio/wav") == 0)
- || (strcmp (mime, "audio/x-wav") == 0))
- desc =
- g_strdup_printf
- ("%s name=source ! wavparse name=decoder ! audio/x-raw-int ! fakesink name=sink",
- priv->source_name);
- else if (strcmp (mime, "audio/x-mod") == 0
- || strcmp (mime, "audio/x-s3m") == 0 || strcmp (mime, "audio/x-xm") == 0
- || strcmp (mime, "audio/x-it") == 0)
- desc =
- g_strdup_printf
- ("%s name=source ! modplug name=decoder ! audio/x-raw-int ! fakesink name=sink",
- priv->source_name);
- else
- return FALSE;
-
- GST_DEBUG ("using description %s", desc);
- priv->pipeline_desc = desc;
- priv->pipeline = gst_parse_launch (desc, &error);
- if (error) {
- g_warning ("Error parsing pipeline description: %s\n", error->message);
- g_error_free (error);
- return FALSE;
- }
- /* get a bunch of elements from the bin */
- priv->source = gst_bin_get_by_name (GST_BIN (priv->pipeline), "source");
- if (!GST_IS_ELEMENT (priv->source))
- g_error ("Could not create source element '%s'", priv->source_name);
-
- g_assert (GST_IS_ELEMENT (priv->source));
- g_object_set (G_OBJECT (priv->source), "location", priv->location, NULL);
- priv->decoder = gst_bin_get_by_name (GST_BIN (priv->pipeline), "decoder");
- g_assert (GST_IS_ELEMENT (priv->decoder));
- priv->fakesink = gst_bin_get_by_name (GST_BIN (priv->pipeline), "sink");
- g_assert (GST_IS_ELEMENT (priv->fakesink));
-
- /* get the "source " source pad */
- priv->source_pad = gst_element_get_pad (priv->source, "src");
- g_assert (GST_IS_PAD (priv->source_pad));
- /* get the "decoder" source pad */
- priv->decoder_pad = gst_element_get_pad (priv->decoder, "src");
- g_assert (GST_IS_PAD (priv->decoder_pad));
- GST_DEBUG ("decoder pad: %s:%s",
- gst_object_get_name (gst_object_get_parent (GST_OBJECT (priv->
- decoder_pad))), gst_pad_get_name (priv->decoder_pad));
-
- /* attach notify handler */
- g_signal_connect (G_OBJECT (info->priv->pipeline), "deep_notify",
- G_CALLBACK (deep_notify_callback), info->priv);
- g_signal_connect (G_OBJECT (info->priv->pipeline), "found-tag",
- G_CALLBACK (found_tag_callback), info->priv);
- g_signal_connect (G_OBJECT (info->priv->pipeline), "error",
- G_CALLBACK (error_callback), info->priv);
-
- return TRUE;
-}
-
-/* clear the decoding pipeline */
-void
-gmi_clear_decoder (GstMediaInfo * info)
-{
- if (info->priv->pipeline) {
- GST_DEBUG ("Unreffing pipeline");
- gst_object_unref (GST_OBJECT (info->priv->pipeline));
- }
- info->priv->pipeline = NULL;
-}
-
-/****
- * typefind functions
- * find the type of a file and store it in the caps of the info
- * FIXME: we might better return GstCaps instead of storing them
- * internally */
-
-/* prepare for typefind, move from NULL to TYPEFIND */
-gboolean
-gmip_find_type_pre (GstMediaInfoPriv * priv, GError ** error)
-{
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- GST_DEBUG ("gmip_find_type_pre: start");
- /* find out type */
- /* FIXME: we could move caps for typefind out of struct and
- * just use it through this function only */
-
- priv->pipeline = gst_pipeline_new ("pipeline-typefind");
- if (!GST_IS_PIPELINE (priv->pipeline)) {
- gst_media_info_error_create (error, "Internal GStreamer error.");
- return FALSE;
- }
- gst_bin_add (GST_BIN (priv->pipeline), priv->typefind);
- GST_MEDIA_INFO_MAKE_OR_ERROR (priv->source, priv->source_name, "source",
- error);
- g_object_set (G_OBJECT (priv->source), "location", priv->location, NULL);
- gst_bin_add (GST_BIN (priv->pipeline), priv->source);
- if (!gst_element_link (priv->source, priv->typefind))
- g_warning ("Couldn't connect source and typefind\n");
- g_signal_connect (G_OBJECT (priv->typefind), "have-type",
- G_CALLBACK (have_type_callback), priv);
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE) {
- g_warning ("Couldn't set to play");
- return FALSE;
- }
- GST_DEBUG ("moving to STATE_TYPEFIND\n");
- priv->state = GST_MEDIA_INFO_STATE_TYPEFIND;
- return TRUE;
-}
-
-/* finish off typefind */
-gboolean
-gmip_find_type_post (GstMediaInfoPriv * priv)
-{
- /*clear up typefind */
- gst_element_set_state (priv->pipeline, GST_STATE_READY);
- if (priv->decontainer) {
- gst_element_unlink (priv->source, priv->decontainer);
- gst_element_unlink (priv->decontainer, priv->typefind);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->decontainer);
- } else {
- gst_element_unlink (priv->source, priv->typefind);
- }
- gst_bin_remove (GST_BIN (priv->pipeline), priv->typefind);
-
- if (priv->type == NULL) {
- g_warning ("iteration ended, type not found !\n");
- return FALSE;
- }
- GST_DEBUG ("moving to STATE_STREAM\n");
- priv->state = GST_MEDIA_INFO_STATE_STREAM;
- return TRUE;
-}
-
-/* complete version */
-gboolean
-gmip_find_type (GstMediaInfoPriv * priv, GError ** error)
-{
- if (!gmip_find_type_pre (priv, error))
- return FALSE;
- GST_DEBUG ("gmip_find_type: iterating");
- while ((priv->type == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline)))
- GMI_DEBUG ("+");
- GMI_DEBUG ("\n");
- return gmip_find_type_post (priv);
-}
-
-/* FIXME: why not have these functions work on priv types ? */
-gboolean
-gmip_find_stream_pre (GstMediaInfoPriv * priv)
-{
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE) {
- g_warning ("Couldn't set to play");
- return FALSE;
- }
- priv->state = GST_MEDIA_INFO_STATE_STREAM;
- return TRUE;
-}
-
-gboolean
-gmip_find_stream_post (GstMediaInfoPriv * priv)
-{
- GstMediaInfoStream *stream = priv->stream;
- const GstFormat *formats;
- GstFormat track_format = 0;
- GstFormat format;
- gint64 value;
- gboolean res;
- glong bytes = 0;
-
-
- GST_DEBUG ("gmip_find_stream_post: start");
- /* find a format that matches the "track" concept */
- /* FIXME: this is used in vorbis, but we might have to loop when
- * more codecs have tracks */
- track_format = gst_format_get_by_nick ("logical_stream");
-
- /* get supported formats on decoder pad */
- formats = gst_pad_get_formats (priv->decoder_pad);
- while (*formats) {
- const GstFormatDefinition *definition;
-
- format = *formats;
-
- g_assert (GST_IS_PAD (priv->decoder_pad));
- definition = gst_format_get_details (*formats);
- GST_DEBUG ("trying to figure out length for format %s", definition->nick);
-
- res = gst_pad_query (priv->decoder_pad, GST_QUERY_TOTAL, &format, &value);
-
- if (res) {
- switch (format) {
- case GST_FORMAT_TIME:
- stream->length_time = value;
- GST_DEBUG (" total %s: %lld", definition->nick, value);
- break;
- case GST_FORMAT_DEFAULT:
- case GST_FORMAT_BYTES:
- break;
- default:
- /* separation is necessary because track_format doesn't resolve to
- * int */
- if (format == track_format) {
- stream->length_tracks = value;
- GST_DEBUG (" total %s: %lld", definition->nick, value);
- } else
- GST_DEBUG ("unhandled format %s", definition->nick);
- }
- } else
- GST_DEBUG ("query didn't return result for %s", definition->nick);
-
- formats++;
- }
- if (stream->length_tracks == 0)
- stream->length_tracks = 1;
-
- /* now get number of bytes from the sink pad to get the bitrate */
- format = GST_FORMAT_BYTES;
- g_assert (GST_IS_PAD (priv->source_pad));
- res = gst_pad_query (priv->source_pad, GST_QUERY_TOTAL, &format, &value);
- if (!res)
- g_warning ("Failed to query on sink pad !");
- bytes = value;
- GST_DEBUG ("bitrate calc: bytes gotten: %ld", bytes);
-
- if (bytes) {
- double seconds = (double) stream->length_time / GST_SECOND;
- double bits = bytes * 8;
-
- stream->bitrate = (long) (bits / seconds);
- }
- GST_DEBUG ("moving to STATE_METADATA\n");
- priv->state = GST_MEDIA_INFO_STATE_METADATA; /* metadata of first track */
- return TRUE;
-}
-
-/* get properties of complete physical stream
- * and return them in pre-alloced stream struct in priv->stream */
-gboolean
-gmip_find_stream (GstMediaInfoPriv * priv)
-{
- GST_DEBUG ("mip_find_stream start");
-
- gmip_find_stream_pre (priv);
- /* iterate until caps are found */
- /* FIXME: this should be done through the plugin sending some signal
- * that it is ready for queries */
- while (gst_bin_iterate (GST_BIN (priv->pipeline)) && priv->format == NULL);
- if (gst_element_set_state (priv->pipeline, GST_STATE_PAUSED)
- == GST_STATE_FAILURE)
- g_warning ("Couldn't set to paused");
-
- if (priv->format == NULL) {
- GMI_DEBUG ("gmip_find_stream: couldn't get caps !");
- return FALSE;
- }
- return gmip_find_stream_post (priv);
-}
-
-/* find metadata encoded in media and store in priv->metadata */
-gboolean
-gmip_find_track_metadata_pre (GstMediaInfoPriv * priv)
-{
- /* FIXME: this is a hack to set max allowed iterations for metadata
- * querying - we should make gst smarter by itself instead */
- priv->metadata_iters = 0;
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE) {
- g_warning ("Couldn't set to play");
- return FALSE;
- }
- return TRUE;
-}
-
-gboolean
-gmip_find_track_metadata_post (GstMediaInfoPriv * priv)
-{
- if (gst_element_set_state (priv->pipeline, GST_STATE_PAUSED)
- == GST_STATE_FAILURE)
- return FALSE;
- priv->current_track->metadata = priv->metadata;
- priv->metadata = NULL;
- return TRUE;
-}
-
-gboolean
-gmip_find_track_metadata (GstMediaInfoPriv * priv)
-{
- gmip_find_track_metadata_pre (priv);
- GST_DEBUG ("gmip_find_metadata: iterating");
- while ((priv->metadata == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline)))
- GMI_DEBUG ("+");
- GMI_DEBUG ("\n");
- gmip_find_track_metadata_post (priv);
-
- return TRUE;
-}
-
-/* find streaminfo found by decoder and store in priv->streaminfo */
-/* FIXME: this is an exact copy, so reuse this function instead */
-gboolean
-gmip_find_track_streaminfo_pre (GstMediaInfoPriv * priv)
-{
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE) {
- g_warning ("Couldn't set to play");
- return FALSE;
- }
- return TRUE;
-}
-
-gboolean
-gmip_find_track_streaminfo_post (GstMediaInfoPriv * priv)
-{
- GstFormat format, track_format;
-
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
-
- /* now add total length to this, and maybe even bitrate ? FIXME */
- track_format = gst_format_get_by_nick ("logical_stream");
- if (track_format == 0) {
- g_print ("FIXME: implement getting length of whole track\n");
- } else {
- /* which one are we at ? */
- long track_num;
- gint64 value_start, value_end;
- gboolean res;
-
- res = gst_pad_query (priv->decoder_pad, GST_QUERY_POSITION,
- &track_format, &value_start);
- if (res) {
- format = GST_FORMAT_TIME;
- track_num = value_start;
- GST_DEBUG ("we are currently at %ld", track_num);
- res = gst_pad_convert (priv->decoder_pad,
- track_format, track_num, &format, &value_start);
- res &= gst_pad_convert (priv->decoder_pad,
- track_format, track_num + 1, &format, &value_end);
- if (res) {
- /* substract to get the length */
- GST_DEBUG ("start %lld, end %lld", value_start, value_end);
- value_end -= value_start;
- /* FIXME: check units; this is in seconds */
-
- gst_tag_list_add (priv->streaminfo, GST_TAG_MERGE_REPLACE,
- GST_TAG_DURATION, (int) (value_end / 1E6), NULL);
- }
- }
- }
- priv->current_track->streaminfo = priv->streaminfo;
- priv->streaminfo = NULL;
-
- return TRUE;
-}
-
-gboolean
-gmip_find_track_streaminfo (GstMediaInfoPriv * priv)
-{
- gmip_find_track_streaminfo_pre (priv);
- GST_DEBUG ("DEBUG: gmip_find_streaminfo: iterating");
- while ((priv->streaminfo == NULL) &&
- gst_bin_iterate (GST_BIN (priv->pipeline)))
- GMI_DEBUG ("+");
- GMI_DEBUG ("\n");
- gmip_find_track_streaminfo_post (priv);
-
- return TRUE;
-}
-
-/* find format found by decoder and store in priv->format */
-gboolean
-gmip_find_track_format_pre (GstMediaInfoPriv * priv)
-{
- if (gst_element_set_state (priv->pipeline, GST_STATE_PLAYING)
- == GST_STATE_FAILURE) {
- g_warning ("Couldn't set to play");
- return FALSE;
- }
- return TRUE;
-}
-
-gboolean
-gmip_find_track_format_post (GstMediaInfoPriv * priv)
-{
- if (gst_element_set_state (priv->pipeline, GST_STATE_PAUSED)
- == GST_STATE_FAILURE)
- return FALSE;
- priv->current_track->format = priv->format;
- priv->format = NULL;
- return TRUE;
-}
-
-gboolean
-gmip_find_track_format (GstMediaInfoPriv * priv)
-{
- gmip_find_track_format_pre (priv);
- GST_DEBUG ("DEBUG: gmip_find_format: iterating");
- while ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline)))
- GMI_DEBUG ("+");
- GMI_DEBUG ("\n");
- gmip_find_track_format_post (priv);
-
- return TRUE;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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.
- */
-
-/* media-info-priv.h: private stuff */
-
-#ifndef __GST_MEDIA_INFO_PRIV_H__
-#define __GST_MEDIA_INFO_PRIV_H__
-
-#include <gst/gst.h>
-#include <glib/gprintf.h>
-
-G_BEGIN_DECLS
-
-/* debug */
-GST_DEBUG_CATEGORY_EXTERN (gst_media_info_debug);
-#define GST_CAT_DEFAULT gst_media_info_debug
-
-//#define DEBUG
-#ifdef DEBUG
-static gboolean _gmi_debug = TRUE;
-#else
-static gboolean _gmi_debug = FALSE;
-#endif
-
-#ifdef G_HAVE_ISO_VARARGS
-
-#define GMI_DEBUG(...) \
- { if (_gmi_debug) { g_print ( __VA_ARGS__ ); }}
-
-#elif defined(G_HAVE_GNUC_VARARGS)
-
-#define GMI_DEBUG(format, args...) \
- { if (_gmi_debug) { g_print ( format , ## args ); }}
-
-#else
-
-static inline void
-GMI_DEBUG (const char *format, ...)
-{
- va_list varargs;
-
- if (_gmi_debug) {
- va_start (varargs, format);
- g_vprintf ( format, varargs);
- va_end (varargs);
- }
-}
-
-#endif
-
-
-/* state machine enum; FIXME: can we move this to priv.c ? */
-typedef enum
-{
- GST_MEDIA_INFO_STATE_NULL,
- GST_MEDIA_INFO_STATE_TYPEFIND,
- GST_MEDIA_INFO_STATE_STREAM,
- GST_MEDIA_INFO_STATE_METADATA,
- GST_MEDIA_INFO_STATE_STREAMINFO,
- GST_MEDIA_INFO_STATE_FORMAT,
- GST_MEDIA_INFO_STATE_DONE
-} GstMediaInfoState;
-
-/* private structure */
-struct GstMediaInfoPriv
-{
- GstElement *typefind;
-
- GstCaps *type;
-
- GstCaps *format;
- GstTagList *metadata;
- gint metadata_iters;
- GstTagList *streaminfo;
-
- GstElement *pipeline; /* will be != NULL during collection */
- gchar *pipeline_desc; /* will be != NULL during collection */
- GstElement *fakesink; /* so we can get caps from the
- decoder sink pad */
- gchar *source_name; /* type of element used as source */
- GstElement *source;
- GstPad *source_pad; /* pad for querying encoded caps */
- GstElement *decoder;
- GstPad *decoder_pad; /* pad for querying decoded caps */
- GstElement *decontainer; /* element to typefind in containers */
-
- GstMediaInfoState state; /* current state of state machine */
- gchar *location; /* location set on the info object */
- guint16 flags; /* flags supplied for detection */
- GstMediaInfoTrack *current_track; /* track pointer under inspection */
- glong current_track_num; /* current track under inspection */
-
- GstMediaInfoStream *stream; /* total stream properties */
- char *cache; /* location of cache */
-
- GError *error; /* error for creation problems */
-};
-
-/* declarations */
-GstMediaInfoStream *
- gmi_stream_new (void);
-void gmi_stream_free (GstMediaInfoStream *stream);
-
-GstMediaInfoTrack *
- gmi_track_new (void);
-
-void gmip_reset (GstMediaInfoPriv *priv);
-gboolean gmip_init (GstMediaInfoPriv *priv, GError **error);
-
-void gmi_clear_decoder (GstMediaInfo *info);
-
-gboolean gmi_seek_to_track (GstMediaInfo *info,
- long track);
-
-gboolean gmi_set_mime (GstMediaInfo *info,
- const char *mime);
-
-void deep_notify_callback (GObject *object,
- GstObject *origin,
- GParamSpec *pspec,
- GstMediaInfoPriv *priv);
-void found_tag_callback (GObject *pipeline, GstElement *source, GstTagList *tags, GstMediaInfoPriv *priv);
-void error_callback (GObject *element, GstElement *source, GError *error, gchar *debug, GstMediaInfoPriv *priv);
-
-gboolean gmip_find_type_pre (GstMediaInfoPriv *priv, GError **error);
-gboolean gmip_find_type_post (GstMediaInfoPriv *priv);
-gboolean gmip_find_type (GstMediaInfoPriv *priv, GError **error);
-gboolean gmip_find_stream_pre (GstMediaInfoPriv *priv);
-gboolean gmip_find_stream_post (GstMediaInfoPriv *priv);
-gboolean gmip_find_stream (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_metadata_pre (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_metadata_post (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_metadata (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_streaminfo_pre (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_streaminfo_post (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_streaminfo (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_format_pre (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_format_post (GstMediaInfoPriv *priv);
-gboolean gmip_find_track_format (GstMediaInfoPriv *priv);
-
-G_END_DECLS
-
-#endif /* __GST_MEDIA_INFO_PRIV_H__ */
+++ /dev/null
-/* media-info test app */
-
-#include <gst/gst.h>
-#include <string.h>
-#include "media-info.h"
-
-static void
-print_tag (const GstTagList * list, const gchar * tag, gpointer unused)
-{
- gint i, count;
-
- count = gst_tag_list_get_tag_size (list, tag);
-
- for (i = 0; i < count; i++) {
- gchar *str;
-
- if (gst_tag_get_type (tag) == G_TYPE_STRING) {
- if (!gst_tag_list_get_string_index (list, tag, i, &str))
- g_assert_not_reached ();
- } else {
- str =
- g_strdup_value_contents (gst_tag_list_get_value_index (list, tag, i));
- }
-
- if (i == 0) {
- g_print ("%15s: %s\n", gst_tag_get_nick (tag), str);
- } else {
- g_print (" : %s\n", str);
- }
-
- g_free (str);
- }
-}
-
-static void
-info_print (GstMediaInfoStream * stream)
-{
- int i;
- GList *p;
- GstMediaInfoTrack *track;
-
- g_print ("- mime type: %s\n", stream->mime);
- g_print ("- length: %.3f seconds\n",
- (gdouble) stream->length_time / GST_SECOND);
- g_print ("- bitrate: %.3f kbps\n", stream->bitrate / 1000.0);
- g_print ("- number of tracks: %ld\n", stream->length_tracks);
- p = stream->tracks;
- if (p == NULL) {
- g_print ("- no track information, probably an error\n");
- return;
- }
- for (i = 0; i < stream->length_tracks; ++i) {
- g_print ("- track %d\n", i);
- track = (GstMediaInfoTrack *) p->data;
- g_print (" - metadata:\n");
- if (track->metadata)
- gst_tag_list_foreach (track->metadata, print_tag, NULL);
- else
- g_print (" (none found)\n");
- g_print (" - streaminfo:\n");
- gst_tag_list_foreach (track->streaminfo, print_tag, NULL);
- g_print (" - format:\n");
- g_print ("%s\n", gst_caps_to_string (track->format));
- p = p->next;
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- GstMediaInfo *info;
- GstMediaInfoStream *stream = NULL;
- GError *error = NULL;
- gint i;
-
- g_assert (argc > 1);
-
- gst_media_info_init ();
- gst_init (&argc, &argv);
-
- info = gst_media_info_new (&error);
- if (error != NULL) {
- g_print ("Error creating media-info object: %s\n", error->message);
- g_error_free (error);
- return -1;
- }
-
- g_assert (G_IS_OBJECT (info));
- if (!gst_media_info_set_source (info, "gnomevfssrc", &error)) {
- g_print ("Could not set gnomevfssrc as a source\n");
- g_print ("reason: %s\n", error->message);
- g_error_free (error);
- return -1;
- }
-
- g_print ("stream: %p, &stream: %p\n", stream, &stream);
- for (i = 1; i < argc; ++i) {
-
- /*
- stream = gst_media_info_read (info, argv[i], GST_MEDIA_INFO_ALL);
- */
- gst_media_info_read_with_idler (info, argv[i], GST_MEDIA_INFO_ALL, &error);
- while (gst_media_info_read_idler (info, &stream, &error) && stream == NULL)
- /* keep idling */
- g_print ("+");
- g_print ("\nFILE: %s\n", argv[i]);
- g_print ("stream: %p, &stream: %p\n", stream, &stream);
- if (error) {
- g_print ("Error reading media info: %s\n", error->message);
- g_error_free (error);
- }
- if (stream)
- info_print (stream);
- else
- g_print ("no media info found.\n");
- stream = NULL;
- }
-
- return 0;
-}
+++ /dev/null
-/* GStreamer media-info library
- * Copyright (C) 2003,2004 Thomas Vander Stichele <thomas@apestaart.org>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <string.h>
-#include "media-info.h"
-#include "media-info-priv.h"
-
-static void gst_media_info_class_init (GstMediaInfoClass * klass);
-static void gst_media_info_instance_init (GstMediaInfo * info);
-
-static void gst_media_info_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-
-static gboolean _media_info_inited = FALSE;
-
-/* FIXME: this is a lousy hack that needs to go */
-#define MAX_METADATA_ITERS 5
-
-/* GObject-y bits */
-
-/* signal stuff */
-enum
-{
- MEDIA_INFO_SIGNAL,
- LAST_SIGNAL
-};
-
-static guint gst_media_info_signals[LAST_SIGNAL] = { 0 };
-
-/*
- * all GError stuff
- */
-
-enum
-{
- MEDIA_INFO_ERROR_FILE
-};
-
-/* GError quark stuff */
-GQuark
-gst_media_info_error_quark (void)
-{
- static GQuark quark = 0;
-
- if (quark == 0)
- quark = g_quark_from_static_string ("gst-media-info-error-quark");
- return quark;
-}
-
-/*
- * GObject type stuff
- */
-
-enum
-{
- PROP_SOURCE
-};
-
-static GObjectClass *parent_class = NULL;
-
-GST_DEBUG_CATEGORY (gst_media_info_debug);
-
-/* initialize the media-info library */
-void
-gst_media_info_init (void)
-{
- if (_media_info_inited)
- return;
-
- /* register our debugging category */
- GST_DEBUG_CATEGORY_INIT (gst_media_info_debug, "GST_MEDIA_INFO", 0,
- "GStreamer media-info library");
- GST_DEBUG ("Initialized media-info library");
- _media_info_inited = TRUE;
-}
-
-GType
-gst_media_info_get_type (void)
-{
- static GType gst_media_info_type = 0;
-
- if (!gst_media_info_type) {
- static const GTypeInfo gst_media_info_info = {
- sizeof (GstMediaInfoClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gst_media_info_class_init,
- NULL, NULL,
- sizeof (GstMediaInfo),
- 0,
- (GInstanceInitFunc) gst_media_info_instance_init,
- NULL
- };
-
- gst_media_info_type = g_type_register_static (G_TYPE_OBJECT,
- "GstMediaInfo", &gst_media_info_info, 0);
- }
- return gst_media_info_type;
-}
-
-static void
-gst_media_info_class_init (GstMediaInfoClass * klass)
-{
- GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
- //parent_class = g_type_class_peek_parent (klass);
-
-
- /*
- object_class->finalize = gst_media_info_finalize;
- object_class->dispose = gst_media_info_dispose;
- */
-
- /*
- g_object_class->set_property = gst_media_info_set_property;
- */
- g_object_class->get_property = gst_media_info_get_property;
-
- klass->media_info_signal = NULL;
-
- gst_media_info_signals[MEDIA_INFO_SIGNAL] =
- g_signal_new ("media-info",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMediaInfoClass, media_info_signal),
- NULL, NULL, gst_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void
-gst_media_info_instance_init (GstMediaInfo * info)
-{
- GError **error;
-
- info->priv = g_new0 (GstMediaInfoPriv, 1);
- error = &info->priv->error;
-
- if (!_media_info_inited) {
- gst_media_info_init ();
- }
-
- gmip_init (info->priv, error);
- gmip_reset (info->priv);
-}
-
-/* get/set */
-static void
-gst_media_info_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstMediaInfo *info = GST_MEDIA_INFO (object);
-
- switch (prop_id) {
- case PROP_SOURCE:
- g_value_set_string (value, info->priv->source_name);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-GstMediaInfo *
-gst_media_info_new (GError ** error)
-{
- GstMediaInfo *info = g_object_new (GST_MEDIA_INFO_TYPE, NULL);
-
- if (info->priv->error) {
- if (error) {
- *error = info->priv->error;
- info->priv->error = NULL;
- } else {
- g_warning ("Error creating GstMediaInfo object.\n%s",
- info->priv->error->message);
- g_error_free (info->priv->error);
- }
- }
- return info;
-}
-
-/**
- * public methods
- */
-gboolean
-gst_media_info_set_source (GstMediaInfo * info, const char *source,
- GError ** error)
-{
- info->priv->source_name = g_strdup (source);
- return TRUE;
-}
-
-/* idler-based implementation
- * set up read on a given location
- * FIXME: maybe we should check if the info is cleared when calling this
- * function ? What happens if it gets called again on same info before
- * previous one is done ?
- */
-void
-gst_media_info_read_with_idler (GstMediaInfo * info, const char *location,
- guint16 flags, GError ** error)
-{
- GstMediaInfoPriv *priv = info->priv;
-
- gmip_reset (info->priv); /* reset all structs */
- priv->location = g_strdup (location);
- priv->flags = flags;
-}
-
-/* an idler which does the work of actually collecting all data
- * this must be called repeatedly, until streamp is set to a non-NULL value
- * returns: TRUE if it was able to idle, FALSE if there was an error
- */
-gboolean
-gst_media_info_read_idler (GstMediaInfo * info, GstMediaInfoStream ** streamp,
- GError ** error)
-{
- GstMediaInfoPriv *priv;
-
- /* if it's NULL then we're sure something went wrong higher up) */
- if (info == NULL)
- return FALSE;
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- priv = info->priv;
-
- g_assert (streamp != NULL);
- g_assert (priv);
-
- switch (priv->state) {
- case GST_MEDIA_INFO_STATE_NULL:
- /* make sure we have a source */
- if (!priv->source_name) {
- *error = g_error_new (GST_MEDIA_INFO_ERROR, 0,
- "No source set on media info.");
- return FALSE;
- }
-
- /* need to find type */
- GST_DEBUG ("idler: NULL, need to find type, priv %p", priv);
- return gmip_find_type_pre (priv, error);
-
- case GST_MEDIA_INFO_STATE_TYPEFIND:
- {
- gchar *mime;
-
- GST_LOG ("STATE_TYPEFIND");
- if ((priv->type == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) {
- GST_DEBUG ("iterating while in STATE_TYPEFIND");
- GMI_DEBUG ("?");
- return TRUE;
- }
- if (priv->type == NULL) {
- g_warning ("Couldn't find type\n");
- return FALSE;
- }
- /* do the state transition */
- GST_DEBUG ("doing find_type_post");
- gmip_find_type_post (priv);
- GST_DEBUG ("finding out mime type");
- mime =
- g_strdup (gst_structure_get_name (gst_caps_get_structure (priv->type,
- 0)));
- GST_DEBUG ("found out mime type: %s", mime);
- if (!gmi_set_mime (info, mime)) {
- /* FIXME: pop up error */
- GST_DEBUG ("no decoder pipeline found for mime %s", mime);
- return FALSE;
- }
- priv->stream = gmi_stream_new ();
- GST_DEBUG ("new stream: %p", priv->stream);
- priv->stream->mime = mime;
- priv->stream->path = priv->location;
-
- gmip_find_stream_pre (priv);
- }
- case GST_MEDIA_INFO_STATE_STREAM:
- {
- GST_LOG ("STATE_STREAM");
- if ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) {
- GMI_DEBUG ("?");
- return TRUE;
- }
- if (priv->format == NULL) {
- g_warning ("Couldn't find format\n");
- return FALSE;
- }
- /* do state transition; stream -> first track metadata */
- priv->current_track_num = 0;
- gmip_find_stream_post (priv);
- priv->current_track = gmi_track_new ();
- gmip_find_track_metadata_pre (priv);
- return TRUE;
- }
- /* these ones are repeated per track */
- case GST_MEDIA_INFO_STATE_METADATA:
- {
- if ((priv->metadata == NULL) &&
- gst_bin_iterate (GST_BIN (priv->pipeline)) &&
- priv->metadata_iters < MAX_METADATA_ITERS) {
- GMI_DEBUG ("?");
- priv->metadata_iters++;
- return TRUE;
- }
- if (priv->metadata_iters == MAX_METADATA_ITERS)
- g_print ("iterated a few times, didn't find metadata\n");
- if (priv->metadata == NULL) {
- /* this is not a permanent failure */
- GST_DEBUG ("Couldn't find metadata");
- }
- GST_DEBUG ("found metadata of track %ld", priv->current_track_num);
- if (!gmip_find_track_metadata_post (priv))
- return FALSE;
- GST_DEBUG ("METADATA: going to STREAMINFO\n");
- priv->state = GST_MEDIA_INFO_STATE_STREAMINFO;
- return gmip_find_track_streaminfo_pre (priv);
- }
- case GST_MEDIA_INFO_STATE_STREAMINFO:
- {
- if ((priv->streaminfo == NULL) &&
- gst_bin_iterate (GST_BIN (priv->pipeline))) {
- GMI_DEBUG ("?");
- return TRUE;
- }
- if (priv->streaminfo == NULL) {
- /* this is not a permanent failure */
- GST_DEBUG ("Couldn't find streaminfo");
- } else
- GST_DEBUG ("found streaminfo of track %ld", priv->current_track_num);
- if (!gmip_find_track_streaminfo_post (priv))
- return FALSE;
- priv->state = GST_MEDIA_INFO_STATE_FORMAT;
- return gmip_find_track_format_pre (priv);
- }
- case GST_MEDIA_INFO_STATE_FORMAT:
- {
- if ((priv->format == NULL) && gst_bin_iterate (GST_BIN (priv->pipeline))) {
- GMI_DEBUG ("?");
- return TRUE;
- }
- if (priv->format == NULL) {
- g_warning ("Couldn't find format\n");
- return FALSE;
- }
- GST_DEBUG ("found format of track %ld", priv->current_track_num);
- if (!gmip_find_track_format_post (priv))
- return FALSE;
- /* save the track info */
- priv->stream->tracks = g_list_append (priv->stream->tracks,
- priv->current_track);
- /* these alloc'd data types have been handed off */
- priv->current_track = NULL;
- priv->location = NULL;
- /* now see if we need to seek to a next track or not */
- priv->current_track_num++;
- if (priv->current_track_num < priv->stream->length_tracks) {
- gmi_seek_to_track (info, priv->current_track_num);
- priv->current_track = gmi_track_new ();
- if (!gmip_find_track_metadata_pre (priv)) {
- g_free (priv->current_track);
- return FALSE;
- }
- priv->state = GST_MEDIA_INFO_STATE_METADATA;
- return TRUE;
- }
- priv->state = GST_MEDIA_INFO_STATE_DONE;
- gmi_clear_decoder (info);
- GST_DEBUG ("TOTALLY DONE, setting pointer *streamp to %p", *streamp);
- *streamp = priv->stream;
- priv->stream = NULL;
- return TRUE;
- }
- case GST_MEDIA_INFO_STATE_DONE:
- return TRUE;
- default:
- g_warning ("don't know what to do\n");
- return FALSE;
- }
-}
-
-/* main function
- * read all possible info from the file pointed to by location
- * use flags to limit the type of information searched for */
-GstMediaInfoStream *
-gst_media_info_read (GstMediaInfo * info, const char *location, guint16 flags,
- GError ** error)
-{
- GstMediaInfoStream *stream = NULL;
-
- gst_media_info_read_with_idler (info, location, flags, error);
- if (*error)
- return FALSE;
- while (gst_media_info_read_idler (info, &stream, error) && stream == NULL)
- /* keep looping */ ;
- if (*error)
- return NULL;
-
- return stream;
-}
-
-
-/*
- * FIXME: reset ?
-gboolean gst_media_info_write (GstMediaInfo *media_info,
- const char *location,
- GstCaps *media_info);
- */
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_MEDIA_INFO_H__
-#define __GST_MEDIA_INFO_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef struct GstMediaInfoPriv GstMediaInfoPriv;
-typedef struct _GstMediaInfo GstMediaInfo;
-typedef struct _GstMediaInfoClass GstMediaInfoClass;
-
-struct _GstMediaInfo
-{
- GObject parent;
-
- GstMediaInfoPriv *priv;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-struct _GstMediaInfoClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*media_info_signal) (GstMediaInfo *gst_media_info);
- void (*error_signal) (GstMediaInfo *gst_media_info, GError *error, const gchar *debug);
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-/* structure for "physical" stream,
- * which can contain multiple sequential ones */
-typedef struct
-{
- gboolean seekable;
- gchar *mime;
- gchar *path;
- GstCaps *caps; /* properties of the complete bitstream */
-
- guint64 length_time;
- glong length_tracks;
- glong bitrate;
-
- GList *tracks;
-} GstMediaInfoStream;
-
-/* structure for "logical" stream or track,
- * or one of a set of sequentially muxed streams */
-typedef struct
-{
- GstTagList *metadata; /* changeable metadata or tags */
- GstTagList *streaminfo; /* codec property stuff */
- GstCaps *format; /* properties of the logical stream */
-
- guint64 length_time;
-
- GList *con_streams; /* list of concurrent streams in this
- sequential stream */
-} GstMediaInfoTrack;
-
-typedef struct
-{
- GstCaps *caps; /* properties of the muxed concurrent stream */
-} GstMediaInfoConcurrent;
-
-#define GST_MEDIA_INFO_ERROR gst_media_info_error_quark ()
-
-#define GST_MEDIA_INFO_TYPE (gst_media_info_get_type ())
-#define GST_MEDIA_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_MEDIA_INFO_TYPE, GstMediaInfo))
-#define GST_MEDIA_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_MEDIA_INFO_TYPE, GstMediaInfoClass))
-#define IS_GST_MEDIA_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_MEDIA_INFO_TYPE))
-#define IS_GST_MEDIA_INFO_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_MEDIA_INFO_TYPE))
-#define GST_MEDIA_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_MEDIA_INFO_TYPE, GstMediaInfoClass))
-
-#define GST_MEDIA_INFO_STREAM 1 << 1
-#define GST_MEDIA_INFO_MIME 1 << 2
-#define GST_MEDIA_INFO_METADATA 1 << 3
-#define GST_MEDIA_INFO_STREAMINFO 1 << 4
-#define GST_MEDIA_INFO_FORMAT 1 << 5
-#define GST_MEDIA_INFO_ALL ((1 << 6) - 1)
-
-GQuark gst_media_info_error_quark (void);
-
-void gst_media_info_init (void);
-GType gst_media_info_get_type (void);
-
-GstMediaInfo * gst_media_info_new (GError **error);
-
-gboolean gst_media_info_set_source (GstMediaInfo *info,
- const char *source,
- GError **error);
-void gst_media_info_read_with_idler (GstMediaInfo *media_info,
- const char *location,
- guint16 GST_MEDIA_INFO_FLAGS,
- GError **error);
-gboolean gst_media_info_read_idler (GstMediaInfo *media_info,
- GstMediaInfoStream **streamp,
- GError **error);
-GstMediaInfoStream *
- gst_media_info_read (GstMediaInfo *media_info,
- const char *location,
- guint16 GST_MEDIA_INFO_FLAGS,
- GError **error);
-gboolean gst_media_info_read_many (GstMediaInfo *media_info,
- GList *locations,
- guint16 GST_MEDIA_INFO_FLAGS,
- GError **error);
-GstCaps * gst_media_info_get_next (GstMediaInfo *media_info,
- GError **error);
-/*
- * FIXME: reset ?
-gboolean gst_media_info_write (GstMediaInfo *media_info,
- const char *location,
- GstCaps *media_info);
- */
-
-G_END_DECLS
-
-#endif /* __GST_MEDIA_INFO_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="media-info"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67896}"
- RootNamespace="media-info"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstmedia-info.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/media-info.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstmedia-info.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstmedia-info.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstmedia-info.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\media-info-priv.c">
- </File>
- <File
- RelativePath=".\media-info.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\media-info-priv.h">
- </File>
- <File
- RelativePath=".\media-info.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-# variables used for enum/marshal generation
-glib_enum_headers=$(mixer_headers)
-glib_enum_define=GST_MIXER
-glib_enum_prefix=gst_mixer
-
-
-libgstmixerincludedir = \
- $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/mixer
-
-mixer_headers = \
- mixer.h \
- mixeroptions.h \
- mixertrack.h
-
-built_sources = \
- mixer-marshal.c \
- mixer-enumtypes.c
-
-built_headers = \
- mixer-marshal.h \
- mixer-enumtypes.h
-
-libgstmixerinclude_HEADERS = \
- $(mixer_headers)
-
-nodist_libgstmixerinclude_HEADERS = \
- mixer-enumtypes.h
-
-noinst_LTLIBRARIES = libgstmixer.la
-
-libgstmixer_la_SOURCES = \
- mixer.c \
- mixeroptions.c \
- mixertrack.c
-
-nodist_libgstmixer_la_SOURCES = \
- $(built_sources)
-
-libgstmixer_la_CFLAGS = $(GST_CFLAGS)
-
-BUILT_SOURCES = \
- $(built_sources) \
- $(built_headers)
-
-EXTRA_DIST = mixer-marshal.list
-
-CLEANFILES = $(BUILT_SOURCES)
-
-include $(top_srcdir)/common/glib-gen.mak
+++ /dev/null
-VOID:OBJECT,BOOLEAN
-VOID:OBJECT,POINTER
-VOID:OBJECT,STRING
+++ /dev/null
-/* GStreamer Mixer
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * mixer.c: mixer design virtual class function wrappers
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mixer.h"
-#include "mixer-marshal.h"
-
-enum
-{
- SIGNAL_MUTE_TOGGLED,
- SIGNAL_RECORD_TOGGLED,
- SIGNAL_VOLUME_CHANGED,
- SIGNAL_OPTION_CHANGED,
- LAST_SIGNAL
-};
-
-static void gst_mixer_class_init (GstMixerClass * klass);
-
-static guint gst_mixer_signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_mixer_get_type (void)
-{
- static GType gst_mixer_type = 0;
-
- if (!gst_mixer_type) {
- static const GTypeInfo gst_mixer_info = {
- sizeof (GstMixerClass),
- (GBaseInitFunc) gst_mixer_class_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- gst_mixer_type = g_type_register_static (G_TYPE_INTERFACE,
- "GstMixer", &gst_mixer_info, 0);
- g_type_interface_add_prerequisite (gst_mixer_type,
- GST_TYPE_IMPLEMENTS_INTERFACE);
- }
-
- return gst_mixer_type;
-}
-
-static void
-gst_mixer_class_init (GstMixerClass * klass)
-{
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- gst_mixer_signals[SIGNAL_RECORD_TOGGLED] =
- g_signal_new ("record-toggled",
- GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerClass, record_toggled),
- NULL, NULL,
- gst_mixer_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2,
- GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN);
- gst_mixer_signals[SIGNAL_MUTE_TOGGLED] =
- g_signal_new ("mute-toggled",
- GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerClass, mute_toggled),
- NULL, NULL,
- gst_mixer_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2,
- GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN);
- gst_mixer_signals[SIGNAL_VOLUME_CHANGED] =
- g_signal_new ("volume-changed",
- GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerClass, volume_changed),
- NULL, NULL,
- gst_mixer_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2,
- GST_TYPE_MIXER_TRACK, G_TYPE_POINTER);
- gst_mixer_signals[SIGNAL_OPTION_CHANGED] =
- g_signal_new ("option-changed",
- GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerClass, option_changed),
- NULL, NULL,
- gst_mixer_marshal_VOID__OBJECT_STRING, G_TYPE_NONE, 2,
- GST_TYPE_MIXER_OPTIONS, G_TYPE_STRING);
-
- initialized = TRUE;
- }
-
- klass->mixer_type = GST_MIXER_SOFTWARE;
-
- /* default virtual functions */
- klass->list_tracks = NULL;
- klass->set_volume = NULL;
- klass->get_volume = NULL;
- klass->set_mute = NULL;
- klass->set_record = NULL;
- klass->set_option = NULL;
- klass->get_option = NULL;
-}
-
-/**
- * gst_mixer_list_tracks:
- * @mixer: the #GstMixer (a #GstElement) to get the tracks from.
- *
- * Returns a list of available tracks for this mixer/element. Note
- * that it is allowed for sink (output) elements to only provide
- * the output tracks in this list. Likewise, for sources (inputs),
- * it is allowed to only provide input elements in this list.
- *
- * Returns: A #GList consisting of zero or more #GstMixerTracks.
- */
-
-const GList *
-gst_mixer_list_tracks (GstMixer * mixer)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->list_tracks) {
- return klass->list_tracks (mixer);
- }
-
- return NULL;
-}
-
-/**
- * gst_mixer_set_volume:
- * @mixer: The #GstMixer (a #GstElement) that owns the track.
- * @track: The #GstMixerTrack to set the volume on.
- * @volumes: an array of integers (of size track->num_channels)
- * that gives the wanted volume for each channel in
- * this track.
- *
- * Sets the volume on each channel in a track. Short note about
- * naming: a track is defined as one separate stream owned by
- * the mixer/element, such as 'Line-in' or 'Microphone'. A
- * channel is said to be a mono-stream inside this track. A
- * stereo track thus contains two channels.
- */
-
-void
-gst_mixer_set_volume (GstMixer * mixer, GstMixerTrack * track, gint * volumes)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->set_volume) {
- klass->set_volume (mixer, track, volumes);
- }
-}
-
-/*
- * gst_mixer_get_volume:
- * @mixer: the #GstMixer (a #GstElement) that owns the track
- * @track: the GstMixerTrack to get the volume from.
- * @volumes: a pre-allocated array of integers (of size
- * track->num_channels) to store the current volume
- * of each channel in the given track in.
- *
- * Get the current volume(s) on the given track.
- */
-
-void
-gst_mixer_get_volume (GstMixer * mixer, GstMixerTrack * track, gint * volumes)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->get_volume) {
- klass->get_volume (mixer, track, volumes);
- } else {
- gint i;
-
- for (i = 0; i < track->num_channels; i++) {
- volumes[i] = 0;
- }
- }
-}
-
-/**
- * gst_mixer_set_mute:
- * @mixer: the #GstMixer (a #GstElement) that owns the track.
- * @track: the #GstMixerTrack to operate on.
- * @mute: a boolean value indicating whether to turn on or off
- * muting.
- *
- * Mutes or unmutes the given channel. To find out whether a
- * track is currently muted, use GST_MIXER_TRACK_HAS_FLAG ().
- */
-
-void
-gst_mixer_set_mute (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->set_mute) {
- klass->set_mute (mixer, track, mute);
- }
-}
-
-/**
- * gst_mixer_set_record:
- * @mixer: The #GstMixer (a #GstElement) that owns the track.
- * @track: the #GstMixerTrack to operate on.
- * @record: a boolean value that indicates whether to turn on
- * or off recording.
- *
- * Enables or disables recording on the given track. Note that
- * this is only possible on input tracks, not on output tracks
- * (see GST_MIXER_TRACK_HAS_FLAG () and the GST_MIXER_TRACK_INPUT
- * flag).
- */
-
-void
-gst_mixer_set_record (GstMixer * mixer, GstMixerTrack * track, gboolean record)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->set_record) {
- klass->set_record (mixer, track, record);
- }
-}
-
-/**
- * gst_mixer_set_option:
- * @mixer: The #GstMixer (a #GstElement) that owns the optionlist.
- * @opts: The #GstMixerOptions that we operate on.
- * @value: The requested new option value.
- *
- * Sets a name/value option in the mixer to the requested value.
- */
-
-void
-gst_mixer_set_option (GstMixer * mixer, GstMixerOptions * opts, gchar * value)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->set_option) {
- klass->set_option (mixer, opts, value);
- }
-}
-
-/**
- * gst_mixer_get_option:
- * @mixer: The #GstMixer (a #GstElement) that owns the optionlist.
- * @opts: The #GstMixerOptions that we operate on.
- *
- * Get the current value of a name/value option in the mixer.
- *
- * Returns: current value of the name/value option.
- */
-
-const gchar *
-gst_mixer_get_option (GstMixer * mixer, GstMixerOptions * opts)
-{
- GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
-
- if (klass->get_option) {
- return klass->get_option (mixer, opts);
- }
-
- return NULL;
-}
-
-void
-gst_mixer_mute_toggled (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
-{
- g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[SIGNAL_MUTE_TOGGLED], 0, track, mute);
-
- g_signal_emit_by_name (G_OBJECT (track), "mute_toggled", mute);
-}
-
-void
-gst_mixer_record_toggled (GstMixer * mixer,
- GstMixerTrack * track, gboolean record)
-{
- g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[SIGNAL_RECORD_TOGGLED], 0, track, record);
-
- g_signal_emit_by_name (G_OBJECT (track), "record_toggled", record);
-}
-
-void
-gst_mixer_volume_changed (GstMixer * mixer,
- GstMixerTrack * track, gint * volumes)
-{
- g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[SIGNAL_VOLUME_CHANGED], 0, track, volumes);
-
- g_signal_emit_by_name (G_OBJECT (track), "volume_changed", volumes);
-}
-
-void
-gst_mixer_option_changed (GstMixer * mixer,
- GstMixerOptions * opts, gchar * value)
-{
- g_signal_emit (G_OBJECT (mixer),
- gst_mixer_signals[SIGNAL_OPTION_CHANGED], 0, opts, value);
-
- g_signal_emit_by_name (G_OBJECT (opts), "value_changed", value);
-}
+++ /dev/null
-/* GStreamer Mixer
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * mixer.h: mixer interface design
- *
- * 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_MIXER_H__
-#define __GST_MIXER_H__
-
-#include <gst/gst.h>
-#include <gst/mixer/mixeroptions.h>
-#include <gst/mixer/mixertrack.h>
-#include <gst/mixer/mixer-enumtypes.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MIXER \
- (gst_mixer_get_type ())
-#define GST_MIXER(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER, GstMixer))
-#define GST_MIXER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER, GstMixerClass))
-#define GST_IS_MIXER(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER))
-#define GST_IS_MIXER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER))
-#define GST_MIXER_GET_CLASS(inst) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_MIXER, GstMixerClass))
-
-#define GST_MIXER_TYPE(klass) (klass->mixer_type)
-
-typedef struct _GstMixer GstMixer;
-typedef struct _GstMixerClass GstMixerClass;
-
-typedef enum
-{
- GST_MIXER_HARDWARE,
- GST_MIXER_SOFTWARE
-} GstMixerType;
-
-struct _GstMixerClass {
- GTypeInterface klass;
-
- GstMixerType mixer_type;
-
- /* virtual functions */
- const GList * (* list_tracks) (GstMixer *mixer);
-
- void (* set_volume) (GstMixer *mixer,
- GstMixerTrack *track,
- gint *volumes);
- void (* get_volume) (GstMixer *mixer,
- GstMixerTrack *track,
- gint *volumes);
-
- void (* set_mute) (GstMixer *mixer,
- GstMixerTrack *track,
- gboolean mute);
- void (* set_record) (GstMixer *mixer,
- GstMixerTrack *track,
- gboolean record);
-
- /* signals */
- void (* mute_toggled) (GstMixer *mixer,
- GstMixerTrack *channel,
- gboolean mute);
- void (* record_toggled) (GstMixer *mixer,
- GstMixerTrack *channel,
- gboolean record);
- void (* volume_changed) (GstMixer *mixer,
- GstMixerTrack *channel,
- gint *volumes);
-
- /* use padding */
- void (* set_option) (GstMixer *mixer,
- GstMixerOptions *opts,
- gchar *value);
- const gchar * (* get_option) (GstMixer *mixer,
- GstMixerOptions *opts);
-
- void (* option_changed) (GstMixer *mixer,
- GstMixerOptions *opts,
- gchar *option);
-
- gpointer _gst_reserved[GST_PADDING-3];
-};
-
-GType gst_mixer_get_type (void);
-
-/* virtual class function wrappers */
-const GList * gst_mixer_list_tracks (GstMixer *mixer);
-void gst_mixer_set_volume (GstMixer *mixer,
- GstMixerTrack *track,
- gint *volumes);
-void gst_mixer_get_volume (GstMixer *mixer,
- GstMixerTrack *track,
- gint *volumes);
-void gst_mixer_set_mute (GstMixer *mixer,
- GstMixerTrack *track,
- gboolean mute);
-void gst_mixer_set_record (GstMixer *mixer,
- GstMixerTrack *track,
- gboolean record);
-void gst_mixer_set_option (GstMixer *mixer,
- GstMixerOptions *opts,
- gchar *value);
-const gchar * gst_mixer_get_option (GstMixer *mixer,
- GstMixerOptions *opts);
-
-/* trigger signals */
-void gst_mixer_mute_toggled (GstMixer *mixer,
- GstMixerTrack *track,
- gboolean mute);
-void gst_mixer_record_toggled (GstMixer *mixer,
- GstMixerTrack *track,
- gboolean record);
-void gst_mixer_volume_changed (GstMixer *mixer,
- GstMixerTrack *track,
- gint *volumes);
-void gst_mixer_option_changed (GstMixer *mixer,
- GstMixerOptions *opts,
- gchar *value);
-
-G_END_DECLS
-
-#endif /* __GST_MIXER_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="mixer"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67897}"
- RootNamespace="mixer"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstmixer.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="mixer.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/mixer.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstmixer.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstmixer.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="mixer.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstmixer.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\mixer.c">
- </File>
- <File
- RelativePath=".\mixeroptions.c">
- </File>
- <File
- RelativePath=".\mixertrack.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\mixer.h">
- </File>
- <File
- RelativePath=".\mixeroptions.h">
- </File>
- <File
- RelativePath=".\mixertrack.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/* GStreamer Mixer
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * mixeroptions.c: mixer track options object design
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mixeroptions.h"
-
-enum
-{
- /* FILL ME */
- SIGNAL_OPTION_CHANGED,
- LAST_SIGNAL
-};
-
-static void gst_mixer_options_class_init (GstMixerOptionsClass * klass);
-static void gst_mixer_options_init (GstMixerOptions * mixer);
-static void gst_mixer_options_dispose (GObject * object);
-
-static GObjectClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_mixer_options_get_type (void)
-{
- static GType gst_mixer_options_type = 0;
-
- if (!gst_mixer_options_type) {
- static const GTypeInfo mixer_options_info = {
- sizeof (GstMixerOptionsClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_mixer_options_class_init,
- NULL,
- NULL,
- sizeof (GstMixerOptions),
- 0,
- (GInstanceInitFunc) gst_mixer_options_init,
- NULL
- };
-
- gst_mixer_options_type =
- g_type_register_static (GST_TYPE_MIXER_TRACK,
- "GstMixerOptions", &mixer_options_info, 0);
- }
-
- return gst_mixer_options_type;
-}
-
-static void
-gst_mixer_options_class_init (GstMixerOptionsClass * klass)
-{
- GObjectClass *object_klass = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (GST_TYPE_MIXER_TRACK);
-
- signals[SIGNAL_OPTION_CHANGED] =
- g_signal_new ("option_changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerOptionsClass, option_changed),
- NULL, NULL, g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1, G_TYPE_STRING);
-
- object_klass->dispose = gst_mixer_options_dispose;
-}
-
-static void
-gst_mixer_options_init (GstMixerOptions * mixer_options)
-{
- mixer_options->values = NULL;
-}
-
-/**
- * gst_mixer_options_get_values:
- * @mixer_optnios: The #GstMixerOptions item that owns the values.
- *
- * Get the values for the mixer option.
- *
- * Returns: A list of all the possible values for the mixer option.
- */
-
-GList *
-gst_mixer_options_get_values (GstMixerOptions * mixer_options)
-{
- if (!mixer_options->values)
- return NULL;
-
- return (GList *) mixer_options->values;
-}
-
-
-static void
-gst_mixer_options_dispose (GObject * object)
-{
- GstMixerOptions *opts = GST_MIXER_OPTIONS (object);
-
- g_list_foreach (opts->values, (GFunc) g_free, NULL);
- g_list_free (opts->values);
- opts->values = NULL;
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
+++ /dev/null
-/* GStreamer Mixer
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * mixeroptions.h: mixer track options object
- * This should be a subclass of MixerItem, along with MixerOptions,
- * but that's not possible because of API/ABI in 0.8.x. FIXME.
- *
- * 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_MIXER_OPTIONS_H__
-#define __GST_MIXER_OPTIONS_H__
-
-#include <gst/gst.h>
-#include <gst/mixer/mixertrack.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MIXER_OPTIONS \
- (gst_mixer_options_get_type ())
-#define GST_MIXER_OPTIONS(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER_OPTIONS, \
- GstMixerOptions))
-#define GST_MIXER_OPTIONS_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER_OPTIONS, \
- GstMixerOptionsClass))
-#define GST_IS_MIXER_OPTIONS(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER_OPTIONS))
-#define GST_IS_MIXER_OPTIONS_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER_OPTIONS))
-
-typedef struct _GstMixerOptions GstMixerOptions;
-typedef struct _GstMixerOptionsClass GstMixerOptionsClass;
-
-struct _GstMixerOptions {
- GstMixerTrack parent;
-
- /* list of strings */
- GList *values;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-struct _GstMixerOptionsClass {
- GstMixerTrackClass parent;
-
- /* signals */
- void (* option_changed) (GstMixerOptions *opts,
- gchar *value);
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-GType gst_mixer_options_get_type (void);
-
-GList * gst_mixer_options_get_values (GstMixerOptions *mixer_options);
-
-G_END_DECLS
-
-#endif /* __GST_MIXER_OPTIONS_H__ */
+++ /dev/null
-/* GStreamer Mixer
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * mixertrack.c: mixer track object design
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "mixertrack.h"
-
-enum
-{
- /* FILL ME */
- SIGNAL_VOLUME_CHANGED,
- SIGNAL_RECORD_TOGGLED,
- SIGNAL_MUTE_TOGGLED,
- LAST_SIGNAL
-};
-
-enum
-{
- ARG_0,
- ARG_LABEL,
- ARG_MIN_VOLUME,
- ARG_MAX_VOLUME,
- ARG_FLAGS,
- ARG_NUM_CHANNELS
-};
-
-static void gst_mixer_track_class_init (GstMixerTrackClass * klass);
-static void gst_mixer_track_init (GstMixerTrack * mixer);
-static void gst_mixer_track_dispose (GObject * object);
-
-static void gst_mixer_track_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-static GObjectClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_mixer_track_get_type (void)
-{
- static GType gst_mixer_track_type = 0;
-
- if (!gst_mixer_track_type) {
- static const GTypeInfo mixer_track_info = {
- sizeof (GstMixerTrackClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_mixer_track_class_init,
- NULL,
- NULL,
- sizeof (GstMixerTrack),
- 0,
- (GInstanceInitFunc) gst_mixer_track_init,
- NULL
- };
-
- gst_mixer_track_type =
- g_type_register_static (G_TYPE_OBJECT,
- "GstMixerTrack", &mixer_track_info, 0);
- }
-
- return gst_mixer_track_type;
-}
-
-static void
-gst_mixer_track_class_init (GstMixerTrackClass * klass)
-{
- GObjectClass *object_klass = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
-
- object_klass->get_property = gst_mixer_track_get_property;
-
- g_object_class_install_property (object_klass, ARG_LABEL,
- g_param_spec_string ("label", "Track label",
- "The label assigned to the track", NULL, G_PARAM_READABLE));
-
- g_object_class_install_property (object_klass, ARG_MIN_VOLUME,
- g_param_spec_int ("min_volume", "Minimum volume level",
- "The minimum possible volume level", G_MININT, G_MAXINT,
- 0, G_PARAM_READABLE));
-
- g_object_class_install_property (object_klass, ARG_MAX_VOLUME,
- g_param_spec_int ("max_volume", "Maximum volume level",
- "The maximum possible volume level", G_MININT, G_MAXINT,
- 0, G_PARAM_READABLE));
-
- g_object_class_install_property (object_klass, ARG_FLAGS,
- g_param_spec_uint ("flags", "Flags",
- "Flags indicating the type of mixer track",
- 0, G_MAXUINT, 0, G_PARAM_READABLE));
-
- g_object_class_install_property (object_klass, ARG_NUM_CHANNELS,
- g_param_spec_int ("num_channels", "Number of channels",
- "The number of channels contained within the track",
- 0, G_MAXINT, 0, G_PARAM_READABLE));
-
- signals[SIGNAL_RECORD_TOGGLED] =
- g_signal_new ("record_toggled", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerTrackClass,
- record_toggled),
- NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
- signals[SIGNAL_MUTE_TOGGLED] =
- g_signal_new ("mute_toggled", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerTrackClass,
- mute_toggled),
- NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
- signals[SIGNAL_VOLUME_CHANGED] =
- g_signal_new ("volume_changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstMixerTrackClass,
- volume_changed),
- NULL, NULL, g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- object_klass->dispose = gst_mixer_track_dispose;
-}
-
-static void
-gst_mixer_track_init (GstMixerTrack * mixer_track)
-{
- mixer_track->label = NULL;
- mixer_track->min_volume = mixer_track->max_volume = 0;
- mixer_track->flags = 0;
- mixer_track->num_channels = 0;
-}
-
-static void
-gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
- GParamSpec * pspec)
-{
- GstMixerTrack *mixer_track;
-
- mixer_track = GST_MIXER_TRACK (object);
-
- switch (prop_id) {
- case ARG_LABEL:
- g_value_set_string (value, mixer_track->label);
- break;
- case ARG_MIN_VOLUME:
- g_value_set_int (value, mixer_track->min_volume);
- break;
- case ARG_MAX_VOLUME:
- g_value_set_int (value, mixer_track->max_volume);
- break;
- case ARG_FLAGS:
- g_value_set_uint (value, (guint32) mixer_track->flags);
- break;
- case ARG_NUM_CHANNELS:
- g_value_set_int (value, mixer_track->num_channels);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_mixer_track_dispose (GObject * object)
-{
- GstMixerTrack *channel = GST_MIXER_TRACK (object);
-
- if (channel->label) {
- g_free (channel->label);
- channel->label = NULL;
- }
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
+++ /dev/null
-/* GStreamer Mixer
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * mixertrack.h: mixer track object
- *
- * 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_MIXER_TRACK_H__
-#define __GST_MIXER_TRACK_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MIXER_TRACK \
- (gst_mixer_track_get_type ())
-#define GST_MIXER_TRACK(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER_TRACK, \
- GstMixerTrack))
-#define GST_MIXER_TRACK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER_TRACK, \
- GstMixerTrackClass))
-#define GST_IS_MIXER_TRACK(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER_TRACK))
-#define GST_IS_MIXER_TRACK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER_TRACK))
-
-/*
- * Naming:
- *
- * A track is a single input/output stream (e.g. line-in,
- * microphone, etc.). Channels are then single streams
- * within a track. A mono stream has one channel, a stereo
- * stream has two, etc.
- *
- * Input tracks can have 'recording' enabled, which means
- * that any input will be hearable into the speakers that
- * are attached to the output. Mute is obvious. A track
- * flagged as master is the master volume track on this
- * mixer, which means that setting this track will change
- * the hearable volume on any output.
- */
-
-typedef enum {
- GST_MIXER_TRACK_INPUT = (1<<0),
- GST_MIXER_TRACK_OUTPUT = (1<<1),
- GST_MIXER_TRACK_MUTE = (1<<2),
- GST_MIXER_TRACK_RECORD = (1<<3),
- GST_MIXER_TRACK_MASTER = (1<<4),
- GST_MIXER_TRACK_SOFTWARE = (1<<5)
-} GstMixerTrackFlags;
-
-#define GST_MIXER_TRACK_HAS_FLAG(channel, flag) \
- ((channel)->flags & flag)
-
-typedef struct _GstMixerTrack GstMixerTrack;
-typedef struct _GstMixerTrackClass GstMixerTrackClass;
-
-struct _GstMixerTrack {
- GObject parent;
-
- gchar *label;
- /* FIXME: flags should be guint32. Change in 0.9 */
- GstMixerTrackFlags flags;
- gint num_channels,
- min_volume,
- max_volume;
-};
-
-struct _GstMixerTrackClass {
- GObjectClass parent;
-
- /* signals */
- void (* mute_toggled) (GstMixerTrack *channel,
- gboolean mute);
- void (* record_toggled) (GstMixerTrack *channel,
- gboolean record);
- void (* volume_changed) (GstMixerTrack *channel,
- gint *volumes);
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-GType gst_mixer_track_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_MIXER_TRACK_H__ */
+++ /dev/null
-noinst_LTLIBRARIES = libgstnavigation.la
-
-libgstnavigation_la_SOURCES = navigation.c
-
-libgstnavigationincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/navigation
-libgstnavigationinclude_HEADERS = navigation.h
-
-libgstnavigation_la_CFLAGS = $(GST_CFLAGS)
+++ /dev/null
-/* GStreamer Navigation
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * navigation.c: navigation design virtual class function wrappers
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/navigation/navigation.h>
-
-static void gst_navigation_class_init (GstNavigationInterface * iface);
-
-GType
-gst_navigation_get_type (void)
-{
- static GType gst_navigation_type = 0;
-
- if (!gst_navigation_type) {
- static const GTypeInfo gst_navigation_info = {
- sizeof (GstNavigationInterface),
- (GBaseInitFunc) gst_navigation_class_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- gst_navigation_type = g_type_register_static (G_TYPE_INTERFACE,
- "GstNavigation", &gst_navigation_info, 0);
- }
-
- return gst_navigation_type;
-}
-
-static void
-gst_navigation_class_init (GstNavigationInterface * iface)
-{
- /* default virtual functions */
- iface->send_event = NULL;
-}
-
-/* The interface implementer should make sure that the object can handle
- * the event. */
-void
-gst_navigation_send_event (GstNavigation * navigation, GstStructure * structure)
-{
- GstNavigationInterface *iface = GST_NAVIGATION_GET_IFACE (navigation);
-
- if (iface->send_event) {
- iface->send_event (navigation, structure);
- }
-}
-
-void
-gst_navigation_send_key_event (GstNavigation * navigation, const char *event,
- const char *key)
-{
- gst_navigation_send_event (navigation,
- gst_structure_new ("application/x-gst-navigation", "event", G_TYPE_STRING,
- event, "key", G_TYPE_STRING, key, NULL));
-}
-
-void
-gst_navigation_send_mouse_event (GstNavigation * navigation, const char *event,
- int button, double x, double y)
-{
- gst_navigation_send_event (navigation,
- gst_structure_new ("application/x-gst-navigation", "event", G_TYPE_STRING,
- event, "button", G_TYPE_INT, button, "pointer_x", G_TYPE_DOUBLE, x,
- "pointer_y", G_TYPE_DOUBLE, y, NULL));
-}
+++ /dev/null
-/* GStreamer Navigation
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2003 David A. Schleef <ds@schleef.org>
- *
- * navigation.h: navigation interface design
- *
- * 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_NAVIGATION_H__
-#define __GST_NAVIGATION_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_NAVIGATION \
- (gst_navigation_get_type ())
-#define GST_NAVIGATION(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NAVIGATION, GstNavigation))
-#define GST_IS_NAVIGATION(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NAVIGATION))
-#define GST_NAVIGATION_GET_IFACE(obj) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_NAVIGATION, GstNavigationInterface))
-
-typedef struct _GstNavigation GstNavigation;
-
-typedef struct _GstNavigationInterface {
- GTypeInterface g_iface;
-
- /* virtual functions */
- void (*send_event) (GstNavigation *navigation, GstStructure *structure);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstNavigationInterface;
-
-GType gst_navigation_get_type (void);
-
-/* virtual class function wrappers */
-void gst_navigation_send_event (GstNavigation *navigation, GstStructure *structure);
-
-void gst_navigation_send_key_event (GstNavigation *navigation,
- const char *event, const char *key);
-void gst_navigation_send_mouse_event (GstNavigation *navigation,
- const char *event, int button, double x, double y);
-
-G_END_DECLS
-
-#endif /* __GST_NAVIGATION_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="navigation"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67898}"
- RootNamespace="navigation"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstnavigation.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/navigation.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstnavigation.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstnavigation.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstnavigation.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\navigation.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\navigation.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-# variables used for enum generation
-glib_enum_headers=$(play_headers)
-glib_enum_define=GST_PLAY
-glib_enum_prefix=gst_play
-
-librarydir = $(libdir)
-
-play_headers = \
- play.h
-
-built_headers = \
- play-enumtypes.h
-
-library_LTLIBRARIES = libgstplay-@GST_MAJORMINOR@.la
-
-libgstplay_@GST_MAJORMINOR@_la_SOURCES = play.c
-nodist_libgstplay_@GST_MAJORMINOR@_la_SOURCES = play-enumtypes.c
-
-libgstplay_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/play
-libgstplay_@GST_MAJORMINOR@include_HEADERS = $(play_headers)
-nodist_libgstplay_@GST_MAJORMINOR@include_HEADERS = $(built_headers)
-
-libgstplay_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_CFLAGS)
-libgstplay_@GST_MAJORMINOR@_la_LIBADD = \
- $(GST_LIBS) $(GST_PLUGINS_LIBS) \
- $(GST_CONTROL_LIBS) \
- $(top_builddir)/gst-libs/gst/libgstinterfaces-$(GST_MAJORMINOR).la
-libgstplay_@GST_MAJORMINOR@_la_LDFLAGS = \
- -version-info @GST_PLUGINS_LIBVERSION@
-
-BUILT_SOURCES = \
- play-enumtypes.c \
- $(built_headers)
-
-CLEANFILES = $(BUILT_SOURCES)
-
-include $(top_srcdir)/common/glib-gen.mak
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <unistd.h>
-#include <gst/gst.h>
-#include <gst/gst-i18n-plugin.h>
-
-#include "play.h"
-
-#define TICK_INTERVAL_MSEC 200
-
-GST_DEBUG_CATEGORY_STATIC (play_debug);
-#define GST_CAT_DEFAULT play_debug
-
-enum
-{
- TIME_TICK,
- STREAM_LENGTH,
- HAVE_VIDEO_SIZE,
- LAST_SIGNAL
-};
-
-struct _GstPlayPrivate
-{
- /* progress indicators */
- guint64 time_nanos;
- guint64 length_nanos;
- gint get_length_attempt;
- guint tick_id;
-
- /* playbin object */
- GstElement *playbin;
-
- /* visualization */
- gboolean enable_vis;
- GstElement *vis_element;
-
- /* location */
- char *location;
-};
-
-static guint gst_play_signals[LAST_SIGNAL] = { 0 };
-
-static GstPipelineClass *parent_class = NULL;
-
-/* ======================================================= */
-/* */
-/* Private Methods */
-/* */
-/* ======================================================= */
-
-static void
-caps_set (GstPad * pad, GParamSpec * pspec, GstPlay * play)
-{
- const GstCaps *caps = GST_PAD_CAPS (pad);
- GstStructure *s = gst_caps_get_structure (caps, 0);
-
- if (s) {
- const GValue *par;
- gint w, h;
-
- /* get effective size */
- gst_structure_get_int (s, "width", &w);
- gst_structure_get_int (s, "height", &h);
- if ((par = gst_structure_get_value (s, "pixel-aspect-ratio"))) {
- gint num = gst_value_get_fraction_numerator (par),
- den = gst_value_get_fraction_denominator (par);
-
- if (num > den)
- w *= (gfloat) num / den;
- else
- h *= (gfloat) den / num;
- }
-
- g_signal_emit (play, gst_play_signals[HAVE_VIDEO_SIZE], 0, w, h);
- g_signal_handlers_disconnect_by_func (pad, caps_set, play);
- }
-}
-
-static void
-setup_size (GstPlay * play)
-{
- const GList *streaminfo = NULL;
- GstPad *pad = NULL;
-
- g_object_get (G_OBJECT (play->priv->playbin),
- "stream-info", &streaminfo, NULL);
-
- for (; streaminfo != NULL; streaminfo = streaminfo->next) {
- GObject *info = streaminfo->data;
- gint type;
- GParamSpec *pspec;
- GEnumValue *val;
-
- g_object_get (info, "type", &type, NULL);
- pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (info), "type");
- val = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, type);
-
- if (g_strrstr (val->value_name, "VIDEO")) {
- g_object_get (info, "object", &pad, NULL);
- pad = (GstPad *) GST_PAD_REALIZE (pad);
- break;
- }
- }
-
- if (pad) {
- /* handle explicit caps as well - they're set later */
- if (GST_PAD_CAPS (pad))
- caps_set (pad, NULL, play);
- else
- g_signal_connect (pad, "notify::caps", G_CALLBACK (caps_set), play);
- }
-}
-
-static gboolean
-gst_play_tick_callback (GstPlay * play)
-{
- GstFormat fmt = GST_FORMAT_TIME;
- gint64 value;
-
- /* check length/pos of stream */
- if (!GST_CLOCK_TIME_IS_VALID (play->priv->length_nanos) &&
- play->priv->get_length_attempt < 16) {
- if (gst_element_query (GST_ELEMENT (play->priv->playbin),
- GST_QUERY_TOTAL, &fmt, &value)) {
- play->priv->length_nanos = value;
- g_signal_emit (G_OBJECT (play), gst_play_signals[STREAM_LENGTH],
- 0, play->priv->length_nanos);
- }
- play->priv->get_length_attempt++;
- }
- if (gst_element_query (GST_ELEMENT (play->priv->playbin),
- GST_QUERY_POSITION, &fmt, &value)) {
- play->priv->time_nanos = value;
- g_signal_emit (G_OBJECT (play), gst_play_signals[TIME_TICK],
- 0, play->priv->time_nanos);
- }
-
- return TRUE;
-}
-
-/*
- * Virtual function.
- */
-
-static void
-gst_play_change_state (GstElement * element,
- GstElementState old, GstElementState new, gpointer data)
-{
- GstPlay *play = GST_PLAY (data);
- gint t = (old << 8) | new;
-
- /* now set up tickers */
- switch (t) {
- case GST_STATE_PAUSED_TO_PLAYING:
- play->priv->tick_id = g_timeout_add (TICK_INTERVAL_MSEC,
- (GSourceFunc) gst_play_tick_callback, play);
- break;
- case GST_STATE_PLAYING_TO_PAUSED:
- if (play->priv->tick_id != 0) {
- g_source_remove (play->priv->tick_id);
- play->priv->tick_id = 0;
- }
- break;
- case GST_STATE_PAUSED_TO_READY:
- play->priv->length_nanos = GST_CLOCK_TIME_NONE;
- play->priv->time_nanos = GST_CLOCK_TIME_NONE;
- play->priv->get_length_attempt = 0;
- break;
- case GST_STATE_READY_TO_PAUSED:
- setup_size (play);
- break;
- default:
- break;
- }
-}
-
-/* =========================================== */
-/* */
-/* Init & Dispose & Class init */
-/* */
-/* =========================================== */
-
-static void
-gst_play_dispose (GObject * object)
-{
- GstPlay *play = GST_PLAY (object);
-
- /* reset */
- gst_element_set_state (GST_ELEMENT (play), GST_STATE_NULL);
-
- /* no vis */
- if (play->priv->vis_element) {
- gst_object_unref (GST_OBJECT (play->priv->vis_element));
- play->priv->vis_element = NULL;
- }
-
- g_free (play->priv->location);
- play->priv->location = NULL;
-
- /* parent will clean up the rest */
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-gst_play_init (GstPlay * play)
-{
- play->priv = g_new0 (GstPlayPrivate, 1);
-
- /* default */
- play->priv->length_nanos = GST_CLOCK_TIME_NONE;
- play->priv->time_nanos = GST_CLOCK_TIME_NONE;
- play->priv->tick_id = 0;
- play->priv->get_length_attempt = 0;
-
- play->priv->enable_vis = FALSE;
- play->priv->vis_element = NULL;
-
- play->priv->location = NULL;
-
- /* make playbin */
- play->priv->playbin = gst_element_factory_make ("playbin", "player");
- if (play->priv->playbin) {
- gst_bin_add (GST_BIN (play), play->priv->playbin);
- g_signal_connect (play->priv->playbin, "state-change",
- G_CALLBACK (gst_play_change_state), play);
- }
-}
-
-static void
-gst_play_class_init (GstPlayClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref (GST_TYPE_PIPELINE);
-
- gobject_class->dispose = gst_play_dispose;
-
- gst_play_signals[TIME_TICK] =
- g_signal_new ("time-tick", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GstPlayClass, time_tick), NULL, NULL,
- gst_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
- gst_play_signals[STREAM_LENGTH] =
- g_signal_new ("stream-length", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GstPlayClass, stream_length), NULL, NULL,
- gst_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
- gst_play_signals[HAVE_VIDEO_SIZE] =
- g_signal_new ("have-video-size", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GstPlayClass, have_video_size), NULL, NULL,
- gst_marshal_VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- GST_DEBUG_CATEGORY_INIT (play_debug, "GST_PLAY", 0, "GStreamer Play library");
-
- GST_DEBUG ("Play class initialized");
-}
-
-/* ======================================================= */
-/* */
-/* Public Methods */
-/* */
-/* ======================================================= */
-
-/**
- * gst_play_set_location:
- * @play: a #GstPlay.
- * @location: a const #char* indicating location to play
- *
- * Set location of @play to @location.
- *
- * Returns: TRUE if location was set successfully.
- */
-
-gboolean
-gst_play_set_location (GstPlay * play, const char *location)
-{
- char *uri;
-
- g_return_val_if_fail (play != NULL, FALSE);
- g_return_val_if_fail (GST_IS_PLAY (play), FALSE);
- g_return_val_if_fail (location != NULL, FALSE);
-
- /* cache */
- if (play->priv->location)
- g_free (play->priv->location);
- play->priv->location = g_strdup (location);
-
- /* get file */
- gst_element_set_state (play->priv->playbin, GST_STATE_READY);
- if (strchr (location, ':'))
- uri = g_strdup (location);
- else if (location[0] == '/')
- uri = g_strdup_printf ("file://%s", location);
- else {
- char cwd[256];
-
- getcwd (cwd, 255);
- uri = g_strdup_printf ("file://%s/%s", cwd, location);
- }
- g_object_set (play->priv->playbin, "uri", uri, NULL);
- g_free (uri);
-
- /* open */
- if (gst_element_set_state (play->priv->playbin,
- GST_STATE_PAUSED) != GST_STATE_SUCCESS) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- * gst_play_get_location:
- * @play: a #GstPlay.
- *
- * Get current location of @play.
- *
- * Returns: a #char* pointer to current location.
- */
-
-char *
-gst_play_get_location (GstPlay * play)
-{
- g_return_val_if_fail (play != NULL, NULL);
- g_return_val_if_fail (GST_IS_PLAY (play), NULL);
-
- return g_strdup (play->priv->location);
-}
-
-/**
- * gst_play_seek_to_time:
- * @play: a #GstPlay.
- * @time_nanos: a #gint64 indicating a time position.
- *
- * Performs a seek on @play until @time_nanos.
- */
-
-/*
- * FIXME: use GstClockTime for 0.9
- */
-
-gboolean
-gst_play_seek_to_time (GstPlay * play, gint64 time_nanos)
-{
- return gst_element_seek (play->priv->playbin,
- GST_SEEK_METHOD_SET | GST_SEEK_FLAG_FLUSH, time_nanos);
-}
-
-/**
- * gst_play_set_data_src:
- * @play: a #GstPlay.
- * @data_src: a #GstElement.
- *
- * Set @data_src as the source element of @play.
- *
- * Returns: TRUE if call succeeded.
- */
-
-gboolean
-gst_play_set_data_src (GstPlay * play, GstElement * data_src)
-{
- /* deprecated - use URIs */
- return FALSE;
-}
-
-/**
- * gst_play_set_video_sink:
- * @play: a #GstPlay.
- * @video_sink: a #GstElement.
- *
- * Set @video_sink as the video sink element of @play.
- *
- * Returns: TRUE if call succeeded.
- */
-
-gboolean
-gst_play_set_video_sink (GstPlay * play, GstElement * video_sink)
-{
- g_object_set (G_OBJECT (play->priv->playbin), "video-sink", video_sink, NULL);
-
- return TRUE;
-}
-
-/**
- * gst_play_set_audio_sink:
- * @play: a #GstPlay.
- * @audio_sink: a #GstElement.
- *
- * Set @audio_sink as the audio sink element of @play.
- *
- * Returns: TRUE if call succeeded.
- */
-
-gboolean
-gst_play_set_audio_sink (GstPlay * play, GstElement * audio_sink)
-{
- g_object_set (G_OBJECT (play->priv->playbin), "audio-sink", audio_sink, NULL);
-
- return TRUE;
-}
-
-/**
- * gst_play_set_visualization:
- * @play: a #GstPlay.
- * @element: a #GstElement.
- *
- * Set @video_sink as the video sink element of @play.
- *
- * Returns: TRUE if call succeeded.
- */
-
-gboolean
-gst_play_set_visualization (GstPlay * play, GstElement * vis_element)
-{
- /* unset old */
- if (play->priv->vis_element) {
- gst_object_unref (GST_OBJECT (play->priv->vis_element));
- play->priv->vis_element = NULL;
- }
-
- /* set new */
- if (vis_element) {
- gst_object_ref (GST_OBJECT (vis_element));
- play->priv->vis_element = vis_element;
- }
-
- /* use */
- if (play->priv->vis_element && play->priv->enable_vis) {
- g_object_set (G_OBJECT (play->priv->playbin),
- "vis-plugin", vis_element, NULL);
- } else {
- g_object_set (G_OBJECT (play->priv->playbin), "vis-plugin", NULL, NULL);
- }
-
- return TRUE;
-}
-
-/**
- * gst_play_connect_visualization:
- * @play: a #GstPlay.
- * @connect: a #gboolean indicating wether or not
- * visualization should be connected.
- *
- * Connect or disconnect visualization bin in @play.
- *
- * Returns: TRUE if call succeeded.
- */
-
-gboolean
-gst_play_connect_visualization (GstPlay * play, gboolean connect)
-{
- play->priv->enable_vis = connect;
-
- /* use */
- if (play->priv->vis_element && play->priv->enable_vis) {
- g_object_set (G_OBJECT (play->priv->playbin),
- "vis-plugin", play->priv->vis_element, NULL);
- } else {
- g_object_set (G_OBJECT (play->priv->playbin), "vis-plugin", NULL, NULL);
- }
-
- return TRUE;
-}
-
-/**
- * gst_play_get_framerate:
- * @play: a #GstPlay.
- *
- * Get the video framerate from @play.
- *
- * Returns: a #gdouble indicating video framerate in frame per second.
- */
-
-gdouble
-gst_play_get_framerate (GstPlay * play)
-{
- const GList *streaminfo = NULL;
- const GstStructure *str = NULL;
- gdouble value;
-
- g_object_get (G_OBJECT (play->priv->playbin),
- "stream-info", &streaminfo, NULL);
-
- for (; streaminfo != NULL; streaminfo = streaminfo->next) {
- GObject *info = streaminfo->data;
- gint type;
- GParamSpec *pspec;
- GEnumValue *val;
-
- g_object_get (info, "type", &type, NULL);
- pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (info), "type");
- val = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, type);
-
- if (strstr (val->value_name, "VIDEO")) {
- const GstCaps *caps = NULL;
- GstPad *pad = NULL;
-
- g_object_get (info, "object", &pad, NULL);
- g_assert (GST_IS_PAD (pad));
- pad = (GstPad *) GST_PAD_REALIZE (pad);
- caps = GST_PAD_CAPS (pad);
- str = gst_caps_get_structure (caps, 0);
- break;
- }
- }
-
- if (!str)
- return 0.;
-
- gst_structure_get_double (str, "framerate", &value);
-
- return value;
-}
-
-/**
- * gst_play_get_sink_element:
- * @play: a #GstPlay.
- * @element: a #GstElement.
- * @sink_type: a #GstPlaySinkType.
- *
- * Searches recursively for a sink #GstElement with
- * type @sink_type in @element which is supposed to be a #GstBin.
- *
- * Returns: the sink #GstElement of @element.
- */
-
-/*
- * (Ronald) what is this?
- */
-
-GstElement *
-gst_play_get_sink_element (GstPlay * play,
- GstElement * element, GstPlaySinkType sink_type)
-{
- GList *elements = NULL;
- const GList *pads = NULL;
- gboolean has_src, has_correct_type;
-
- g_return_val_if_fail (GST_IS_PLAY (play), NULL);
- g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
-
- GST_DEBUG_OBJECT (play, "looking for sink element in %s",
- GST_ELEMENT_NAME (element));
-
- if (!GST_IS_BIN (element)) {
- /* since its not a bin, we'll assume this
- * element is a sink element */
- GST_DEBUG_OBJECT (play, "not a bin, returning %s as sink element",
- GST_ELEMENT_NAME (element));
- return element;
- }
-
- elements = (GList *) gst_bin_get_list (GST_BIN (element));
-
- /* traverse all elements looking for one without src pad */
-
- while (elements) {
- element = GST_ELEMENT (elements->data);
- GST_DEBUG_OBJECT (play, "looking at element %s",
- GST_ELEMENT_NAME (element));
-
- /* Recursivity :) */
-
- if (GST_IS_BIN (element)) {
- element = gst_play_get_sink_element (play, element, sink_type);
- if (GST_IS_ELEMENT (element))
- return element;
- } else {
- pads = gst_element_get_pad_list (element);
- has_src = FALSE;
- has_correct_type = FALSE;
- while (pads) {
- /* check for src pad */
- if (GST_PAD_DIRECTION (GST_PAD (pads->data)) == GST_PAD_SRC) {
- GST_DEBUG_OBJECT (play, "element %s has a src pad",
- GST_ELEMENT_NAME (element));
- has_src = TRUE;
- break;
- } else {
- /* If not a src pad checking caps */
- GstPad *pad;
- GstCaps *caps;
- GstStructure *structure;
- int i;
- gboolean has_video_cap = FALSE;
- gboolean has_audio_cap = FALSE;
-
- pad = GST_PAD (pads->data);
- caps = gst_pad_get_caps (pad);
- /* loop over all caps members to find mime types */
- for (i = 0; i < gst_caps_get_size (caps); ++i) {
- structure = gst_caps_get_structure (caps, i);
-
- GST_DEBUG_OBJECT (play,
- "looking at caps %d pad %s:%s on element %s with mime %s", i,
- GST_DEBUG_PAD_NAME (pad),
- GST_ELEMENT_NAME (element), gst_structure_get_name (structure));
-
- if (strcmp (gst_structure_get_name (structure),
- "audio/x-raw-int") == 0) {
- has_audio_cap = TRUE;
- }
-
- if (strcmp (gst_structure_get_name (structure),
- "video/x-raw-yuv") == 0 ||
- strcmp (gst_structure_get_name (structure),
- "video/x-raw-rgb") == 0) {
- has_video_cap = TRUE;
- }
- }
-
- gst_caps_free (caps);
-
- switch (sink_type) {
- case GST_PLAY_SINK_TYPE_AUDIO:
- if (has_audio_cap)
- has_correct_type = TRUE;
- break;
- case GST_PLAY_SINK_TYPE_VIDEO:
- if (has_video_cap)
- has_correct_type = TRUE;
- break;
- case GST_PLAY_SINK_TYPE_ANY:
- if ((has_video_cap) || (has_audio_cap))
- has_correct_type = TRUE;
- break;
- default:
- has_correct_type = FALSE;
- }
- }
-
- pads = g_list_next (pads);
-
- }
-
- if ((!has_src) && (has_correct_type)) {
- GST_DEBUG_OBJECT (play, "found %s with src pad and correct type",
- GST_ELEMENT_NAME (element));
- return element;
- }
- }
-
- elements = g_list_next (elements);
- }
-
- /* we didn't find a sink element */
-
- return NULL;
-}
-
-/**
- * gst_play_get_all_by_interface:
- * @play: a #GstPlay.
- * @interface: an interface.
- *
- * Returns all elements that are used by @play implementing the given interface.
- *
- * Returns: a #GList of #GstElement implementing the interface.
- */
-
-GList *
-gst_play_get_all_by_interface (GstPlay * play, GType interface_type)
-{
- GstElement *videosink = NULL, *audiosink = NULL;
- GList *res = NULL;
-
- g_object_get (G_OBJECT (play->priv->playbin),
- "video-sink", &videosink, "audio-sink", &audiosink, NULL);
-
- /* ehw... */
- if (videosink && GST_IS_BIN (videosink)) {
- res = gst_bin_get_all_by_interface (GST_BIN (videosink), interface_type);
- }
- if (!res && audiosink && GST_IS_BIN (audiosink)) {
- res = gst_bin_get_all_by_interface (GST_BIN (audiosink), interface_type);
- }
-
- return res;
-}
-
-/**
- * gst_play_new:
- * @error: a pointer to a #GError, which will be filled in on error.
- *
- * Creates a new GstPlay object.
- *
- * Returns: a newly created #GstPlay, or NULL on error (the #GError
- * will be set accordingly).
- */
-
-GstPlay *
-gst_play_new (GError ** error)
-{
- GstPlay *play = g_object_new (GST_TYPE_PLAY, NULL);
-
- if (!play->priv->playbin) {
- g_set_error (error, 0, 0, _("Failed to create playbin object"));
- g_object_unref (G_OBJECT (play));
-
- return NULL;
- }
-
- return play;
-}
-
-/* =========================================== */
-/* */
-/* Object typing & Creation */
-/* */
-/* =========================================== */
-
-GType
-gst_play_get_type (void)
-{
- static GType play_type = 0;
-
- if (!play_type) {
- static const GTypeInfo play_info = {
- sizeof (GstPlayClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_play_class_init,
- NULL,
- NULL,
- sizeof (GstPlay),
- 0,
- (GInstanceInitFunc) gst_play_init,
- NULL
- };
-
- play_type = g_type_register_static (GST_TYPE_PIPELINE, "GstPlay",
- &play_info, 0);
- }
-
- return play_type;
-}
+++ /dev/null
-noinst_LTLIBRARIES = libgstpropertyprobe.la
-
-libgstpropertyprobe_la_SOURCES = propertyprobe.c
-
-libgstpropertyprobeincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/propertyprobe
-libgstpropertyprobeinclude_HEADERS = propertyprobe.h
-
-libgstpropertyprobe_la_CFLAGS = $(GST_CFLAGS)
-
+++ /dev/null
-/* GStreamer PropertyProbe
- * Copyright (C) 2003 David Schleef <ds@schleef.org>
- *
- * property_probe.c: property_probe design virtual class function wrappers
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "propertyprobe.h"
-
-enum
-{
- SIGNAL_PROBE_NEEDED,
- LAST_SIGNAL
-};
-
-static void gst_property_probe_iface_init (GstPropertyProbeInterface * iface);
-
-static guint gst_property_probe_signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_property_probe_get_type (void)
-{
- static GType gst_property_probe_type = 0;
-
- if (!gst_property_probe_type) {
- static const GTypeInfo gst_property_probe_info = {
- sizeof (GstPropertyProbeInterface),
- (GBaseInitFunc) gst_property_probe_iface_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- gst_property_probe_type =
- g_type_register_static (G_TYPE_INTERFACE,
- "GstPropertyProbe", &gst_property_probe_info, 0);
- }
-
- return gst_property_probe_type;
-}
-
-static void
-gst_property_probe_iface_init (GstPropertyProbeInterface * iface)
-{
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- gst_property_probe_signals[SIGNAL_PROBE_NEEDED] =
- g_signal_new ("probe-needed", G_TYPE_FROM_CLASS (iface),
- G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstPropertyProbeInterface,
- probe_needed), NULL, NULL, g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- initialized = TRUE;
- }
-
- /* default virtual functions */
- iface->get_properties = NULL;
- iface->get_values = NULL;
-}
-
-/**
- * gst_property_probe_get_properties:
- * @probe: the #GstPropertyProbe to get the properties for.
- *
- * Get a list of properties for which probing is supported.
- *
- * Returns the list of properties for which probing is supported
- * by this element.
- */
-
-const GList *
-gst_property_probe_get_properties (GstPropertyProbe * probe)
-{
- GstPropertyProbeInterface *iface;
-
- g_return_val_if_fail (probe != NULL, NULL);
-
- iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
-
- if (iface->get_properties)
- return iface->get_properties (probe);
-
- return NULL;
-}
-
-const GParamSpec *
-gst_property_probe_get_property (GstPropertyProbe * probe, const gchar * name)
-{
- const GList *pspecs = gst_property_probe_get_properties (probe);
-
- g_return_val_if_fail (probe != NULL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- while (pspecs) {
- const GParamSpec *pspec = pspecs->data;
-
- if (!strcmp (pspec->name, name))
- return pspec;
-
- pspecs = pspecs->next;
- }
-
- return NULL;
-}
-
-void
-gst_property_probe_probe_property (GstPropertyProbe * probe,
- const GParamSpec * pspec)
-{
- GstPropertyProbeInterface *iface;
-
- g_return_if_fail (probe != NULL);
- g_return_if_fail (pspec != NULL);
-
- iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
-
- if (iface->probe_property)
- iface->probe_property (probe, pspec->param_id, pspec);
-}
-
-/**
- * gst_property_probe_probe_property_name:
- * @probe: the #GstPropertyProbe to check.
- * @name: name of the property to return.
- *
- * Returns the #GParamSpec for the given property. It's similar to
- * g_object_class_find_property (), except that this function only
- * takes "probe'able" properties into account.
- *
- * Returns: the #GParamSpec that belongs to the given property.
- */
-
-void
-gst_property_probe_probe_property_name (GstPropertyProbe * probe,
- const gchar * name)
-{
- const GParamSpec *pspec;
-
- g_return_if_fail (probe != NULL);
- g_return_if_fail (name != NULL);
-
- pspec = g_object_class_find_property (G_OBJECT_CLASS (probe), name);
- if (!pspec) {
- g_warning ("No such property %s", name);
- return;
- }
-
- gst_property_probe_probe_property (probe, pspec);
-}
-
-/**
- * gst_property_probe_needs_probe:
- * @probe: the #GstPropertyProbe object to which the given property belongs.
- * @pspec: a #GParamSpec that identifies the property to check.
- *
- * Checks whether a property needs a probe. This might be because
- * the property wasn't initialized before, or because host setup
- * changed. This might be, for example, because a new device was
- * added, and thus device probing needs to be refreshed to display
- * the new device.
- *
- * Returns: TRUE if the property needs a new probe, FALSE if not.
- */
-
-gboolean
-gst_property_probe_needs_probe (GstPropertyProbe * probe,
- const GParamSpec * pspec)
-{
- GstPropertyProbeInterface *iface;
-
- g_return_val_if_fail (probe != NULL, FALSE);
- g_return_val_if_fail (pspec != NULL, FALSE);
-
- iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
-
- if (iface->needs_probe)
- return iface->needs_probe (probe, pspec->param_id, pspec);
-
- return FALSE;
-}
-
-/**
- * gst_property_probe_needs_probe_name:
- * @probe: the #GstPropertyProbe object to which the given property belongs.
- * @name: the name of the property to check.
- *
- * Same as gst_property_probe_needs_probe ().
- *
- * Returns: TRUE if the property needs a new probe, FALSE if not.
- */
-
-gboolean
-gst_property_probe_needs_probe_name (GstPropertyProbe * probe,
- const gchar * name)
-{
- const GParamSpec *pspec;
-
- g_return_val_if_fail (probe != NULL, FALSE);
- g_return_val_if_fail (name != NULL, FALSE);
-
- pspec = g_object_class_find_property (G_OBJECT_CLASS (probe), name);
- if (!pspec) {
- g_warning ("No such property %s", name);
- return FALSE;
- }
-
- return gst_property_probe_needs_probe (probe, pspec);
-}
-
-/**
- * gst_property_probe_get_values:
- * @probe: the #GstPropertyProbe object.
- * @pspec: the #GParamSpec property identifier.
- *
- * Gets the possible (probed) values for the given property,
- * requires the property to have been probed before.
- *
- * Returns: A list of valid values for the given property.
- */
-
-GValueArray *
-gst_property_probe_get_values (GstPropertyProbe * probe,
- const GParamSpec * pspec)
-{
- GstPropertyProbeInterface *iface;
-
- g_return_val_if_fail (probe != NULL, NULL);
- g_return_val_if_fail (pspec != NULL, NULL);
-
- iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
-
- if (iface->get_values)
- return iface->get_values (probe, pspec->param_id, pspec);
-
- return NULL;
-}
-
-/**
- * gst_property_probe_get_values_name:
- * @probe: the #GstPropertyProbe object.
- * @name: the name of the property to get values for.
- *
- * Same as gst_property_probe_get_values ().
- *
- * Returns: A list of valid values for the given property.
- */
-
-GValueArray *
-gst_property_probe_get_values_name (GstPropertyProbe * probe,
- const gchar * name)
-{
- const GParamSpec *pspec;
-
- g_return_val_if_fail (probe != NULL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- pspec = g_object_class_find_property (G_OBJECT_CLASS (probe), name);
- if (!pspec) {
- g_warning ("No such property %s", name);
- return NULL;
- }
-
- return gst_property_probe_get_values (probe, pspec);
-}
-
-/**
- * gst_property_probe_probe_and_get_values:
- * @probe: the #GstPropertyProbe object.
- * @pspec: The #GParamSpec property identifier.
- *
- * Check whether the given property requires a new probe. If so,
- * fo the probe. After that, retrieve a value list. Meant as a
- * utility function that wraps the above functions.
- *
- * Return: the list of valid values for this property.
- */
-
-GValueArray *
-gst_property_probe_probe_and_get_values (GstPropertyProbe * probe,
- const GParamSpec * pspec)
-{
- GstPropertyProbeInterface *iface;
-
- g_return_val_if_fail (probe != NULL, NULL);
- g_return_val_if_fail (pspec != NULL, NULL);
-
- iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
-
- if (gst_property_probe_needs_probe (probe, pspec))
- gst_property_probe_probe_property (probe, pspec);
-
- return gst_property_probe_get_values (probe, pspec);
-}
-
-/**
- * gst_property_probe_probe_and_get_values_name:
- * @probe: the #GstPropertyProbe object.
- * @name: the name of the property to get values for.
- *
- * Same as gst_property_probe_probe_and_get_values ().
- *
- * Return: the list of valid values for this property.
- */
-
-GValueArray *
-gst_property_probe_probe_and_get_values_name (GstPropertyProbe * probe,
- const gchar * name)
-{
- const GParamSpec *pspec;
-
- g_return_val_if_fail (probe != NULL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- pspec = g_object_class_find_property (G_OBJECT_CLASS (probe), name);
- if (!pspec) {
- g_warning ("No such property %s", name);
- return NULL;
- }
-
- return gst_property_probe_probe_and_get_values (probe, pspec);
-}
+++ /dev/null
-/* GStreamer PropertyProbe
- * Copyright (C) 2003 David A. Schleef <ds@schleef.org>
- *
- * property_probe.h: property_probe interface design
- *
- * 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_PROPERTY_PROBE_H__
-#define __GST_PROPERTY_PROBE_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_PROPERTY_PROBE \
- (gst_property_probe_get_type ())
-#define GST_PROPERTY_PROBE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PROPERTY_PROBE, GstPropertyProbe))
-#define GST_IS_PROPERTY_PROBE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PROPERTY_PROBE))
-#define GST_PROPERTY_PROBE_GET_IFACE(obj) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_PROPERTY_PROBE, GstPropertyProbeInterface))
-
-typedef struct _GstPropertyProbe GstPropertyProbe; /* dummy typedef */
-
-typedef struct _GstPropertyProbeInterface {
- GTypeInterface klass;
-
- /* signals */
- void (*probe_needed) (GstPropertyProbe *probe,
- const GParamSpec *pspec);
-
- /* virtual functions */
- const GList * (*get_properties) (GstPropertyProbe *probe);
- gboolean (*needs_probe) (GstPropertyProbe *probe,
- guint prop_id,
- const GParamSpec *pspec);
- void (*probe_property) (GstPropertyProbe *probe,
- guint prop_id,
- const GParamSpec *pspec);
- GValueArray * (*get_values) (GstPropertyProbe *probe,
- guint prop_id,
- const GParamSpec *pspec);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstPropertyProbeInterface;
-
-GType gst_property_probe_get_type (void);
-
-/* virtual class function wrappers */
-
-/* returns list of GParamSpecs */
-const GList * gst_property_probe_get_properties (GstPropertyProbe *probe);
-const GParamSpec *gst_property_probe_get_property (GstPropertyProbe *probe,
- const gchar *name);
-
-/* probe one property */
-void gst_property_probe_probe_property (GstPropertyProbe *probe,
- const GParamSpec *pspec);
-void gst_property_probe_probe_property_name (GstPropertyProbe *probe,
- const gchar *name);
-
-/* do we need a probe? */
-gboolean gst_property_probe_needs_probe (GstPropertyProbe *probe,
- const GParamSpec *pspec);
-gboolean gst_property_probe_needs_probe_name (GstPropertyProbe *probe,
- const gchar *name);
-
-/* returns list of GValues */
-GValueArray * gst_property_probe_get_values (GstPropertyProbe *probe,
- const GParamSpec *pspec);
-GValueArray * gst_property_probe_get_values_name (GstPropertyProbe *probe,
- const gchar *name);
-
-/* sugar */
-GValueArray * gst_property_probe_probe_and_get_values (GstPropertyProbe *probe,
- const GParamSpec *pspec);
-GValueArray * gst_property_probe_probe_and_get_values_name (GstPropertyProbe *probe,
- const gchar *name);
-
-G_END_DECLS
-
-#endif /* __GST_PROPERTY_PROBE_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="propertyprobe"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D6789A}"
- RootNamespace="propertyprobe"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstpropertyprobe.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/propertyprobe.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstpropertyprobe.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstpropertyprobe.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstpropertyprobe.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\propertyprobe.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\propertyprobe.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-librarydir = $(libdir)/gstreamer-@GST_MAJORMINOR@
-
-library_LTLIBRARIES = libgstresample.la
-
-libgstresample_la_SOURCES = dtos.c dtof.c functable.c resample.c resample.h
-libgstresample_la_LIBADD =
-libgstresample_la_CFLAGS = $(GST_CFLAGS)
-libgstresample_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-
-libgstresampleincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/resample
-libgstresampleinclude_HEADERS = resample.h
-
-noinst_HEADERS = private.h
-
+++ /dev/null
-
-This is a snapshot of my current work developing an audio
-resampling library. While working on this library, I started
-writing lots of general purpose functions that should really
-be part of a larger library. Rather than have a constantly
-changing library, and since the current code is capable, I
-decided to freeze this codebase for use with gstreamer, and
-move active development of the code elsewhere.
-
-The algorithm used is based on Shannon's theorem, which says
-that you can recreate an input signal from equidistant samples
-using a sin(x)/x filter; thus, you can create new samples from
-the regenerated input signal. Since sin(x)/x is expensive to
-evaluate, an interpolated lookup table is used. Also, a
-windowing function (1-x^2)^2 is used, which aids the convergence
-of sin(x)/x for lower frequencies at the expense of higher.
-
-There is one tunable parameter, which is the filter length.
-Longer filter lengths are obviously slower, but more accurate.
-There's not much reason to use a filter length longer than 64,
-since other approximations start to dominate. Filter lengths
-as short as 8 are audially acceptable, but should not be
-considered for serious work.
-
-Performance: A PowerPC G4 at 400 Mhz can resample 2 audio
-channels at almost 10x speed with a filter length of 64, without
-using Altivec extensions. (My goal was 10x speed, which I almost
-reached. Maybe later.)
-
-Limitations: Currently only supports streams in the form of
-interleaved signed 16-bit samples.
-
-The test.c program is a simple regression test. It creates a
-test input pattern (1 sec at 48 khz) that is a frequency ramp
-from 0 to 24000 hz, and then converts it to 44100 hz using a
-filter length of 64. It then compares the result to the same
-pattern generated at 44100 hz, and outputs the result to the
-file "out".
-
-A graph of the correct output should have field 2 and field 4
-almost equal (plus/minus 1) up to about sample 40000 (which
-corresponds to 20 khz), and then field 2 should be close to 0
-above that. Running the test program will print to stdout
-something like the following:
-
- time 0.112526
- average error 10k=0.4105 22k=639.34
-
-The average error is RMS error over the range [0-10khz] and
-[0-22khz], and is expressed in sample values, for an input
-amplitude of 16000. Note that RMS errors below 1.0 can't
-really be compared, but basically this shows that below
-10 khz, the resampler is nearly perfect. Most of the error
-is concentrated above 20 khz.
-
-If the average error is significantly larger after modifying
-the code, it's probably not good.
-
-
-
-dave...
-
+++ /dev/null
-/* Resampling library
- * Copyright (C) <2001> David A. Schleef <ds@schleef.org>
- *
- * 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 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/*#include <ml.h> */
-#include "private.h"
-
-void
-conv_double_float_ref (double *dest, float *src, int n)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- dest[i] = src[i];
- }
-}
-
-void
-conv_float_double_ref (float *dest, double *src, int n)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- dest[i] = src[i];
- }
-}
-
-void
-conv_double_float_dstr (double *dest, float *src, int n, int dstr)
-{
- int i;
- void *d = dest;
-
- for (i = 0; i < n; i++) {
- (*(double *) d) = *src++;
- d += dstr;
- }
-}
-
-void
-conv_float_double_sstr (float *dest, double *src, int n, int sstr)
-{
- int i;
- void *s = src;
-
- for (i = 0; i < n; i++) {
- *dest++ = *(double *) s;
- s += sstr;
- }
-}
+++ /dev/null
-/* Resampling library
- * Copyright (C) <2001> David A. Schleef <ds@schleef.org>
- *
- * 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 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/*#include <ml.h> */
-#include <resample.h>
-
-
-
-#define short_to_double_table
-/*#define short_to_double_altivec */
-#define short_to_double_unroll
-
-#ifdef short_to_double_table
-static float ints_high[256];
-static float ints_low[256];
-
-void
-conv_double_short_table (double *dest, short *src, int n)
-{
- static int init = 0;
- int i;
- unsigned int idx;
-
- if (!init) {
- for (i = 0; i < 256; i++) {
- ints_high[i] = 256.0 * ((i < 128) ? i : i - 256);
- ints_low[i] = i;
- }
- init = 1;
- }
-
- if (n & 1) {
- idx = (unsigned short) *src++;
- *dest++ = ints_high[(idx >> 8)] + ints_low[(idx & 0xff)];
- n -= 1;
- }
- for (i = 0; i < n; i += 2) {
- idx = (unsigned short) *src++;
- *dest++ = ints_high[(idx >> 8)] + ints_low[(idx & 0xff)];
- idx = (unsigned short) *src++;
- *dest++ = ints_high[(idx >> 8)] + ints_low[(idx & 0xff)];
- }
-}
-
-#endif
-
-#ifdef short_to_double_unroll
-void
-conv_double_short_unroll (double *dest, short *src, int n)
-{
- if (n & 1) {
- *dest++ = *src++;
- n--;
- }
- if (n & 2) {
- *dest++ = *src++;
- *dest++ = *src++;
- n -= 2;
- }
- while (n > 0) {
- *dest++ = *src++;
- *dest++ = *src++;
- *dest++ = *src++;
- *dest++ = *src++;
- n -= 4;
- }
-}
-#endif
-
-void
-conv_double_short_ref (double *dest, short *src, int n)
-{
- int i;
-
- for (i = 0; i < n; i++) {
- dest[i] = src[i];
- }
-}
-
-#ifdef HAVE_CPU_PPC
-#if 0
-static union
-{
- int i[4];
- float f[4];
-}
-av_tmp __attribute__ ((__aligned__ (16)));
-
-void
-conv_double_short_altivec (double *dest, short *src, int n)
-{
- int i;
-
- for (i = 0; i < n; i += 4) {
- av_tmp.i[0] = src[0];
- av_tmp.i[1] = src[1];
- av_tmp.i[2] = src[2];
- av_tmp.i[3] = src[3];
-
- asm (" lvx 0,0,%0\n" " vcfsx 1,0,0\n" " stvx 1,0,%0\n": :"r" (&av_tmp)
- );
-
- dest[0] = av_tmp.f[0];
- dest[1] = av_tmp.f[1];
- dest[2] = av_tmp.f[2];
- dest[3] = av_tmp.f[3];
- src += 4;
- dest += 4;
- }
-}
-#endif
-#endif
-
-
-
-/* double to short */
-
-void
-conv_short_double_ref (short *dest, double *src, int n)
-{
- int i;
- double x;
-
- for (i = 0; i < n; i++) {
- x = *src++;
- if (x < -32768.0)
- x = -32768.0;
- if (x > 32767.0)
- x = 32767.0;
- *dest++ = rint (x);
- }
-}
-
-/* #ifdef HAVE_CPU_PPC */
-#if 0
-void
-conv_short_double_ppcasm (short *dest, double *src, int n)
-{
- int tmp[2];
- double min = -32768.0;
- double max = 32767.0;
- double ftmp0, ftmp1;
-
- asm __volatile__ ("\taddic. %3,%3,-8\n"
- "\taddic. %6,%6,-2\n"
- "loop:\n"
- "\tlfdu %0,8(%3)\n"
- "\tfsub %1,%0,%4\n"
- "\tfsel %0,%1,%0,%4\n"
- "\tfsub %1,%0,%5\n"
- "\tfsel %0,%1,%5,%0\n"
- "\tfctiw %1,%0\n"
- "\taddic. 5,5,-1\n"
- "\tstfd %1,0(%2)\n"
- "\tlhz 9,6(%2)\n"
- "\tsthu 9,2(%6)\n" "\tbne loop\n":"=&f" (ftmp0), "=&f" (ftmp1)
- :"b" (tmp), "r" (src), "f" (min), "f" (max), "r" (dest)
- :"r9", "r5");
-
-}
-#endif
-
-
-void
-conv_double_short_dstr (double *dest, short *src, int n, int dstr)
-{
- int i;
- void *d = dest;
-
- for (i = 0; i < n; i++) {
- (*(double *) d) = *src++;
- d += dstr;
- }
-}
-
-void
-conv_short_double_sstr (short *dest, double *src, int n, int sstr)
-{
- int i;
- double x;
- void *s = src;
-
- for (i = 0; i < n; i++) {
- x = *(double *) s;
- if (x < -32768.0)
- x = -32768.0;
- if (x > 32767.0)
- x = 32767.0;
- *dest++ = rint (x);
- s += sstr;
- }
-}
+++ /dev/null
-/* Resampling library
- * Copyright (C) <2001> David A. Schleef <ds@schleef.org>
- *
- * 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 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "private.h"
-
-
-
-double
-functable_sinc (void *p, double x)
-{
- if (x == 0)
- return 1;
- return sin (x) / x;
-}
-
-double
-functable_dsinc (void *p, double x)
-{
- if (x == 0)
- return 0;
- return cos (x) / x - sin (x) / (x * x);
-}
-
-double
-functable_window_boxcar (void *p, double x)
-{
- if (x < -1 || x > 1)
- return 0;
- return 1;
-}
-
-double
-functable_window_dboxcar (void *p, double x)
-{
- return 0;
-}
-
-double
-functable_window_std (void *p, double x)
-{
- if (x < -1 || x > 1)
- return 0;
- return (1 - x * x) * (1 - x * x);
-}
-
-double
-functable_window_dstd (void *p, double x)
-{
- if (x < -1 || x > 1)
- return 0;
- return -4 * x * (1 - x * x);
-}
-
-
-
-void
-functable_init (functable_t * t)
-{
- int i;
- double x;
-
- t->fx = malloc (sizeof (double) * (t->len + 1));
- t->fdx = malloc (sizeof (double) * (t->len + 1));
-
- t->invoffset = 1.0 / t->offset;
-
- for (i = 0; i < t->len + 1; i++) {
- x = t->start + t->offset * i;
- x *= t->scale;
-
- t->fx[i] = t->func_x (t->priv, x);
- t->fdx[i] = t->scale * t->func_dx (t->priv, x);
- }
- if (t->func2_x) {
- double f1x, f1dx;
- double f2x, f2dx;
-
- for (i = 0; i < t->len + 1; i++) {
- x = t->start + t->offset * i;
- x *= t->scale2;
-
- f2x = t->func2_x (t->priv, x);
- f2dx = t->scale2 * t->func2_dx (t->priv, x);
-
- f1x = t->fx[i];
- f1dx = t->fdx[i];
-
- t->fx[i] = f1x * f2x;
- t->fdx[i] = f1x * f2dx + f1dx * f2x;
- }
- }
-}
-
-double
-functable_eval (functable_t * t, double x)
-{
- int i;
- double f0, f1, w0, w1;
- double x2, x3;
- double w;
-
- if (x < t->start || x > (t->start + (t->len + 1) * t->offset)) {
- printf ("x out of range %g\n", x);
- }
- x -= t->start;
- x /= t->offset;
- i = floor (x);
- x -= i;
-
- x2 = x * x;
- x3 = x2 * x;
-
- f1 = 3 * x2 - 2 * x3;
- f0 = 1 - f1;
- w0 = (x - 2 * x2 + x3) * t->offset;
- w1 = (-x2 + x3) * t->offset;
-
- /*printf("i=%d x=%g f0=%g f1=%g w0=%g w1=%g\n",i,x,f0,f1,w0,w1); */
-
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
-
- /*w = t->fx[i] * (1-x) + t->fx[i+1] * x; */
-
- return w;
-}
-
-
-double
-functable_fir (functable_t * t, double x, int n, double *data, int len)
-{
- int i, j;
- double f0, f1, w0, w1;
- double x2, x3;
- double w;
- double sum;
-
- x -= t->start;
- x /= t->offset;
- i = floor (x);
- x -= i;
-
- x2 = x * x;
- x3 = x2 * x;
-
- f1 = 3 * x2 - 2 * x3;
- f0 = 1 - f1;
- w0 = (x - 2 * x2 + x3) * t->offset;
- w1 = (-x2 + x3) * t->offset;
-
- sum = 0;
- for (j = 0; j < len; j++) {
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
- sum += data[j * 2] * w;
- i += n;
- }
-
- return sum;
-}
-
-void
-functable_fir2 (functable_t * t, double *r0, double *r1, double x,
- int n, double *data, int len)
-{
- int i, j;
- double f0, f1, w0, w1;
- double x2, x3;
- double w;
- double sum0, sum1;
- double floor_x;
-
- x -= t->start;
- x *= t->invoffset;
- floor_x = floor (x);
- i = floor_x;
- x -= floor_x;
-
- x2 = x * x;
- x3 = x2 * x;
-
- f1 = 3 * x2 - 2 * x3;
- f0 = 1 - f1;
- w0 = (x - 2 * x2 + x3) * t->offset;
- w1 = (-x2 + x3) * t->offset;
-
- sum0 = 0;
- sum1 = 0;
- for (j = 0; j < len; j++) {
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
- sum0 += data[j * 2] * w;
- sum1 += data[j * 2 + 1] * w;
- i += n;
-
-#define unroll2
-#define unroll3
-#define unroll4
-#ifdef unroll2
- j++;
-
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
- sum0 += data[j * 2] * w;
- sum1 += data[j * 2 + 1] * w;
- i += n;
-#endif
-#ifdef unroll3
- j++;
-
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
- sum0 += data[j * 2] * w;
- sum1 += data[j * 2 + 1] * w;
- i += n;
-#endif
-#ifdef unroll4
- j++;
-
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
- sum0 += data[j * 2] * w;
- sum1 += data[j * 2 + 1] * w;
- i += n;
-#endif
- }
-
- *r0 = sum0;
- *r1 = sum1;
-}
-
-
-
-#ifdef unused
-void
-functable_fir2_altivec (functable_t * t, float *r0, float *r1,
- double x, int n, float *data, int len)
-{
- int i, j;
- double f0, f1, w0, w1;
- double x2, x3;
- double w;
- double sum0, sum1;
- double floor_x;
-
- x -= t->start;
- x *= t->invoffset;
- floor_x = floor (x);
- i = floor_x;
- x -= floor_x;
-
- x2 = x * x;
- x3 = x2 * x;
-
- f1 = 3 * x2 - 2 * x3;
- f0 = 1 - f1;
- w0 = (x - 2 * x2 + x3) * t->offset;
- w1 = (-x2 + x3) * t->offset;
-
- sum0 = 0;
- sum1 = 0;
- for (j = 0; j < len; j++) {
- /* t->fx, t->fdx needs to be multiplexed by n */
- /* we need 5 consecutive floats, which fit into 2 vecs */
- /* load v0, t->fx[i] */
- /* load v1, t->fx[i+n] */
- /* v2 = v0 (not correct) */
- /* v3 = (v0>>32) || (v1<<3*32) (not correct) */
- /* */
- /* load v4, t->dfx[i] */
- /* load v5, t->dfx[i+n] */
- /* v6 = v4 (not correct) */
- /* v7 = (v4>>32) || (v5<<3*32) (not correct) */
- /* */
- /* v8 = splat(f0) */
- /* v9 = splat(f1) */
- /* v10 = splat(w0) */
- /* v11 = splat(w1) */
- /* */
- /* v12 = v2 * v8 */
- /* v12 += v3 * v9 */
- /* v12 += v6 * v10 */
- /* v12 += v7 * v11 */
-
- w = t->fx[i] * f0 + t->fx[i + 1] * f1 + t->fdx[i] * w0 + t->fdx[i + 1] * w1;
-
- /* v13 = data[j*2] */
- /* v14 = data[j*2+4] */
- /* v15 = deinterlace_high(v13,v14) */
- /* v16 = deinterlace_low(v13,v14) */
- /* (sum0) v17 += multsum(v13,v15) */
- /* (sum1) v18 += multsum(v14,v16) */
-
- sum0 += data[j * 2] * w;
- sum1 += data[j * 2 + 1] * w;
- i += n;
-
- }
-
- *r0 = sum0;
- *r1 = sum1;
-}
-#endif
+++ /dev/null
-/* Resampling library
- * Copyright (C) <2001> David Schleef <ds@schleef.org>
- *
- * 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 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 __PRIVATE_H__
-#define __PRIVATE_H__
-
-#include "resample.h"
-
-G_BEGIN_DECLS
-
-void gst_resample_nearest_s16(gst_resample_t *r);
-void gst_resample_bilinear_s16(gst_resample_t *r);
-void gst_resample_sinc_s16(gst_resample_t *r);
-void gst_resample_sinc_slow_s16(gst_resample_t *r);
-void gst_resample_sinc_ft_s16(gst_resample_t * r);
-
-void gst_resample_nearest_float(gst_resample_t *r);
-void gst_resample_bilinear_float(gst_resample_t *r);
-void gst_resample_sinc_float(gst_resample_t *r);
-void gst_resample_sinc_slow_float(gst_resample_t *r);
-void gst_resample_sinc_ft_float(gst_resample_t * r);
-
-
-typedef struct functable_s functable_t;
-struct functable_s {
- double start;
- double offset;
- int len;
-
- double invoffset;
-
- double scale;
- double scale2;
-
- double (*func_x)(void *,double x);
- double (*func_dx)(void *,double x);
-
- double (*func2_x)(void *,double x);
- double (*func2_dx)(void *,double x);
-
- double *fx;
- double *fdx;
-
- void *priv;
-};
-
-void functable_init(functable_t *t);
-double functable_eval(functable_t *t,double x);
-
-double functable_fir(functable_t *t,double x0,int n,double *data,int len);
-void functable_fir2(functable_t *t,double *r0, double *r1, double x0,
- int n,double *data,int len);
-
-double functable_sinc(void *p, double x);
-double functable_dsinc(void *p, double x);
-double functable_window_std(void *p, double x);
-double functable_window_dstd(void *p, double x);
-double functable_window_boxcar(void *p, double x);
-double functable_window_dboxcar(void *p, double x);
-
-/* math lib stuff */
-
-void conv_double_short_table(double *dest, short *src, int n);
-void conv_double_short_unroll(double *dest, short *src, int n);
-void conv_double_short_ref(double *dest, short *src, int n);
-#ifdef HAVE_CPU_PPC
-void conv_double_short_altivec(double *dest, short *src, int n);
-#endif
-
-void conv_short_double_ref(short *dest, double *src, int n);
-#ifdef HAVE_CPU_PPC
-void conv_short_double_ppcasm(short *dest, double *src, int n);
-#endif
-
-#ifdef HAVE_CPU_PPC
-# define conv_double_short conv_double_short_table
-# if 0
-/* disabled as in .c */
-# define conv_short_double conv_short_double_ppcasm
-# else
-# define conv_short_double conv_short_double_ref
-# endif
-#else
-# define conv_double_short conv_double_short_ref
-# define conv_short_double conv_short_double_ref
-#endif
-
-#define conv_double_float conv_double_float_ref
-#define conv_float_double conv_float_double_ref
-
-void conv_double_short_dstr(double *dest, short *src, int n, int dstr);
-void conv_short_double_sstr(short *dest, double *src, int n, int dstr);
-
-void conv_double_float_ref(double *dest, float *src, int n);
-void conv_float_double_ref(float *dest, double *src, int n);
-void conv_double_float_dstr(double *dest, float *src, int n, int dstr);
-void conv_float_double_sstr(float *dest, double *src, int n, int sstr);
-
-G_END_DECLS
-
-#endif /* __PRIVATE_H__ */
+++ /dev/null
-/* Resampling library
- * Copyright (C) <2001> David A. Schleef <ds@schleef.org>
- *
- * 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 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "private.h"
-#include <gst/gstplugin.h>
-#include <gst/gstversion.h>
-
-inline double
-sinc (double x)
-{
- if (x == 0)
- return 1;
- return sin (x) / x;
-}
-
-inline double
-window_func (double x)
-{
- x = 1 - x * x;
- return x * x;
-}
-
-signed short
-double_to_s16 (double x)
-{
- if (x < -32768) {
- printf ("clipped\n");
- return -32768;
- }
- if (x > 32767) {
- printf ("clipped\n");
- return -32767;
- }
- return rint (x);
-}
-
-signed short
-double_to_s16_ppcasm (double x)
-{
- if (x < -32768) {
- return -32768;
- }
- if (x > 32767) {
- return -32767;
- }
- return rint (x);
-}
-
-void
-gst_resample_init (gst_resample_t * r)
-{
- r->i_start = 0;
- if (r->filter_length & 1) {
- r->o_start = 0;
- } else {
- r->o_start = r->o_inc * 0.5;
- }
-
- memset (r->acc, 0, sizeof (r->acc));
-
- gst_resample_reinit (r);
-}
-
-void
-gst_resample_reinit (gst_resample_t * r)
-{
- /* i_inc is the number of samples that the output increments for
- * each input sample. o_inc is the opposite. */
- r->i_inc = (double) r->o_rate / r->i_rate;
- r->o_inc = (double) r->i_rate / r->o_rate;
-
- r->halftaps = (r->filter_length - 1.0) * 0.5;
-
- if (r->format == GST_RESAMPLE_S16) {
- switch (r->method) {
- default:
- case GST_RESAMPLE_NEAREST:
- r->scale = gst_resample_nearest_s16;
- break;
- case GST_RESAMPLE_BILINEAR:
- r->scale = gst_resample_bilinear_s16;
- break;
- case GST_RESAMPLE_SINC_SLOW:
- r->scale = gst_resample_sinc_s16;
- break;
- case GST_RESAMPLE_SINC:
- r->scale = gst_resample_sinc_ft_s16;
- break;
- }
- } else if (r->format == GST_RESAMPLE_FLOAT) {
- switch (r->method) {
- default:
- case GST_RESAMPLE_NEAREST:
- r->scale = gst_resample_nearest_float;
- break;
- case GST_RESAMPLE_BILINEAR:
- r->scale = gst_resample_bilinear_float;
- break;
- case GST_RESAMPLE_SINC_SLOW:
- r->scale = gst_resample_sinc_float;
- break;
- case GST_RESAMPLE_SINC:
- r->scale = gst_resample_sinc_ft_float;
- break;
- }
- } else {
- fprintf (stderr, "gst_resample: Unexpected format \"%d\"\n", r->format);
- }
-}
-
-void
-gst_resample_close (gst_resample_t * r)
-{
- if (r->buffer) {
- free (r->buffer);
- r->buffer = NULL;
- r->buffer_len = 0;
- }
- if (r->hack_union.s.out_tmp) {
- free (r->hack_union.s.out_tmp);
- r->hack_union.s.out_tmp = NULL;
- r->hack_union.s.out_tmp_len = 0;
- }
-
-}
-
-/*
- * Prepare to be confused.
- *
- * We keep a "timebase" that is based on output samples. The zero
- * of the timebase cooresponds to the next output sample that will
- * be written.
- *
- * i_start is the "time" that corresponds to the first input sample
- * in an incoming buffer. Since the output depends on input samples
- * ahead in time, i_start will tend to be around halftaps.
- *
- * i_start_buf is the time of the first sample in the temporary
- * buffer.
- */
-void
-gst_resample_scale (gst_resample_t * r, void *i_buf, unsigned int i_size)
-{
- int o_size;
-
- r->i_buf = i_buf;
-
- r->i_samples = i_size / 2 / r->channels;
-
- r->i_start_buf = r->i_start - r->filter_length * r->i_inc;
-
- /* i_start is the offset (in a given output sample) that is the
- * beginning of the current input buffer */
- r->i_end = r->i_start + r->i_inc * r->i_samples;
-
- r->o_samples = floor (r->i_end - r->halftaps * r->i_inc);
-
- o_size = r->o_samples * r->channels * 2;
- r->o_buf = r->get_buffer (r->priv, o_size);
-
- if (r->verbose) {
- printf ("gst_resample_scale: i_buf=%p i_size=%d\n", i_buf, i_size);
- printf ("gst_resample_scale: i_samples=%d o_samples=%d i_inc=%g o_buf=%p\n",
- r->i_samples, r->o_samples, r->i_inc, r->o_buf);
- printf ("gst_resample_scale: i_start=%g i_end=%g o_start=%g\n",
- r->i_start, r->i_end, r->o_start);
- }
-
- if ((r->filter_length + r->i_samples) * sizeof (double) * 2 > r->buffer_len) {
- int size = (r->filter_length + r->i_samples) * sizeof (double) * 2;
-
- if (r->verbose) {
- printf ("gst_resample temp buffer size=%d\n", size);
- }
- if (r->buffer)
- free (r->buffer);
- r->buffer_len = size;
- r->buffer = malloc (size);
- memset (r->buffer, 0, size);
- }
-
- if (r->format == GST_RESAMPLE_S16) {
- if (r->channels == 2) {
- conv_double_short (r->buffer + r->filter_length * sizeof (double) * 2,
- r->i_buf, r->i_samples * 2);
- } else {
- conv_double_short_dstr (r->buffer +
- r->filter_length * sizeof (double) * 2, r->i_buf, r->i_samples,
- sizeof (double) * 2);
- }
- } else if (r->format == GST_RESAMPLE_FLOAT) {
- if (r->channels == 2) {
- conv_double_float (r->buffer + r->filter_length * sizeof (double) * 2,
- r->i_buf, r->i_samples * 2);
- } else {
- conv_double_float_dstr (r->buffer +
- r->filter_length * sizeof (double) * 2, r->i_buf, r->i_samples,
- sizeof (double) * 2);
- }
- }
-
- r->scale (r);
-
- memcpy (r->buffer,
- r->buffer + r->i_samples * sizeof (double) * 2,
- r->filter_length * sizeof (double) * 2);
-
- /* updating times */
- r->i_start += r->i_samples * r->i_inc;
- r->o_start += r->o_samples * r->o_inc - r->i_samples;
-
- /* adjusting timebase zero */
- r->i_start -= r->o_samples;
-}
-
-void
-gst_resample_nearest_s16 (gst_resample_t * r)
-{
- signed short *i_ptr, *o_ptr;
- int i_count = 0;
- double a;
- int i;
-
- i_ptr = (signed short *) r->i_buf;
- o_ptr = (signed short *) r->o_buf;
-
- a = r->o_start;
- i_count = 0;
-#define SCALE_LOOP(COPY,INC) \
- for (i = 0; i < r->o_samples; i++) { \
- COPY; \
- a += r->o_inc; \
- while (a >= 1) { \
- a -= 1; \
- i_ptr+=INC; \
- i_count++; \
- } \
- o_ptr+=INC; \
- }
-
- switch (r->channels) {
- case 1:
- SCALE_LOOP (o_ptr[0] = i_ptr[0], 1);
- break;
- case 2:
- SCALE_LOOP (o_ptr[0] = i_ptr[0];
- o_ptr[1] = i_ptr[1], 2);
- break;
- default:
- {
- int n, n_chan = r->channels;
-
- SCALE_LOOP (for (n = 0; n < n_chan; n++) o_ptr[n] = i_ptr[n], n_chan);
- }
- }
- if (i_count != r->i_samples) {
- printf ("handled %d in samples (expected %d)\n", i_count, r->i_samples);
- }
-}
-
-void
-gst_resample_bilinear_s16 (gst_resample_t * r)
-{
- signed short *i_ptr, *o_ptr;
- int o_count = 0;
- double b;
- int i;
- double acc0, acc1;
-
- i_ptr = (signed short *) r->i_buf;
- o_ptr = (signed short *) r->o_buf;
-
- acc0 = r->acc[0];
- acc1 = r->acc[1];
- b = r->i_start;
- for (i = 0; i < r->i_samples; i++) {
- b += r->i_inc;
- /*printf("in %d\n",i_ptr[0]); */
- if (b >= 2) {
- printf ("not expecting b>=2\n");
- }
- if (b >= 1) {
- acc0 += (1.0 - (b - r->i_inc)) * i_ptr[0];
- acc1 += (1.0 - (b - r->i_inc)) * i_ptr[1];
-
- o_ptr[0] = rint (acc0);
- /*printf("out %d\n",o_ptr[0]); */
- o_ptr[1] = rint (acc1);
- o_ptr += 2;
- o_count++;
-
- b -= 1.0;
-
- acc0 = b * i_ptr[0];
- acc1 = b * i_ptr[1];
- } else {
- acc0 += i_ptr[0] * r->i_inc;
- acc1 += i_ptr[1] * r->i_inc;
- }
- i_ptr += 2;
- }
- r->acc[0] = acc0;
- r->acc[1] = acc1;
-
- if (o_count != r->o_samples) {
- printf ("handled %d out samples (expected %d)\n", o_count, r->o_samples);
- }
-}
-
-void
-gst_resample_sinc_slow_s16 (gst_resample_t * r)
-{
- signed short *i_ptr, *o_ptr;
- int i, j;
- double c0, c1;
- double a;
- int start;
- double center;
- double weight;
-
- if (!r->buffer) {
- int size = r->filter_length * 2 * r->channels;
-
- printf ("gst_resample temp buffer\n");
- r->buffer = malloc (size);
- memset (r->buffer, 0, size);
- }
-
- i_ptr = (signed short *) r->i_buf;
- o_ptr = (signed short *) r->o_buf;
-
- a = r->i_start;
-#define GETBUF(index,chan) (((index)<0) \
- ? ((short *)(r->buffer))[((index)+r->filter_length)*2+(chan)] \
- : i_ptr[(index)*2+(chan)])
- {
- double sinx, cosx, sind, cosd;
- double x, d;
- double t;
-
- for (i = 0; i < r->o_samples; i++) {
- start = floor (a) - r->filter_length;
- center = a - r->halftaps;
- x = M_PI * (start - center) * r->o_inc;
- sinx = sin (M_PI * (start - center) * r->o_inc);
- cosx = cos (M_PI * (start - center) * r->o_inc);
- d = M_PI * r->o_inc;
- sind = sin (M_PI * r->o_inc);
- cosd = cos (M_PI * r->o_inc);
- c0 = 0;
- c1 = 0;
- for (j = 0; j < r->filter_length; j++) {
- weight = (x == 0) ? 1 : (sinx / x);
-/*printf("j %d sin %g cos %g\n",j,sinx,cosx); */
-/*printf("j %d sin %g x %g sinc %g\n",j,sinx,x,weight); */
- c0 += weight * GETBUF ((start + j), 0);
- c1 += weight * GETBUF ((start + j), 1);
- t = cosx * cosd - sinx * sind;
- sinx = cosx * sind + sinx * cosd;
- cosx = t;
- x += d;
- }
- o_ptr[0] = rint (c0);
- o_ptr[1] = rint (c1);
- o_ptr += 2;
- a += r->o_inc;
- }
- }
-#undef GETBUF
-
- memcpy (r->buffer,
- i_ptr + (r->i_samples - r->filter_length) * r->channels,
- r->filter_length * 2 * r->channels);
-}
-
-/* only works for channels == 2 ???? */
-void
-gst_resample_sinc_s16 (gst_resample_t * r)
-{
- double *ptr;
- signed short *o_ptr;
- int i, j;
- double c0, c1;
- double a;
- int start;
- double center;
- double weight;
- double x0, x, d;
- double scale;
-
- ptr = (double *) r->buffer;
- o_ptr = (signed short *) r->o_buf;
-
- /* scale provides a cutoff frequency for the low
- * pass filter aspects of sinc(). scale=M_PI
- * will cut off at the input frequency, which is
- * good for up-sampling, but will cause aliasing
- * for downsampling. Downsampling needs to be
- * cut off at o_rate, thus scale=M_PI*r->i_inc. */
- /* actually, it needs to be M_PI*r->i_inc*r->i_inc.
- * Need to research why. */
- scale = M_PI * r->i_inc;
- for (i = 0; i < r->o_samples; i++) {
- a = r->o_start + i * r->o_inc;
- start = floor (a - r->halftaps);
-/*printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1); */
- center = a;
- /*x = M_PI * (start - center) * r->o_inc; */
- /*d = M_PI * r->o_inc; */
- /*x = (start - center) * r->o_inc; */
- x0 = (start - center) * r->o_inc;
- d = r->o_inc;
- c0 = 0;
- c1 = 0;
- for (j = 0; j < r->filter_length; j++) {
- x = x0 + d * j;
- weight = sinc (x * scale * r->i_inc) * scale / M_PI;
- weight *= window_func (x / r->halftaps * r->i_inc);
- c0 += weight * ptr[(start + j + r->filter_length) * 2 + 0];
- c1 += weight * ptr[(start + j + r->filter_length) * 2 + 1];
- }
- o_ptr[0] = double_to_s16 (c0);
- o_ptr[1] = double_to_s16 (c1);
- o_ptr += 2;
- }
-}
-
-/*
- * Resampling audio is best done using a sinc() filter.
- *
- *
- * out[t] = Sum( in[t'] * sinc((t-t')/delta_t), all t')
- *
- * The immediate problem with this algorithm is that it involves a
- * sum over an infinite number of input samples, both in the past
- * and future. Note that even though sinc(x) is bounded by 1/x,
- * and thus decays to 0 for large x, since sum(x,{x=0,1..,n}) diverges
- * as log(n), we need to be careful about convergence. This is
- * typically done by using a windowing function, which also makes
- * the sum over a finite number of input samples.
- *
- * The next problem is computational: sinc(), and especially
- * sinc() multiplied by a non-trivial windowing function is expensive
- * to calculate, and also difficult to find SIMD optimizations. Since
- * the time increment on input and output is different, it is not
- * possible to use a FIR filter, because the taps would have to be
- * recalculated for every t.
- *
- * To get around the expense of calculating sinc() for every point,
- * we pre-calculate sinc() at a number of points, and then interpolate
- * for the values we want in calculations. The interpolation method
- * chosen is bi-cubic, which requires both the evalated function and
- * its derivative at every pre-sampled point. Also, if the sampled
- * points are spaced commensurate with the input delta_t, we notice
- * that the interpolating weights are the same for every input point.
- * This decreases the number of operations to 4 multiplies and 4 adds
- * for each tap, regardless of the complexity of the filtering function.
- *
- * At this point, it is possible to rearrange the problem as the sum
- * of 4 properly weghted FIR filters. Typical SIMD computation units
- * are highly optimized for FIR filters, making long filter lengths
- * reasonable.
- */
-
-static functable_t *ft;
-
-void
-gst_resample_sinc_ft_s16 (gst_resample_t * r)
-{
- double *ptr;
- signed short *o_ptr;
- int i;
-
- /*int j; */
- double c0, c1;
-
- /*double a; */
- double start_f, start_x;
- int start;
- double center;
-
- /*double weight; */
- double x, d;
- double scale;
- int n = 4;
- double *out_tmp;
-
- if (r->hack_union.s.out_tmp_len < r->o_samples) {
- r->hack_union.s.out_tmp = realloc (r->hack_union.s.out_tmp,
- r->o_samples * 2 * sizeof (double));
- r->hack_union.s.out_tmp_len = r->o_samples;
- }
- out_tmp = r->hack_union.s.out_tmp;
-
- scale = r->i_inc; /* cutoff at 22050 */
- /*scale = 1.0; // cutoff at 24000 */
- /*scale = r->i_inc * 0.5; // cutoff at 11025 */
-
- if (!ft) {
- ft = malloc (sizeof (*ft));
- memset (ft, 0, sizeof (*ft));
-
- ft->len = (r->filter_length + 2) * n;
- ft->offset = 1.0 / n;
- ft->start = -ft->len * 0.5 * ft->offset;
-
- ft->func_x = functable_sinc;
- ft->func_dx = functable_dsinc;
- ft->scale = M_PI * scale;
-
- ft->func2_x = functable_window_std;
- ft->func2_dx = functable_window_dstd;
- ft->scale2 = 1.0 / r->halftaps;
-
- functable_init (ft);
-
- /*printf("len=%d offset=%g start=%g\n",ft->len,ft->offset,ft->start); */
- }
-
- ptr = r->buffer;
- o_ptr = (signed short *) r->o_buf;
-
- center = r->o_start;
- while (center - r->halftaps < -1 * r->filter_length)
- center += 1.0;
- start_x = center - r->halftaps;
- start_f = floor (start_x);
- start_x -= start_f;
- start = start_f;
- for (i = 0; i < r->o_samples; i++) {
- /*start_f = floor(center - r->halftaps); */
-/*printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1); */
- x = start_f - center;
- d = 1;
- c0 = 0;
- c1 = 0;
-/*#define slow */
-#ifdef slow
- for (j = 0; j < r->filter_length; j++) {
- weight = functable_eval (ft, x) * scale;
- /*weight = sinc(M_PI * scale * x)*scale*r->i_inc; */
- /*weight *= window_func(x / r->halftaps); */
- c0 += weight * ptr[(start + j + r->filter_length) * 2 + 0];
- c1 += weight * ptr[(start + j + r->filter_length) * 2 + 1];
- x += d;
- }
-#else
- functable_fir2 (ft,
- &c0, &c1, x, n, ptr + (start + r->filter_length) * 2, r->filter_length);
- c0 *= scale;
- c1 *= scale;
-#endif
-
- out_tmp[2 * i + 0] = c0;
- out_tmp[2 * i + 1] = c1;
- center += r->o_inc;
- start_x += r->o_inc;
- while (start_x >= 1.0) {
- start_f++;
- start_x -= 1.0;
- start++;
- }
- }
-
- if (r->channels == 2) {
- conv_short_double (r->o_buf, out_tmp, 2 * r->o_samples);
- } else {
- conv_short_double_sstr (r->o_buf, out_tmp, r->o_samples,
- 2 * sizeof (double));
- }
-}
-
-/********
- ** float code below
- ********/
-
-
-void
-gst_resample_nearest_float (gst_resample_t * r)
-{
- float *i_ptr, *o_ptr;
- int i_count = 0;
- double a;
- int i;
-
- i_ptr = (float *) r->i_buf;
- o_ptr = (float *) r->o_buf;
-
- a = r->o_start;
- i_count = 0;
-#define SCALE_LOOP(COPY,INC) \
- for (i = 0; i < r->o_samples; i++) { \
- COPY; \
- a += r->o_inc; \
- while (a >= 1) { \
- a -= 1; \
- i_ptr+=INC; \
- i_count++; \
- } \
- o_ptr+=INC; \
- }
-
- switch (r->channels) {
- case 1:
- SCALE_LOOP (o_ptr[0] = i_ptr[0], 1);
- break;
- case 2:
- SCALE_LOOP (o_ptr[0] = i_ptr[0];
- o_ptr[1] = i_ptr[1], 2);
- break;
- default:
- {
- int n, n_chan = r->channels;
-
- SCALE_LOOP (for (n = 0; n < n_chan; n++) o_ptr[n] = i_ptr[n], n_chan);
- }
- }
- if (i_count != r->i_samples) {
- printf ("handled %d in samples (expected %d)\n", i_count, r->i_samples);
- }
-}
-
-void
-gst_resample_bilinear_float (gst_resample_t * r)
-{
- float *i_ptr, *o_ptr;
- int o_count = 0;
- double b;
- int i;
- double acc0, acc1;
-
- i_ptr = (float *) r->i_buf;
- o_ptr = (float *) r->o_buf;
-
- acc0 = r->acc[0];
- acc1 = r->acc[1];
- b = r->i_start;
- for (i = 0; i < r->i_samples; i++) {
- b += r->i_inc;
- /*printf("in %d\n",i_ptr[0]); */
- if (b >= 2) {
- printf ("not expecting b>=2\n");
- }
- if (b >= 1) {
- acc0 += (1.0 - (b - r->i_inc)) * i_ptr[0];
- acc1 += (1.0 - (b - r->i_inc)) * i_ptr[1];
-
- o_ptr[0] = acc0;
- /*printf("out %d\n",o_ptr[0]); */
- o_ptr[1] = acc1;
- o_ptr += 2;
- o_count++;
-
- b -= 1.0;
-
- acc0 = b * i_ptr[0];
- acc1 = b * i_ptr[1];
- } else {
- acc0 += i_ptr[0] * r->i_inc;
- acc1 += i_ptr[1] * r->i_inc;
- }
- i_ptr += 2;
- }
- r->acc[0] = acc0;
- r->acc[1] = acc1;
-
- if (o_count != r->o_samples) {
- printf ("handled %d out samples (expected %d)\n", o_count, r->o_samples);
- }
-}
-
-void
-gst_resample_sinc_slow_float (gst_resample_t * r)
-{
- float *i_ptr, *o_ptr;
- int i, j;
- double c0, c1;
- double a;
- int start;
- double center;
- double weight;
-
- if (!r->buffer) {
- int size = r->filter_length * sizeof (float) * r->channels;
-
- printf ("gst_resample temp buffer\n");
- r->buffer = malloc (size);
- memset (r->buffer, 0, size);
- }
-
- i_ptr = (float *) r->i_buf;
- o_ptr = (float *) r->o_buf;
-
- a = r->i_start;
-#define GETBUF(index,chan) (((index)<0) \
- ? ((float *)(r->buffer))[((index)+r->filter_length)*2+(chan)] \
- : i_ptr[(index)*2+(chan)])
- {
- double sinx, cosx, sind, cosd;
- double x, d;
- double t;
-
- for (i = 0; i < r->o_samples; i++) {
- start = floor (a) - r->filter_length;
- center = a - r->halftaps;
- x = M_PI * (start - center) * r->o_inc;
- sinx = sin (M_PI * (start - center) * r->o_inc);
- cosx = cos (M_PI * (start - center) * r->o_inc);
- d = M_PI * r->o_inc;
- sind = sin (M_PI * r->o_inc);
- cosd = cos (M_PI * r->o_inc);
- c0 = 0;
- c1 = 0;
- for (j = 0; j < r->filter_length; j++) {
- weight = (x == 0) ? 1 : (sinx / x);
-/*printf("j %d sin %g cos %g\n",j,sinx,cosx); */
-/*printf("j %d sin %g x %g sinc %g\n",j,sinx,x,weight); */
- c0 += weight * GETBUF ((start + j), 0);
- c1 += weight * GETBUF ((start + j), 1);
- t = cosx * cosd - sinx * sind;
- sinx = cosx * sind + sinx * cosd;
- cosx = t;
- x += d;
- }
- o_ptr[0] = c0;
- o_ptr[1] = c1;
- o_ptr += 2;
- a += r->o_inc;
- }
- }
-#undef GETBUF
-
- memcpy (r->buffer,
- i_ptr + (r->i_samples - r->filter_length) * r->channels,
- r->filter_length * sizeof (float) * r->channels);
-}
-
-/* only works for channels == 2 ???? */
-void
-gst_resample_sinc_float (gst_resample_t * r)
-{
- double *ptr;
- float *o_ptr;
- int i, j;
- double c0, c1;
- double a;
- int start;
- double center;
- double weight;
- double x0, x, d;
- double scale;
-
- ptr = (double *) r->buffer;
- o_ptr = (float *) r->o_buf;
-
- /* scale provides a cutoff frequency for the low
- * pass filter aspects of sinc(). scale=M_PI
- * will cut off at the input frequency, which is
- * good for up-sampling, but will cause aliasing
- * for downsampling. Downsampling needs to be
- * cut off at o_rate, thus scale=M_PI*r->i_inc. */
- /* actually, it needs to be M_PI*r->i_inc*r->i_inc.
- * Need to research why. */
- scale = M_PI * r->i_inc;
- for (i = 0; i < r->o_samples; i++) {
- a = r->o_start + i * r->o_inc;
- start = floor (a - r->halftaps);
-/*printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1); */
- center = a;
- /*x = M_PI * (start - center) * r->o_inc; */
- /*d = M_PI * r->o_inc; */
- /*x = (start - center) * r->o_inc; */
- x0 = (start - center) * r->o_inc;
- d = r->o_inc;
- c0 = 0;
- c1 = 0;
- for (j = 0; j < r->filter_length; j++) {
- x = x0 + d * j;
- weight = sinc (x * scale * r->i_inc) * scale / M_PI;
- weight *= window_func (x / r->halftaps * r->i_inc);
- c0 += weight * ptr[(start + j + r->filter_length) * 2 + 0];
- c1 += weight * ptr[(start + j + r->filter_length) * 2 + 1];
- }
- o_ptr[0] = c0;
- o_ptr[1] = c1;
- o_ptr += 2;
- }
-}
-
-void
-gst_resample_sinc_ft_float (gst_resample_t * r)
-{
- double *ptr;
- float *o_ptr;
- int i;
-
- /*int j; */
- double c0, c1;
-
- /*double a; */
- double start_f, start_x;
- int start;
- double center;
-
- /*double weight; */
- double x, d;
- double scale;
- int n = 4;
- double *out_tmp;
-
- if (r->hack_union.s.out_tmp_len < r->o_samples) {
- r->hack_union.s.out_tmp = realloc (r->hack_union.s.out_tmp,
- r->o_samples * 2 * sizeof (double));
- r->hack_union.s.out_tmp_len = r->o_samples;
- }
- out_tmp = r->hack_union.s.out_tmp;
-
- scale = r->i_inc; /* cutoff at 22050 */
- /*scale = 1.0; // cutoff at 24000 */
- /*scale = r->i_inc * 0.5; // cutoff at 11025 */
-
- if (!ft) {
- ft = malloc (sizeof (*ft));
- memset (ft, 0, sizeof (*ft));
-
- ft->len = (r->filter_length + 2) * n;
- ft->offset = 1.0 / n;
- ft->start = -ft->len * 0.5 * ft->offset;
-
- ft->func_x = functable_sinc;
- ft->func_dx = functable_dsinc;
- ft->scale = M_PI * scale;
-
- ft->func2_x = functable_window_std;
- ft->func2_dx = functable_window_dstd;
- ft->scale2 = 1.0 / r->halftaps;
-
- functable_init (ft);
-
- /*printf("len=%d offset=%g start=%g\n",ft->len,ft->offset,ft->start); */
- }
-
- ptr = r->buffer;
- o_ptr = (float *) r->o_buf;
-
- center = r->o_start;
- start_x = center - r->halftaps;
- start_f = floor (start_x);
- start_x -= start_f;
- start = start_f;
- for (i = 0; i < r->o_samples; i++) {
- /*start_f = floor(center - r->halftaps); */
-/*printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1); */
- x = start_f - center;
- d = 1;
- c0 = 0;
- c1 = 0;
-/*#define slow */
-#ifdef slow
- for (j = 0; j < r->filter_length; j++) {
- weight = functable_eval (ft, x) * scale;
- /*weight = sinc(M_PI * scale * x)*scale*r->i_inc; */
- /*weight *= window_func(x / r->halftaps); */
- c0 += weight * ptr[(start + j + r->filter_length) * 2 + 0];
- c1 += weight * ptr[(start + j + r->filter_length) * 2 + 1];
- x += d;
- }
-#else
- functable_fir2 (ft,
- &c0, &c1, x, n, ptr + (start + r->filter_length) * 2, r->filter_length);
- c0 *= scale;
- c1 *= scale;
-#endif
-
- out_tmp[2 * i + 0] = c0;
- out_tmp[2 * i + 1] = c1;
- center += r->o_inc;
- start_x += r->o_inc;
- while (start_x >= 1.0) {
- start_f++;
- start_x -= 1.0;
- start++;
- }
- }
-
- if (r->channels == 2) {
- conv_float_double (r->o_buf, out_tmp, 2 * r->o_samples);
- } else {
- conv_float_double_sstr (r->o_buf, out_tmp, r->o_samples,
- 2 * sizeof (double));
- }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "gstresample",
- "Resampling routines for use in audio plugins",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN);
+++ /dev/null
-/* Resampling library
- * Copyright (C) <2001> David Schleef <ds@schleef.org>
- *
- * 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 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_RESAMPLE_H__
-#define __GST_RESAMPLE_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef enum {
- GST_RESAMPLE_NEAREST = 0,
- GST_RESAMPLE_BILINEAR,
- GST_RESAMPLE_SINC_SLOW,
- GST_RESAMPLE_SINC,
-} gst_resample_method;
-
-typedef enum {
- GST_RESAMPLE_S16 = 0,
- GST_RESAMPLE_FLOAT
-} gst_resample_format;
-
-typedef struct gst_resample_s gst_resample_t;
-
-struct gst_resample_s {
- /* parameters */
-
- gst_resample_method method;
- int channels;
- int verbose;
- gst_resample_format format;
-
- int filter_length;
-
- double i_rate;
- double o_rate;
-
- void *priv;
-
- void *(*get_buffer)(void *priv, unsigned int size);
-
- /* internal parameters */
-
- double halftaps;
-
- /* filter state */
-
- void *buffer;
- int buffer_len;
-
- double i_start;
- double o_start;
-
- double i_start_buf;
- double i_end_buf;
-
- double i_inc;
- double o_inc;
-
- double i_end;
- double o_end;
-
- int i_samples;
- int o_samples;
-
- void *i_buf, *o_buf;
-
- double acc[2];
- union {
- struct {
- double *out_tmp;
- int out_tmp_len;
- } s;
- double padding[8];
- } hack_union;
-
- /* methods */
- void (*scale)(gst_resample_t *r);
-
- double ack;
-
-};
-
-void gst_resample_init(gst_resample_t *r);
-
-void gst_resample_reinit(gst_resample_t *r);
-
-void gst_resample_close (gst_resample_t * r);
-
-void gst_resample_scale(gst_resample_t *r, void *i_buf, unsigned int size);
-
-G_END_DECLS
-
-#endif /* __GST_RESAMPLE_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="resample"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D6789B}"
- RootNamespace="resample"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstresample.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="resample.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/resample.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstresample.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstresample.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="resample.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstresample.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\resample.c">
- </File>
- <File
- RelativePath=".\dtos.c">
- </File>
- <File
- RelativePath=".\dtof.c">
- </File>
- <File
- RelativePath=".\functable.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\resample.h">
- </File>
- <File
- RelativePath=".\private.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <sys/time.h>
-
-#include <resample.h>
-
-#define AMP 16000
-#define I_RATE 48000
-#define O_RATE 44100
-/*#define O_RATE 24000 */
-
-/*#define test_func(x) 1 */
-/*#define test_func(x) sin(2*M_PI*(x)*10) */
-/*#define test_func(x) sin(2*M_PI*(x)*(x)*1000) */
-#define test_func(x) sin(2*M_PI*(x)*(x)*12000)
-
-short i_buf[I_RATE * 2 * 2];
-short o_buf[O_RATE * 2 * 2];
-
-static int i_offset;
-static int o_offset;
-
-FILE *out;
-
-void test_res1 (void);
-void test_res2 (void);
-void test_res3 (void);
-void test_res4 (void);
-void test_res5 (void);
-void test_res6 (void);
-void test_res7 (void);
-
-int
-main (int argc, char *argv[])
-{
- out = fopen ("out", "w");
-
- test_res7 ();
-
- return 0;
-}
-
-void *
-get_buffer (void *priv, unsigned int size)
-{
- void *ret;
-
- ret = ((void *) o_buf) + o_offset;
- o_offset += size;
- return ret;
-}
-
-struct timeval start_time;
-void
-start_timer (void)
-{
- gettimeofday (&start_time, NULL);
- /*printf("start %ld.%06ld\n",start_time.tv_sec,start_time.tv_usec); */
-}
-
-void
-end_timer (void)
-{
- struct timeval end_time;
- double diff;
-
- gettimeofday (&end_time, NULL);
- /*printf("end %ld.%06ld\n",end_time.tv_sec,end_time.tv_usec); */
- diff = (end_time.tv_sec - start_time.tv_sec) +
- 1e-6 * (end_time.tv_usec - start_time.tv_usec);
-
- printf ("time %g\n", diff);
-
-}
-
-void
-test_res1 (void)
-{
- resample_t *r;
- int i;
- double sum10k, sum22k;
- double f;
- int n10k, n22k;
- double x;
-
- for (i = 0; i < I_RATE; i++) {
- i_buf[i * 2 + 0] = rint (AMP * test_func ((double) i / I_RATE));
- /*i_buf[i*2+1] = rint(AMP * test_func((double)i/I_RATE)); */
- i_buf[i * 2 + 1] = (i < 1000) ? AMP : 0;
- }
-
- r = malloc (sizeof (resample_t));
- memset (r, 0, sizeof (resample_t));
-
- r->i_rate = I_RATE;
- r->o_rate = O_RATE;
- /*r->method = RESAMPLE_SINC_SLOW; */
- r->method = RESAMPLE_SINC;
- r->channels = 2;
- /*r->verbose = 1; */
- r->filter_length = 64;
- r->get_buffer = get_buffer;
-
- resample_init (r);
-
- start_timer ();
-#define blocked
-#ifdef blocked
- for (i = 0; i + 256 < I_RATE; i += 256) {
- resample_scale (r, i_buf + i * 2, 256 * 2 * 2);
- }
- if (I_RATE - i) {
- resample_scale (r, i_buf + i * 2, (I_RATE - i) * 2 * 2);
- }
-#else
- resample_scale (r, i_buf, I_RATE * 2 * 2);
-#endif
- end_timer ();
-
- for (i = 0; i < O_RATE; i++) {
- f = AMP * test_func ((double) i / O_RATE);
- /*f = rint(AMP*test_func((double)i/O_RATE)); */
- fprintf (out, "%d %d %d %g %g\n", i,
- o_buf[2 * i + 0], o_buf[2 * i + 1], f, o_buf[2 * i + 0] - f);
- }
-
- sum10k = 0;
- sum22k = 0;
- n10k = 0;
- n22k = 0;
- for (i = 0; i < O_RATE; i++) {
- f = AMP * test_func ((double) i / O_RATE);
- /*f = rint(AMP*test_func((double)i/O_RATE)); */
- x = o_buf[2 * i + 0] - f;
- if (((0.5 * i) / O_RATE * I_RATE) < 10000) {
- sum10k += x * x;
- n10k++;
- }
- if (((0.5 * i) / O_RATE * I_RATE) < 22050) {
- sum22k += x * x;
- n22k++;
- }
- }
- printf ("average error 10k=%g 22k=%g\n",
- sqrt (sum10k / n10k), sqrt (sum22k / n22k));
-}
-
-
-void
-test_res2 (void)
-{
- functable_t *t;
- int i;
- double x;
- double f1, f2;
-
- t = malloc (sizeof (*t));
- memset (t, 0, sizeof (*t));
-
- t->start = -50.0;
- t->offset = 1;
- t->len = 100;
-
- t->func_x = functable_sinc;
- t->func_dx = functable_dsinc;
-
- functable_init (t);
-
- for (i = 0; i < 1000; i++) {
- x = -50.0 + 0.1 * i;
- f1 = functable_sinc (NULL, x);
- f2 = functable_eval (t, x);
- fprintf (out, "%d %g %g %g\n", i, f1, f2, f1 - f2);
- }
-}
-
-void
-test_res3 (void)
-{
- functable_t *t;
- int i;
- double x;
- double f1, f2;
- int n = 1;
-
- t = malloc (sizeof (*t));
- memset (t, 0, sizeof (*t));
-
- t->start = -50.0;
- t->offset = 1.0 / n;
- t->len = 100 * n;
-
- t->func_x = functable_sinc;
- t->func_dx = functable_dsinc;
-
- t->func2_x = functable_window_std;
- t->func2_dx = functable_window_dstd;
-
- t->scale = 1.0;
- t->scale2 = 1.0 / (M_PI * 16);
-
- functable_init (t);
-
- for (i = 0; i < 1000 * n; i++) {
- x = -50.0 + 0.1 / n * i;
- f1 = functable_sinc (NULL, t->scale * x) *
- functable_window_std (NULL, t->scale2 * x);
- f2 = functable_eval (t, x);
- fprintf (out, "%d %g %g %g\n", i, f1, f2, f2 - f1);
- }
-}
-
-double
-sinc_poly (double x)
-{
-#define INV3FAC 1.66666666666666666e-1
-#define INV5FAC 8.33333333333333333e-3
-#define INV7FAC 1.984126984e-4
-#define INV9FAC 2.755731922e-6
-#define INV11FAC 2.505210839e-8
- double x2 = x * x;
-
- return 1 - x2 * INV3FAC + x2 * x2 * INV5FAC - x2 * x2 * x2 * INV7FAC;
- /*+ x2 * x2 * x2 * x2 * INV9FAC */
- /*- x2 * x2 * x2 * x2 * x2 * INV11FAC; */
-}
-
-void
-test_res4 (void)
-{
- int i;
- double x, f1, f2;
-
- for (i = 1; i < 100; i++) {
- x = 0.01 * i;
- f1 = 1 - sin (x) / x;
- f2 = 1 - sinc_poly (x);
-
- fprintf (out, "%g %.20g %.20g %.20g\n", x, f1, f2, f2 - f1);
- }
-}
-
-
-void
-test_res5 (void)
-{
- int i;
- double sum;
-
- start_timer ();
- sum = 0;
- for (i = 0; i < I_RATE; i++) {
- sum += i_buf[i * 2];
- }
- end_timer ();
- i_buf[0] = sum;
-}
-
-
-void
-short_to_double (double *d, short *x)
-{
- *d = *x;
-}
-
-void
-short_to_float (float *f, short *x)
-{
- *f = *x;
-}
-
-void
-float_to_double (double *f, float *x)
-{
- *f = *x;
-}
-
-void
-double_to_short (short *f, double *x)
-{
- *f = *x;
-}
-
-double res6_tmp[1000];
-
-void
-test_res6 (void)
-{
- int i;
-
- for (i = 0; i < I_RATE; i++) {
- i_buf[i] = rint (AMP * test_func ((double) i / I_RATE));
- }
-
- conv_double_short_ref (res6_tmp, i_buf, 1000);
- for (i = 0; i < 1000; i++) {
- res6_tmp[i] *= 3.0;
- }
- conv_short_double_ppcasm (o_buf, res6_tmp, 1000);
-
- for (i = 0; i < 1000; i++) {
- fprintf (out, "%d %d %g %d\n", i, i_buf[i], res6_tmp[i], o_buf[i]);
- }
-}
-
-void
-test_res7 (void)
-{
- resample_t *r;
- int i;
- double sum10k, sum22k;
- double f;
- int n10k, n22k;
- double x;
-
- for (i = 0; i < I_RATE; i++) {
- i_buf[i] = rint (AMP * test_func ((double) i / I_RATE));
- }
-
- r = malloc (sizeof (resample_t));
- memset (r, 0, sizeof (resample_t));
-
- r->i_rate = I_RATE;
- r->o_rate = O_RATE;
- /*r->method = RESAMPLE_SINC_SLOW; */
- r->method = RESAMPLE_SINC;
- r->channels = 1;
- /*r->verbose = 1; */
- r->filter_length = 64;
- r->get_buffer = get_buffer;
-
- resample_init (r);
-
- start_timer ();
-#define blocked
-#ifdef blocked
- for (i = 0; i + 256 < I_RATE; i += 256) {
- resample_scale (r, i_buf + i, 256 * 2);
- }
- if (I_RATE - i) {
- resample_scale (r, i_buf + i, (I_RATE - i) * 2);
- }
-#else
- resample_scale (r, i_buf, I_RATE * 2);
-#endif
- end_timer ();
-
- for (i = 0; i < O_RATE; i++) {
- f = AMP * test_func ((double) i / O_RATE);
- /*f = rint(AMP*test_func((double)i/O_RATE)); */
- fprintf (out, "%d %d %d %g %g\n", i, o_buf[i], 0, f, o_buf[i] - f);
- }
-
- sum10k = 0;
- sum22k = 0;
- n10k = 0;
- n22k = 0;
- for (i = 0; i < O_RATE; i++) {
- f = AMP * test_func ((double) i / O_RATE);
- /*f = rint(AMP*test_func((double)i/O_RATE)); */
- x = o_buf[i] - f;
- if (((0.5 * i) / O_RATE * I_RATE) < 10000) {
- sum10k += x * x;
- n10k++;
- }
- if (((0.5 * i) / O_RATE * I_RATE) < 22050) {
- sum22k += x * x;
- n22k++;
- }
- }
- printf ("average error 10k=%g 22k=%g\n",
- sqrt (sum10k / n10k), sqrt (sum22k / n22k));
-}
+++ /dev/null
-plugin_LTLIBRARIES = libgstriff.la
-
-libgstriff_la_SOURCES = \
- riff.c \
- riff-media.c \
- riff-read.c
-
-libgstriffincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/riff
-libgstriffinclude_HEADERS = \
- riff-ids.h \
- riff-media.h \
- riff-read.h
-
-libgstriff_la_LIBADD =
-libgstriff_la_CFLAGS = $(GST_CFLAGS)
-libgstriff_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+++ /dev/null
-/* GStreamer RIFF I/O
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * riff-ids.h: RIFF IDs and structs
- *
- * 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_RIFF_IDS_H__
-#define __GST_RIFF_IDS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-/* RIFF types */
-#define GST_RIFF_RIFF_WAVE GST_MAKE_FOURCC ('W','A','V','E')
-#define GST_RIFF_RIFF_AVI GST_MAKE_FOURCC ('A','V','I',' ')
-#define GST_RIFF_RIFF_CDXA GST_MAKE_FOURCC ('C','D','X','A')
-
-/* tags */
-#define GST_RIFF_TAG_RIFF GST_MAKE_FOURCC ('R','I','F','F')
-#define GST_RIFF_TAG_RIFX GST_MAKE_FOURCC ('R','I','F','X')
-#define GST_RIFF_TAG_LIST GST_MAKE_FOURCC ('L','I','S','T')
-#define GST_RIFF_TAG_avih GST_MAKE_FOURCC ('a','v','i','h')
-#define GST_RIFF_TAG_strd GST_MAKE_FOURCC ('s','t','r','d')
-#define GST_RIFF_TAG_strn GST_MAKE_FOURCC ('s','t','r','n')
-#define GST_RIFF_TAG_strh GST_MAKE_FOURCC ('s','t','r','h')
-#define GST_RIFF_TAG_strf GST_MAKE_FOURCC ('s','t','r','f')
-#define GST_RIFF_TAG_vedt GST_MAKE_FOURCC ('v','e','d','t')
-#define GST_RIFF_TAG_JUNK GST_MAKE_FOURCC ('J','U','N','K')
-#define GST_RIFF_TAG_idx1 GST_MAKE_FOURCC ('i','d','x','1')
-#define GST_RIFF_TAG_dmlh GST_MAKE_FOURCC ('d','m','l','h')
-/* WAV stuff */
-#define GST_RIFF_TAG_fmt GST_MAKE_FOURCC ('f','m','t',' ')
-#define GST_RIFF_TAG_data GST_MAKE_FOURCC ('d','a','t','a')
-#define GST_RIFF_TAG_plst GST_MAKE_FOURCC ('p','l','s','t')
-#define GST_RIFF_TAG_cue GST_MAKE_FOURCC ('c','u','e',' ')
-/* LIST types */
-#define GST_RIFF_LIST_movi GST_MAKE_FOURCC ('m','o','v','i')
-#define GST_RIFF_LIST_hdrl GST_MAKE_FOURCC ('h','d','r','l')
-#define GST_RIFF_LIST_odml GST_MAKE_FOURCC ('o','d','m','l')
-#define GST_RIFF_LIST_strl GST_MAKE_FOURCC ('s','t','r','l')
-#define GST_RIFF_LIST_INFO GST_MAKE_FOURCC ('I','N','F','O')
-#define GST_RIFF_LIST_AVIX GST_MAKE_FOURCC ('A','V','I','X')
-#define GST_RIFF_LIST_adtl GST_MAKE_FOURCC ('a','d','t','l')
-
-/* fcc types */
-#define GST_RIFF_FCC_vids GST_MAKE_FOURCC ('v','i','d','s')
-#define GST_RIFF_FCC_auds GST_MAKE_FOURCC ('a','u','d','s')
-#define GST_RIFF_FCC_pads GST_MAKE_FOURCC ('p','a','d','s')
-#define GST_RIFF_FCC_txts GST_MAKE_FOURCC ('t','x','t','s')
-#define GST_RIFF_FCC_vidc GST_MAKE_FOURCC ('v','i','d','c')
-#define GST_RIFF_FCC_iavs GST_MAKE_FOURCC ('i','a','v','s')
-/* fcc handlers */
-#define GST_RIFF_FCCH_RLE GST_MAKE_FOURCC ('R','L','E',' ')
-#define GST_RIFF_FCCH_msvc GST_MAKE_FOURCC ('m','s','v','c')
-#define GST_RIFF_FCCH_MSVC GST_MAKE_FOURCC ('M','S','V','C')
-
-/* INFO types - see http://www.saettler.com/RIFFMCI/riffmci.html */
-#define GST_RIFF_INFO_IARL GST_MAKE_FOURCC ('I','A','R','L') /* location */
-#define GST_RIFF_INFO_IART GST_MAKE_FOURCC ('I','A','R','T') /* artist */
-#define GST_RIFF_INFO_ICMS GST_MAKE_FOURCC ('I','C','M','S') /* commissioned */
-#define GST_RIFF_INFO_ICMT GST_MAKE_FOURCC ('I','C','M','T') /* comment */
-#define GST_RIFF_INFO_ICOP GST_MAKE_FOURCC ('I','C','O','P') /* copyright */
-#define GST_RIFF_INFO_ICRD GST_MAKE_FOURCC ('I','C','R','D') /* creation date */
-#define GST_RIFF_INFO_ICRP GST_MAKE_FOURCC ('I','C','R','P') /* cropped */
-#define GST_RIFF_INFO_IDIM GST_MAKE_FOURCC ('I','D','I','M') /* dimensions */
-#define GST_RIFF_INFO_IDPI GST_MAKE_FOURCC ('I','D','P','I') /* dots-per-inch */
-#define GST_RIFF_INFO_IENG GST_MAKE_FOURCC ('I','E','N','G') /* engineer(s) */
-#define GST_RIFF_INFO_IGNR GST_MAKE_FOURCC ('I','G','N','R') /* genre */
-#define GST_RIFF_INFO_IKEY GST_MAKE_FOURCC ('I','K','E','Y') /* keywords */
-#define GST_RIFF_INFO_ILGT GST_MAKE_FOURCC ('I','L','G','T') /* lightness */
-#define GST_RIFF_INFO_IMED GST_MAKE_FOURCC ('I','M','E','D') /* medium */
-#define GST_RIFF_INFO_INAM GST_MAKE_FOURCC ('I','N','A','M') /* name */
-#define GST_RIFF_INFO_IPLT GST_MAKE_FOURCC ('I','P','L','T') /* palette setting */
-#define GST_RIFF_INFO_IPRD GST_MAKE_FOURCC ('I','P','R','D') /* product */
-#define GST_RIFF_INFO_ISBJ GST_MAKE_FOURCC ('I','S','B','J') /* subject */
-#define GST_RIFF_INFO_ISFT GST_MAKE_FOURCC ('I','S','F','T') /* software */
-#define GST_RIFF_INFO_ISHP GST_MAKE_FOURCC ('I','S','H','P') /* sharpness */
-#define GST_RIFF_INFO_ISRC GST_MAKE_FOURCC ('I','S','R','C') /* source */
-#define GST_RIFF_INFO_ISRF GST_MAKE_FOURCC ('I','S','R','F') /* source form */
-#define GST_RIFF_INFO_ITCH GST_MAKE_FOURCC ('I','T','C','H') /* technician(s) */
-
-/*********Chunk Names***************/
-#define GST_RIFF_FF00 GST_MAKE_FOURCC (0xFF,0xFF,0x00,0x00)
-#define GST_RIFF_00 GST_MAKE_FOURCC ('0', '0',0x00,0x00)
-#define GST_RIFF_01 GST_MAKE_FOURCC ('0', '1',0x00,0x00)
-#define GST_RIFF_02 GST_MAKE_FOURCC ('0', '2',0x00,0x00)
-#define GST_RIFF_03 GST_MAKE_FOURCC ('0', '3',0x00,0x00)
-#define GST_RIFF_04 GST_MAKE_FOURCC ('0', '4',0x00,0x00)
-#define GST_RIFF_05 GST_MAKE_FOURCC ('0', '5',0x00,0x00)
-#define GST_RIFF_06 GST_MAKE_FOURCC ('0', '6',0x00,0x00)
-#define GST_RIFF_07 GST_MAKE_FOURCC ('0', '7',0x00,0x00)
-#define GST_RIFF_00pc GST_MAKE_FOURCC ('0', '0', 'p', 'c')
-#define GST_RIFF_01pc GST_MAKE_FOURCC ('0', '1', 'p', 'c')
-#define GST_RIFF_00dc GST_MAKE_FOURCC ('0', '0', 'd', 'c')
-#define GST_RIFF_00dx GST_MAKE_FOURCC ('0', '0', 'd', 'x')
-#define GST_RIFF_00db GST_MAKE_FOURCC ('0', '0', 'd', 'b')
-#define GST_RIFF_00xx GST_MAKE_FOURCC ('0', '0', 'x', 'x')
-#define GST_RIFF_00id GST_MAKE_FOURCC ('0', '0', 'i', 'd')
-#define GST_RIFF_00rt GST_MAKE_FOURCC ('0', '0', 'r', 't')
-#define GST_RIFF_0021 GST_MAKE_FOURCC ('0', '0', '2', '1')
-#define GST_RIFF_00iv GST_MAKE_FOURCC ('0', '0', 'i', 'v')
-#define GST_RIFF_0031 GST_MAKE_FOURCC ('0', '0', '3', '1')
-#define GST_RIFF_0032 GST_MAKE_FOURCC ('0', '0', '3', '2')
-#define GST_RIFF_00vc GST_MAKE_FOURCC ('0', '0', 'v', 'c')
-#define GST_RIFF_00xm GST_MAKE_FOURCC ('0', '0', 'x', 'm')
-#define GST_RIFF_01wb GST_MAKE_FOURCC ('0', '1', 'w', 'b')
-#define GST_RIFF_01dc GST_MAKE_FOURCC ('0', '1', 'd', 'c')
-#define GST_RIFF_00__ GST_MAKE_FOURCC ('0', '0', '_', '_')
-
-/*********VIDEO CODECS**************/
-#define GST_RIFF_cram GST_MAKE_FOURCC ('c', 'r', 'a', 'm')
-#define GST_RIFF_CRAM GST_MAKE_FOURCC ('C', 'R', 'A', 'M')
-#define GST_RIFF_wham GST_MAKE_FOURCC ('w', 'h', 'a', 'm')
-#define GST_RIFF_WHAM GST_MAKE_FOURCC ('W', 'H', 'A', 'M')
-#define GST_RIFF_rgb GST_MAKE_FOURCC (0x00,0x00,0x00,0x00)
-#define GST_RIFF_RGB GST_MAKE_FOURCC ('R', 'G', 'B', ' ')
-#define GST_RIFF_rle8 GST_MAKE_FOURCC (0x01,0x00,0x00,0x00)
-#define GST_RIFF_RLE8 GST_MAKE_FOURCC ('R', 'L', 'E', '8')
-#define GST_RIFF_rle4 GST_MAKE_FOURCC (0x02,0x00,0x00,0x00)
-#define GST_RIFF_RLE4 GST_MAKE_FOURCC ('R', 'L', 'E', '4')
-#define GST_RIFF_none GST_MAKE_FOURCC (0x00,0x00,0xFF,0xFF)
-#define GST_RIFF_NONE GST_MAKE_FOURCC ('N', 'O', 'N', 'E')
-#define GST_RIFF_pack GST_MAKE_FOURCC (0x01,0x00,0xFF,0xFF)
-#define GST_RIFF_PACK GST_MAKE_FOURCC ('P', 'A', 'C', 'K')
-#define GST_RIFF_tran GST_MAKE_FOURCC (0x02,0x00,0xFF,0xFF)
-#define GST_RIFF_TRAN GST_MAKE_FOURCC ('T', 'R', 'A', 'N')
-#define GST_RIFF_ccc GST_MAKE_FOURCC (0x03,0x00,0xFF,0xFF)
-#define GST_RIFF_CCC GST_MAKE_FOURCC ('C', 'C', 'C', ' ')
-#define GST_RIFF_cyuv GST_MAKE_FOURCC ('c', 'y', 'u', 'v')
-#define GST_RIFF_CYUV GST_MAKE_FOURCC ('C', 'Y', 'U', 'V')
-#define GST_RIFF_jpeg GST_MAKE_FOURCC (0x04,0x00,0xFF,0xFF)
-#define GST_RIFF_JPEG GST_MAKE_FOURCC ('J', 'P', 'E', 'G')
-#define GST_RIFF_MJPG GST_MAKE_FOURCC ('M', 'J', 'P', 'G')
-#define GST_RIFF_mJPG GST_MAKE_FOURCC ('m', 'J', 'P', 'G')
-#define GST_RIFF_IJPG GST_MAKE_FOURCC ('I', 'J', 'P', 'G')
-#define GST_RIFF_rt21 GST_MAKE_FOURCC ('r', 't', '2', '1')
-#define GST_RIFF_RT21 GST_MAKE_FOURCC ('R', 'T', '2', '1')
-#define GST_RIFF_iv31 GST_MAKE_FOURCC ('i', 'v', '3', '1')
-#define GST_RIFF_IV31 GST_MAKE_FOURCC ('I', 'V', '3', '1')
-#define GST_RIFF_iv32 GST_MAKE_FOURCC ('i', 'v', '3', '2')
-#define GST_RIFF_IV32 GST_MAKE_FOURCC ('I', 'V', '3', '2')
-#define GST_RIFF_iv41 GST_MAKE_FOURCC ('i', 'v', '4', '1')
-#define GST_RIFF_IV41 GST_MAKE_FOURCC ('I', 'V', '4', '1')
-#define GST_RIFF_iv50 GST_MAKE_FOURCC ('i', 'v', '5', '0')
-#define GST_RIFF_IV50 GST_MAKE_FOURCC ('I', 'V', '5', '0')
-#define GST_RIFF_cvid GST_MAKE_FOURCC ('c', 'v', 'i', 'd')
-#define GST_RIFF_CVID GST_MAKE_FOURCC ('C', 'V', 'I', 'D')
-#define GST_RIFF_ULTI GST_MAKE_FOURCC ('U', 'L', 'T', 'I')
-#define GST_RIFF_ulti GST_MAKE_FOURCC ('u', 'l', 't', 'i')
-#define GST_RIFF_YUV9 GST_MAKE_FOURCC ('Y', 'V', 'U', '9')
-#define GST_RIFF_YVU9 GST_MAKE_FOURCC ('Y', 'U', 'V', '9')
-#define GST_RIFF_XMPG GST_MAKE_FOURCC ('X', 'M', 'P', 'G')
-#define GST_RIFF_xmpg GST_MAKE_FOURCC ('x', 'm', 'p', 'g')
-#define GST_RIFF_VDOW GST_MAKE_FOURCC ('V', 'D', 'O', 'W')
-#define GST_RIFF_MVI1 GST_MAKE_FOURCC ('M', 'V', 'I', '1')
-#define GST_RIFF_v422 GST_MAKE_FOURCC ('v', '4', '2', '2')
-#define GST_RIFF_V422 GST_MAKE_FOURCC ('V', '4', '2', '2')
-#define GST_RIFF_mvi1 GST_MAKE_FOURCC ('m', 'v', 'i', '1')
-#define GST_RIFF_MPIX GST_MAKE_FOURCC (0x04,0x00, 'i', '1') /* MotionPixels munged their id */
-#define GST_RIFF_AURA GST_MAKE_FOURCC ('A', 'U', 'R', 'A')
-#define GST_RIFF_DMB1 GST_MAKE_FOURCC ('D', 'M', 'B', '1')
-#define GST_RIFF_dmb1 GST_MAKE_FOURCC ('d', 'm', 'b', '1')
-
-#define GST_RIFF_BW10 GST_MAKE_FOURCC ('B', 'W', '1', '0')
-#define GST_RIFF_bw10 GST_MAKE_FOURCC ('b', 'w', '1', '0')
-
-#define GST_RIFF_yuy2 GST_MAKE_FOURCC ('y', 'u', 'y', '2')
-#define GST_RIFF_YUY2 GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')
-#define GST_RIFF_YUV8 GST_MAKE_FOURCC ('Y', 'U', 'V', '8')
-#define GST_RIFF_WINX GST_MAKE_FOURCC ('W', 'I', 'N', 'X')
-#define GST_RIFF_WPY2 GST_MAKE_FOURCC ('W', 'P', 'Y', '2')
-#define GST_RIFF_m263 GST_MAKE_FOURCC ('m', '2', '6', '3')
-#define GST_RIFF_M263 GST_MAKE_FOURCC ('M', '2', '6', '3')
-#define GST_RIFF_H263 GST_MAKE_FOURCC ('H', '2', '6', '3')
-#define GST_RIFF_i263 GST_MAKE_FOURCC ('i', '2', '6', '3')
-#define GST_RIFF_L263 GST_MAKE_FOURCC ('L', '2', '6', '3')
-#define GST_RIFF_x263 GST_MAKE_FOURCC ('x', '2', '6', '3')
-#define GST_RIFF_VSSH GST_MAKE_FOURCC ( 'V', 'S', 'S', 'H') /* H2.64 */
-
-#define GST_RIFF_Q1_0 GST_MAKE_FOURCC ('Q', '1',0x2e, '0')
-#define GST_RIFF_SFMC GST_MAKE_FOURCC ('S', 'F', 'M', 'C')
-
-#define GST_RIFF_y41p GST_MAKE_FOURCC ('y', '4', '1', 'p')
-#define GST_RIFF_Y41P GST_MAKE_FOURCC ('Y', '4', '1', 'P')
-#define GST_RIFF_yv12 GST_MAKE_FOURCC ('y', 'v', '1', '2')
-#define GST_RIFF_YV12 GST_MAKE_FOURCC ('Y', 'V', '1', '2')
-#define GST_RIFF_vixl GST_MAKE_FOURCC ('v', 'i', 'x', 'l')
-#define GST_RIFF_VIXL GST_MAKE_FOURCC ('V', 'I', 'X', 'L')
-#define GST_RIFF_iyuv GST_MAKE_FOURCC ('i', 'y', 'u', 'v')
-#define GST_RIFF_IYUV GST_MAKE_FOURCC ('I', 'Y', 'U', 'V')
-#define GST_RIFF_i420 GST_MAKE_FOURCC ('i', '4', '2', '0')
-#define GST_RIFF_I420 GST_MAKE_FOURCC ('I', '4', '2', '0')
-#define GST_RIFF_vyuy GST_MAKE_FOURCC ('v', 'y', 'u', 'y')
-#define GST_RIFF_VYUY GST_MAKE_FOURCC ('V', 'Y', 'U', 'Y')
-
-#define GST_RIFF_DIV3 GST_MAKE_FOURCC ('D', 'I', 'V', '3')
-
-#define GST_RIFF_rpza GST_MAKE_FOURCC ('r', 'p', 'z', 'a')
-/* And this here's the mistakes that need to be supported */
-#define GST_RIFF_azpr GST_MAKE_FOURCC ('a', 'z', 'p', 'r') /* recognize Apple's rpza mangled? */
-
-/*********** FND in MJPG **********/
-#define GST_RIFF_ISFT GST_MAKE_FOURCC ('I', 'S', 'F', 'T')
-#define GST_RIFF_IDIT GST_MAKE_FOURCC ('I', 'D', 'I', 'T')
-
-#define GST_RIFF_00AM GST_MAKE_FOURCC ('0', '0', 'A', 'M')
-#define GST_RIFF_DISP GST_MAKE_FOURCC ('D', 'I', 'S', 'P')
-#define GST_RIFF_ISBJ GST_MAKE_FOURCC ('I', 'S', 'B', 'J')
-
-#define GST_RIFF_rec GST_MAKE_FOURCC ('r', 'e', 'c', ' ')
-
-/* common data structures */
-typedef struct _gst_riff_strh {
- guint32 type; /* stream type */
- guint32 fcc_handler; /* fcc_handler */
- guint32 flags;
-/* flags values */
-#define GST_RIFF_STRH_DISABLED 0x000000001
-#define GST_RIFF_STRH_VIDEOPALCHANGES 0x000010000
- guint32 priority;
- guint32 init_frames; /* initial frames (???) */
- guint32 scale;
- guint32 rate;
- guint32 start;
- guint32 length;
- guint32 bufsize; /* suggested buffer size */
- guint32 quality;
- guint32 samplesize;
- /* XXX 16 bytes ? */
-} gst_riff_strh;
-
-typedef struct _gst_riff_strf_vids { /* == BitMapInfoHeader */
- guint32 size;
- guint32 width;
- guint32 height;
- guint16 planes;
- guint16 bit_cnt;
- guint32 compression;
- guint32 image_size;
- guint32 xpels_meter;
- guint32 ypels_meter;
- guint32 num_colors; /* used colors */
- guint32 imp_colors; /* important colors */
- /* may be more for some codecs */
-} gst_riff_strf_vids;
-
-
-typedef struct _gst_riff_strf_auds { /* == WaveHeader (?) */
- guint16 format;
-/**** from public Microsoft RIFF docs ******/
-#define GST_RIFF_WAVE_FORMAT_UNKNOWN (0x0000)
-#define GST_RIFF_WAVE_FORMAT_PCM (0x0001)
-#define GST_RIFF_WAVE_FORMAT_ADPCM (0x0002)
-#define GST_RIFF_WAVE_FORMAT_IBM_CVSD (0x0005)
-#define GST_RIFF_WAVE_FORMAT_ALAW (0x0006)
-#define GST_RIFF_WAVE_FORMAT_MULAW (0x0007)
-#define GST_RIFF_WAVE_FORMAT_OKI_ADPCM (0x0010)
-#define GST_RIFF_WAVE_FORMAT_DVI_ADPCM (0x0011)
-#define GST_RIFF_WAVE_FORMAT_DIGISTD (0x0015)
-#define GST_RIFF_WAVE_FORMAT_DIGIFIX (0x0016)
-#define GST_RIFF_WAVE_FORMAT_YAMAHA_ADPCM (0x0020)
-#define GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH (0x0022)
-#define GST_RIFF_WAVE_FORMAT_GSM610 (0x0031)
-#define GST_RIFF_WAVE_FORMAT_MSN (0x0032)
-#define GST_RIFF_WAVE_FORMAT_ITU_G721_ADPCM (0x0040)
-#define GST_RIFF_WAVE_FORMAT_MPEGL12 (0x0050)
-#define GST_RIFF_WAVE_FORMAT_MPEGL3 (0x0055)
-#define GST_RIFF_IBM_FORMAT_MULAW (0x0101)
-#define GST_RIFF_IBM_FORMAT_ALAW (0x0102)
-#define GST_RIFF_IBM_FORMAT_ADPCM (0x0103)
-#define GST_RIFF_WAVE_FORMAT_WMAV1 (0x0160)
-#define GST_RIFF_WAVE_FORMAT_WMAV2 (0x0161)
-#define GST_RIFF_WAVE_FORMAT_WMAV3 (0x0162)
-#define GST_RIFF_WAVE_FORMAT_SONY_ATRAC3 (0x0270)
-#define GST_RIFF_WAVE_FORMAT_A52 (0x2000)
-#define GST_RIFF_WAVE_FORMAT_VORBIS1 (0x674f)
-#define GST_RIFF_WAVE_FORMAT_VORBIS2 (0x6750)
-#define GST_RIFF_WAVE_FORMAT_VORBIS3 (0x6751)
-#define GST_RIFF_WAVE_FORMAT_VORBIS1PLUS (0x676f)
-#define GST_RIFF_WAVE_FORMAT_VORBIS2PLUS (0x6770)
-#define GST_RIFF_WAVE_FORMAT_VORBIS3PLUS (0x6771)
-#define GST_RIFF_WAVE_FORMAT_GSM_AMR_CBR (0x7A21)
-#define GST_RIFF_WAVE_FORMAT_GSM_AMR_VBR (0x7A22)
- guint16 channels;
- guint32 rate;
- guint32 av_bps;
- guint16 blockalign;
- guint16 size;
-} gst_riff_strf_auds;
-
-typedef struct _gst_riff_strf_iavs {
- guint32 DVAAuxSrc;
- guint32 DVAAuxCtl;
- guint32 DVAAuxSrc1;
- guint32 DVAAuxCtl1;
- guint32 DVVAuxSrc;
- guint32 DVVAuxCtl;
- guint32 DVReserved1;
- guint32 DVReserved2;
-} gst_riff_strf_iavs;
-
-typedef struct _gst_riff_index_entry {
- guint32 id;
- guint32 flags;
-#define GST_RIFF_IF_LIST (0x00000001L)
-#define GST_RIFF_IF_KEYFRAME (0x00000010L)
-#define GST_RIFF_IF_NO_TIME (0x00000100L)
-#define GST_RIFF_IF_COMPUSE (0x0FFF0000L)
- guint32 offset;
- guint32 size;
-} gst_riff_index_entry;
-
-typedef struct _gst_riff_dmlh {
- guint32 totalframes;
-} gst_riff_dmlh;
-
-G_END_DECLS
-
-#endif /* __GST_RIFF_IDS_H__ */
+++ /dev/null
-/* GStreamer RIFF I/O
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * riff-media.h: RIFF-id to/from caps routines
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "riff-ids.h"
-#include "riff-media.h"
-
-/**
- * gst_riff_create_video_caps_with_data:
- * @codec_fcc: fourCC codec for this codec.
- * @strh: pointer to the strh stream header structure.
- * @strf: pointer to the strf stream header structure, including any
- * data that is within the range of strf.size, but excluding any
- * additional data withint this chunk but outside strf.size.
- * @strf_data: a #GstBuffer containing the additional data in the strf
- * chunk outside reach of strf.size. Ususally a palette.
- * @strd_data: a #GstBuffer containing the data in the strd stream header
- * chunk. Usually codec initialization data.
- * @codec_name: if given, will be filled with a human-readable codec name.
- */
-
-GstCaps *
-gst_riff_create_video_caps_with_data (guint32 codec_fcc,
- gst_riff_strh * strh, gst_riff_strf_vids * strf,
- GstBuffer * strf_data, GstBuffer * strd_data, char **codec_name)
-{
- GstCaps *caps = NULL;
- GstBuffer *palette = NULL;
-
- switch (codec_fcc) {
- case GST_MAKE_FOURCC ('D', 'I', 'B', ' '):
- caps = gst_caps_new_simple ("video/x-raw-rgb",
- "bpp", G_TYPE_INT, 8,
- "depth", G_TYPE_INT, 8, "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
- palette = strf_data;
- strf_data = NULL;
- if (codec_name)
- *codec_name = g_strdup ("Palettized 8-bit RGB");
- break;
-
- case GST_MAKE_FOURCC ('I', '4', '2', '0'):
- caps = gst_caps_new_simple ("video/x-raw-yuv",
- "format", GST_TYPE_FOURCC, codec_fcc, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Uncompressed planar YUV 4:2:0");
- break;
-
- case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
- caps = gst_caps_new_simple ("video/x-raw-yuv",
- "format", GST_TYPE_FOURCC, codec_fcc, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
- break;
-
- case GST_MAKE_FOURCC ('M', 'J', 'P', 'G'): /* YUY2 MJPEG */
- caps = gst_caps_new_simple ("image/jpeg", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Motion JPEG");
- break;
-
- case GST_MAKE_FOURCC ('J', 'P', 'E', 'G'): /* generic (mostly RGB) MJPEG */
- caps = gst_caps_new_simple ("image/jpeg", NULL);
- if (codec_name)
- *codec_name = g_strdup ("JPEG Still Image");
- break;
-
- case GST_MAKE_FOURCC ('P', 'I', 'X', 'L'): /* Miro/Pinnacle fourccs */
- case GST_MAKE_FOURCC ('V', 'I', 'X', 'L'): /* Miro/Pinnacle fourccs */
- caps = gst_caps_new_simple ("image/jpeg", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Miro/Pinnacle Motion JPEG Video");
- break;
-
- case GST_MAKE_FOURCC ('H', 'F', 'Y', 'U'):
- caps = gst_caps_new_simple ("video/x-huffyuv", NULL);
- if (strf) {
- gst_caps_set_simple (caps, "bpp",
- G_TYPE_INT, (int) strf->bit_cnt, NULL);
- }
- if (codec_name)
- *codec_name = g_strdup ("Huffman Lossless Codec");
- break;
-
- case GST_MAKE_FOURCC ('M', 'P', 'E', 'G'):
- case GST_MAKE_FOURCC ('M', 'P', 'G', 'I'):
- case GST_MAKE_FOURCC ('m', 'p', 'g', '1'):
- case GST_MAKE_FOURCC ('M', 'P', 'G', '1'):
- caps = gst_caps_new_simple ("video/mpeg",
- "systemstream", G_TYPE_BOOLEAN, FALSE,
- "mpegversion", G_TYPE_INT, 1, NULL);
- if (codec_name)
- *codec_name = g_strdup ("MPEG video");
- break;
- case GST_MAKE_FOURCC ('M', 'P', 'G', '2'):
- case GST_MAKE_FOURCC ('m', 'p', 'g', '2'):
- caps = gst_caps_new_simple ("video/mpeg",
- "systemstream", G_TYPE_BOOLEAN, FALSE,
- "mpegversion", G_TYPE_INT, 2, NULL);
- if (codec_name)
- *codec_name = g_strdup ("MPEG 2 video");
- break;
-
- case GST_MAKE_FOURCC ('H', '2', '6', '3'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("ITU H.26n");
- break;
-
- case GST_MAKE_FOURCC ('i', '2', '6', '3'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("ITU H.263");
- break;
-
- case GST_MAKE_FOURCC ('L', '2', '6', '3'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Lead H.263");
- break;
-
- case GST_MAKE_FOURCC ('M', '2', '6', '3'):
- case GST_MAKE_FOURCC ('m', '2', '6', '3'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft H.263");
- break;
-
- case GST_MAKE_FOURCC ('V', 'D', 'O', 'W'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("VDOLive");
- break;
-
- case GST_MAKE_FOURCC ('V', 'I', 'V', 'O'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Vivo H.263");
- break;
-
- case GST_MAKE_FOURCC ('x', '2', '6', '3'):
- caps = gst_caps_new_simple ("video/x-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Xirlink H.263");
- break;
-
- /* apparently not standard H.263...? */
- case GST_MAKE_FOURCC ('I', '2', '6', '3'):
- caps = gst_caps_new_simple ("video/x-intel-h263", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Intel H.263");
- break;
-
- case GST_MAKE_FOURCC ('h', '2', '6', '4'):
- caps = gst_caps_new_simple ("video/x-h264", NULL);
- if (codec_name)
- *codec_name = g_strdup ("ITU H.264");
- break;
-
- case GST_MAKE_FOURCC ('V', 'S', 'S', 'H'):
- caps = gst_caps_new_simple ("video/x-h264", NULL);
- if (codec_name)
- *codec_name = g_strdup ("VideoSoft H.264");
- break;
-
- case GST_MAKE_FOURCC ('D', 'I', 'V', '3'):
- case GST_MAKE_FOURCC ('d', 'i', 'v', '3'):
- case GST_MAKE_FOURCC ('D', 'I', 'V', '4'):
- case GST_MAKE_FOURCC ('d', 'i', 'v', '4'):
- case GST_MAKE_FOURCC ('D', 'I', 'V', '5'):
- case GST_MAKE_FOURCC ('d', 'i', 'v', '5'):
- case GST_MAKE_FOURCC ('D', 'I', 'V', '6'):
- case GST_MAKE_FOURCC ('d', 'i', 'v', '6'):
- caps = gst_caps_new_simple ("video/x-divx",
- "divxversion", G_TYPE_INT, 3, NULL);
- if (codec_name)
- *codec_name = g_strdup ("DivX MS-MPEG-4 Version 3");
- break;
-
- case GST_MAKE_FOURCC ('d', 'i', 'v', 'x'):
- case GST_MAKE_FOURCC ('D', 'I', 'V', 'X'):
- caps = gst_caps_new_simple ("video/x-divx",
- "divxversion", G_TYPE_INT, 4, NULL);
- if (codec_name)
- *codec_name = g_strdup ("DivX MPEG-4 Version 4");
- break;
-
- case GST_MAKE_FOURCC ('B', 'L', 'Z', '0'):
- caps = gst_caps_new_simple ("video/x-divx",
- "divxversion", G_TYPE_INT, 4, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Blizzard DivX");
- break;
-
- case GST_MAKE_FOURCC ('D', 'X', '5', '0'):
- caps = gst_caps_new_simple ("video/x-divx",
- "divxversion", G_TYPE_INT, 5, NULL);
- if (codec_name)
- *codec_name = g_strdup ("DivX MPEG-4 Version 5");
- break;
-
- case GST_MAKE_FOURCC ('X', 'V', 'I', 'D'):
- case GST_MAKE_FOURCC ('x', 'v', 'i', 'd'):
- caps = gst_caps_new_simple ("video/x-xvid", NULL);
- if (codec_name)
- *codec_name = g_strdup ("XVID MPEG-4");
- break;
-
- case GST_MAKE_FOURCC ('M', 'P', 'G', '4'):
- case GST_MAKE_FOURCC ('M', 'P', '4', 'S'):
- caps = gst_caps_new_simple ("video/x-msmpeg",
- "msmpegversion", G_TYPE_INT, 41, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft MPEG-4 4.1");
- break;
-
- case GST_MAKE_FOURCC ('m', 'p', '4', '2'):
- case GST_MAKE_FOURCC ('M', 'P', '4', '2'):
- caps = gst_caps_new_simple ("video/x-msmpeg",
- "msmpegversion", G_TYPE_INT, 42, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft MPEG-4 4.2");
- break;
-
- case GST_MAKE_FOURCC ('m', 'p', '4', '3'):
- case GST_MAKE_FOURCC ('M', 'P', '4', '3'):
- caps = gst_caps_new_simple ("video/x-msmpeg",
- "msmpegversion", G_TYPE_INT, 43, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft MPEG-4 4.3");
- break;
-
- case GST_MAKE_FOURCC ('3', 'I', 'V', '1'):
- case GST_MAKE_FOURCC ('3', 'I', 'V', '2'):
- caps = gst_caps_new_simple ("video/x-3ivx", NULL);
- if (codec_name)
- *codec_name = g_strdup ("3ivx");
- break;
-
- case GST_MAKE_FOURCC ('D', 'V', 'S', 'D'):
- case GST_MAKE_FOURCC ('d', 'v', 's', 'd'):
- caps = gst_caps_new_simple ("video/x-dv",
- "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Generic DV");
- break;
-
- case GST_MAKE_FOURCC ('W', 'M', 'V', '1'):
- caps = gst_caps_new_simple ("video/x-wmv",
- "wmvversion", G_TYPE_INT, 1, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft Windows Media 7 (WMV1)");
- break;
-
- case GST_MAKE_FOURCC ('W', 'M', 'V', '2'):
- caps = gst_caps_new_simple ("video/x-wmv",
- "wmvversion", G_TYPE_INT, 2, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft Windows Media 8 (WMV2)");
- break;
-
- case GST_MAKE_FOURCC ('W', 'M', 'V', '3'):
- caps = gst_caps_new_simple ("video/x-wmv",
- "wmvversion", G_TYPE_INT, 3, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Microsoft Windows Media 9 (WMV3)");
- break;
-
- case GST_MAKE_FOURCC ('c', 'v', 'i', 'd'):
- caps = gst_caps_new_simple ("video/x-cinepak", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Cinepak video");
- break;
-
- case GST_MAKE_FOURCC ('M', 'S', 'V', 'C'):
- case GST_MAKE_FOURCC ('m', 's', 'v', 'c'):
- case GST_MAKE_FOURCC ('C', 'R', 'A', 'M'):
- case GST_MAKE_FOURCC ('c', 'r', 'a', 'm'):
- case GST_MAKE_FOURCC ('W', 'H', 'A', 'M'):
- case GST_MAKE_FOURCC ('w', 'h', 'a', 'm'):
- caps = gst_caps_new_simple ("video/x-msvideocodec",
- "msvideoversion", G_TYPE_INT, 1, NULL);
- if (codec_name)
- *codec_name = g_strdup ("MS video v1");
- break;
-
- case GST_MAKE_FOURCC ('R', 'L', 'E', ' '):
- case GST_MAKE_FOURCC ('m', 'r', 'l', 'e'):
- case GST_MAKE_FOURCC (0x1, 0x0, 0x0, 0x0): /* why, why, why? */
- caps = gst_caps_new_simple ("video/x-rle",
- "layout", G_TYPE_STRING, "microsoft", NULL);
- palette = strf_data;
- strf_data = NULL;
- if (strf) {
- gst_caps_set_simple (caps,
- "depth", G_TYPE_INT, (gint) strf->bit_cnt, NULL);
- } else {
- gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
- }
- if (codec_name)
- *codec_name = g_strdup ("Microsoft RLE");
- break;
-
- case GST_MAKE_FOURCC ('X', 'x', 'a', 'n'):
- caps = gst_caps_new_simple ("video/x-xan",
- "wcversion", G_TYPE_INT, 4, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Xan Wing Commander 4");
- break;
-
- case GST_MAKE_FOURCC ('I', 'V', '5', '0'):
- caps = gst_caps_new_simple ("video/x-intel",
- "ivversion", G_TYPE_INT, 5, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Intel Video 5");
- break;
-
- default:
- GST_WARNING ("Unknown video fourcc " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (codec_fcc));
- return NULL;
- }
-
- if (strh != NULL) {
- gdouble fps = 1. * strh->rate / strh->scale;
-
- gst_caps_set_simple (caps, "framerate", G_TYPE_DOUBLE, fps, NULL);
- } else {
- gst_caps_set_simple (caps,
- "framerate", GST_TYPE_DOUBLE_RANGE, 0., G_MAXDOUBLE, NULL);
- }
-
- if (strf != NULL) {
- gst_caps_set_simple (caps,
- "width", G_TYPE_INT, strf->width,
- "height", G_TYPE_INT, strf->height, NULL);
- } else {
- gst_caps_set_simple (caps,
- "width", GST_TYPE_INT_RANGE, 16, 4096,
- "height", GST_TYPE_INT_RANGE, 16, 4096, NULL);
- }
-
- /* extradata */
- if (strf_data || strd_data) {
- gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER,
- strf_data ? strf_data : strd_data, NULL);
- }
-
- /* palette */
- if (palette && GST_BUFFER_SIZE (palette) >= 256 * 4) {
- GstBuffer *copy = gst_buffer_copy (palette);
-
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
- gint n;
- guint32 *data = (guint32 *) GST_BUFFER_DATA (copy);
-
- /* own endianness */
- for (n = 0; n < 256; n++)
- data[n] = GUINT32_FROM_LE (data[n]);
-#endif
- gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, copy, NULL);
- gst_buffer_unref (copy);
- }
-
- return caps;
-}
-
-GstCaps *
-gst_riff_create_video_caps (guint32 codec_fcc,
- gst_riff_strh * strh, gst_riff_strf_vids * strf, char **codec_name)
-{
- return gst_riff_create_video_caps_with_data (codec_fcc,
- strh, strf, NULL, NULL, codec_name);
-}
-
-GstCaps *
-gst_riff_create_audio_caps_with_data (guint16 codec_id,
- gst_riff_strh * strh, gst_riff_strf_auds * strf,
- GstBuffer * strf_data, GstBuffer * strd_data, char **codec_name)
-{
- gboolean block_align = FALSE, rate_chan = TRUE;
- GstCaps *caps = NULL;
- gint rate_min = 1000, rate_max = 96000;
- gint channels_max = 2;
-
- switch (codec_id) {
- case GST_RIFF_WAVE_FORMAT_MPEGL3: /* mp3 */
- caps = gst_caps_new_simple ("audio/mpeg",
- "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
- if (codec_name)
- *codec_name = g_strdup ("MPEG 1 layer 3");
- break;
-
- case GST_RIFF_WAVE_FORMAT_MPEGL12: /* mp1 or mp2 */
- caps = gst_caps_new_simple ("audio/mpeg",
- "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 2, NULL);
- if (codec_name)
- *codec_name = g_strdup ("MPEG 1 layer 2");
- break;
-
- case GST_RIFF_WAVE_FORMAT_PCM: /* PCM */
- if (strf != NULL) {
- gint ba = strf->blockalign;
- gint ch = strf->channels;
- gint ws = strf->size;
-
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
- "width", G_TYPE_INT, (int) (ba * 8 / ch),
- "depth", G_TYPE_INT, ws, "signed", G_TYPE_BOOLEAN, ws != 8, NULL);
- } else {
- caps = gst_caps_from_string ("audio/x-raw-int, "
- "endianness = (int) LITTLE_ENDIAN, "
- "signed = (boolean) { true, false }, "
- "width = (int) { 8, 16 }, " "depth = (int) { 8, 16 }");
- }
- if (codec_name)
- *codec_name = g_strdup ("Uncompressed PCM audio");
- break;
-
- case GST_RIFF_WAVE_FORMAT_ADPCM:
- caps = gst_caps_new_simple ("audio/x-adpcm",
- "layout", G_TYPE_STRING, "microsoft", NULL);
- if (codec_name)
- *codec_name = g_strdup ("ADPCM audio");
- block_align = TRUE;
- break;
-
- case GST_RIFF_WAVE_FORMAT_DVI_ADPCM:
- caps = gst_caps_new_simple ("audio/x-adpcm",
- "layout", G_TYPE_STRING, "dvi", NULL);
- if (codec_name)
- *codec_name = g_strdup ("DVI ADPCM audio");
- block_align = TRUE;
- break;
-
- case GST_RIFF_WAVE_FORMAT_MULAW:
- if (strf != NULL && strf->size != 8) {
- GST_WARNING ("invalid depth (%d) of mulaw audio, overwriting.",
- strf->size);
- strf->size = 8;
- strf->av_bps = 8;
- strf->blockalign = strf->av_bps * strf->channels;
- }
- if (strf != NULL && (strf->av_bps == 0 || strf->blockalign == 0)) {
- GST_WARNING ("fixing av_bps (%d) and blockalign (%d) of mulaw audio",
- strf->av_bps, strf->blockalign);
- strf->av_bps = strf->size;
- strf->blockalign = strf->av_bps * strf->channels;
- }
- caps = gst_caps_new_simple ("audio/x-mulaw", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Mulaw");
- break;
-
- case GST_RIFF_WAVE_FORMAT_ALAW:
- if (strf != NULL && strf->size != 8) {
- GST_WARNING ("invalid depth (%d) of alaw audio, overwriting.",
- strf->size);
- strf->size = 8;
- strf->av_bps = 8;
- strf->blockalign = strf->av_bps * strf->channels;
- }
- if (strf != NULL && (strf->av_bps == 0 || strf->blockalign == 0)) {
- GST_WARNING ("fixing av_bps (%d) and blockalign (%d) of alaw audio",
- strf->av_bps, strf->blockalign);
- strf->av_bps = strf->size;
- strf->blockalign = strf->av_bps * strf->channels;
- }
- caps = gst_caps_new_simple ("audio/x-alaw", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Alaw");
- break;
-
- case GST_RIFF_WAVE_FORMAT_VORBIS1: /* ogg/vorbis mode 1 */
- case GST_RIFF_WAVE_FORMAT_VORBIS2: /* ogg/vorbis mode 2 */
- case GST_RIFF_WAVE_FORMAT_VORBIS3: /* ogg/vorbis mode 3 */
- case GST_RIFF_WAVE_FORMAT_VORBIS1PLUS: /* ogg/vorbis mode 1+ */
- case GST_RIFF_WAVE_FORMAT_VORBIS2PLUS: /* ogg/vorbis mode 2+ */
- case GST_RIFF_WAVE_FORMAT_VORBIS3PLUS: /* ogg/vorbis mode 3+ */
- caps = gst_caps_new_simple ("audio/x-vorbis", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Vorbis");
- break;
-
- case GST_RIFF_WAVE_FORMAT_A52:
- channels_max = 6;
- caps = gst_caps_new_simple ("audio/x-ac3", NULL);
- if (codec_name)
- *codec_name = g_strdup ("AC3");
- break;
- case GST_RIFF_WAVE_FORMAT_WMAV1:
- case GST_RIFF_WAVE_FORMAT_WMAV2:
- case GST_RIFF_WAVE_FORMAT_WMAV3:
- {
- gint version = (codec_id - GST_RIFF_WAVE_FORMAT_WMAV1) + 1;
-
- channels_max = 6;
-
- block_align = TRUE;
-
- caps = gst_caps_new_simple ("audio/x-wma",
- "wmaversion", G_TYPE_INT, version, NULL);
-
- if (codec_name)
- *codec_name = g_strdup_printf ("WMA Version %d", version);
-
- if (strf != NULL) {
- gst_caps_set_simple (caps,
- "bitrate", G_TYPE_INT, strf->av_bps * 8, NULL);
- } else {
- gst_caps_set_simple (caps,
- "bitrate", GST_TYPE_INT_RANGE, 0, G_MAXINT, NULL);
- }
- break;
- }
- case GST_RIFF_WAVE_FORMAT_SONY_ATRAC3:
- caps = gst_caps_new_simple ("audio/x-vnd.sony.atrac3", NULL);
- if (codec_name)
- *codec_name = g_strdup ("Sony ATRAC3");
- break;
-
- default:
- GST_WARNING ("Unknown audio tag 0x%04x", codec_id);
- return NULL;
- }
-
- if (strf != NULL) {
- if (rate_chan) {
- gst_caps_set_simple (caps,
- "rate", G_TYPE_INT, strf->rate,
- "channels", G_TYPE_INT, strf->channels, NULL);
- }
- if (block_align) {
- gst_caps_set_simple (caps,
- "block_align", G_TYPE_INT, strf->blockalign, NULL);
- }
- } else {
- if (rate_chan) {
- gst_caps_set_simple (caps,
- "rate", GST_TYPE_INT_RANGE, rate_min, rate_max,
- "channels", GST_TYPE_INT_RANGE, 1, channels_max, NULL);
- }
- if (block_align) {
- gst_caps_set_simple (caps,
- "block_align", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
- }
- }
-
- /* extradata */
- if (strf_data || strd_data) {
- gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER,
- strf_data ? strf_data : strd_data, NULL);
- }
-
- return caps;
-}
-
-GstCaps *
-gst_riff_create_audio_caps (guint16 codec_id,
- gst_riff_strh * strh, gst_riff_strf_auds * strf, char **codec_name)
-{
- return gst_riff_create_audio_caps_with_data (codec_id,
- strh, strf, NULL, NULL, codec_name);
-}
-
-GstCaps *
-gst_riff_create_iavs_caps (guint32 codec_fcc,
- gst_riff_strh * strh, gst_riff_strf_iavs * strf, char **codec_name)
-{
- GstCaps *caps = NULL;
-
- switch (codec_fcc) {
- /* is this correct? */
- case GST_MAKE_FOURCC ('D', 'V', 'S', 'D'):
- case GST_MAKE_FOURCC ('d', 'v', 's', 'd'):
- caps = gst_caps_new_simple ("video/x-dv",
- "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
- if (codec_name)
- *codec_name = g_strdup ("Generic DV");
- break;
-
- default:
- GST_WARNING ("Unknown IAVS fourcc " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (codec_fcc));
- return NULL;
- }
-
- return caps;
-}
-
-/*
- * Functions below are for template caps. All is variable.
- */
-
-GstCaps *
-gst_riff_create_video_template_caps (void)
-{
- guint32 tags[] = {
- GST_MAKE_FOURCC ('I', '4', '2', '0'),
- GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
- GST_MAKE_FOURCC ('M', 'J', 'P', 'G'),
- GST_MAKE_FOURCC ('D', 'V', 'S', 'D'),
- GST_MAKE_FOURCC ('W', 'M', 'V', '1'),
- GST_MAKE_FOURCC ('W', 'M', 'V', '2'),
- GST_MAKE_FOURCC ('W', 'M', 'V', '3'),
- GST_MAKE_FOURCC ('M', 'P', 'G', '4'),
- GST_MAKE_FOURCC ('M', 'P', '4', '2'),
- GST_MAKE_FOURCC ('M', 'P', '4', '3'),
- GST_MAKE_FOURCC ('H', 'F', 'Y', 'U'),
- GST_MAKE_FOURCC ('D', 'I', 'V', '3'),
- GST_MAKE_FOURCC ('M', 'P', 'E', 'G'),
- GST_MAKE_FOURCC ('H', '2', '6', '3'),
- GST_MAKE_FOURCC ('I', '2', '6', '3'),
- GST_MAKE_FOURCC ('h', '2', '6', '4'),
- GST_MAKE_FOURCC ('D', 'I', 'V', 'X'),
- GST_MAKE_FOURCC ('D', 'X', '5', '0'),
- GST_MAKE_FOURCC ('X', 'V', 'I', 'D'),
- GST_MAKE_FOURCC ('3', 'I', 'V', '1'),
- GST_MAKE_FOURCC ('c', 'v', 'i', 'd'),
- GST_MAKE_FOURCC ('m', 's', 'v', 'c'),
- GST_MAKE_FOURCC ('R', 'L', 'E', ' '),
- GST_MAKE_FOURCC ('D', 'I', 'B', ' '),
- GST_MAKE_FOURCC ('X', 'x', 'a', 'n'),
- GST_MAKE_FOURCC ('I', 'V', '5', '0'),
- /* FILL ME */
- 0
- };
- guint i;
- GstCaps *caps, *one;
-
- caps = gst_caps_new_empty ();
- for (i = 0; tags[i] != 0; i++) {
- one = gst_riff_create_video_caps (tags[i], NULL, NULL, NULL);
- if (one)
- gst_caps_append (caps, one);
- }
-
- return caps;
-}
-
-GstCaps *
-gst_riff_create_audio_template_caps (void)
-{
- guint16 tags[] = {
- GST_RIFF_WAVE_FORMAT_MPEGL3,
- GST_RIFF_WAVE_FORMAT_MPEGL12,
- GST_RIFF_WAVE_FORMAT_PCM,
- GST_RIFF_WAVE_FORMAT_VORBIS1,
- GST_RIFF_WAVE_FORMAT_A52,
- GST_RIFF_WAVE_FORMAT_ALAW,
- GST_RIFF_WAVE_FORMAT_MULAW,
- GST_RIFF_WAVE_FORMAT_ADPCM,
- GST_RIFF_WAVE_FORMAT_DVI_ADPCM,
- GST_RIFF_WAVE_FORMAT_WMAV1,
- GST_RIFF_WAVE_FORMAT_WMAV2,
- GST_RIFF_WAVE_FORMAT_WMAV3,
- /* FILL ME */
- 0
- };
- guint i;
- GstCaps *caps, *one;
-
- caps = gst_caps_new_empty ();
- for (i = 0; tags[i] != 0; i++) {
- one = gst_riff_create_audio_caps (tags[i], NULL, NULL, NULL);
- if (one)
- gst_caps_append (caps, one);
- }
-
- return caps;
-}
-
-GstCaps *
-gst_riff_create_iavs_template_caps (void)
-{
- guint32 tags[] = {
- GST_MAKE_FOURCC ('D', 'V', 'S', 'D'),
- /* FILL ME */
- 0
- };
- guint i;
- GstCaps *caps, *one;
-
- caps = gst_caps_new_empty ();
- for (i = 0; tags[i] != 0; i++) {
- one = gst_riff_create_iavs_caps (tags[i], NULL, NULL, NULL);
- if (one)
- gst_caps_append (caps, one);
- }
-
- return caps;
-}
+++ /dev/null
-/* GStreamer RIFF I/O
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * riff-media.h: RIFF-id to/from caps routines
- *
- * 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_RIFF_MEDIA_H__
-#define __GST_RIFF_MEDIA_H__
-
-#include <glib.h>
-#include <gst/gst.h>
-#include "riff-ids.h"
-
-G_BEGIN_DECLS
-
-/*
- * Create one caps. strh/strf can be NULL (for non-fixed caps).
- */
-
-GstCaps *gst_riff_create_video_caps (guint32 codec_fcc,
- gst_riff_strh *strh,
- gst_riff_strf_vids *strf,
- char **codec_name);
-GstCaps *gst_riff_create_audio_caps (guint16 codec_id,
- gst_riff_strh *strh,
- gst_riff_strf_auds *strf,
- char **codec_name);
-GstCaps *gst_riff_create_iavs_caps (guint32 codec_fcc,
- gst_riff_strh *strh,
- gst_riff_strf_iavs *strf,
- char **codec_name);
-
-/*
- * Extended...
- */
-
-GstCaps *
-gst_riff_create_video_caps_with_data (guint32 codec_fcc,
- gst_riff_strh * strh,
- gst_riff_strf_vids * strf,
- GstBuffer * strf_data,
- GstBuffer * strd_data,
- char ** codec_name);
-
-GstCaps *
-gst_riff_create_audio_caps_with_data (guint16 codec_id,
- gst_riff_strh * strh,
- gst_riff_strf_auds * strf,
- GstBuffer * strf_data,
- GstBuffer * strd_data,
- char ** codec_name);
-/*
- * Create template caps (includes all known types).
- */
-
-GstCaps *gst_riff_create_video_template_caps (void);
-GstCaps *gst_riff_create_audio_template_caps (void);
-GstCaps *gst_riff_create_iavs_template_caps (void);
-
-G_END_DECLS
-
-#endif /* __GST_RIFF_READ_H__ */
+++ /dev/null
-/* GStreamer RIFF I/O
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * riff-read.c: RIFF input file parsing
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <gst/gstutils.h>
-
-#include "riff-ids.h"
-#include "riff-read.h"
-
-GST_DEBUG_CATEGORY_STATIC (riffread_debug);
-#define GST_CAT_DEFAULT riffread_debug
-
-enum
-{
- ARG_0,
- ARG_METADATA
- /* FILL ME */
-};
-
-static void gst_riff_read_class_init (GstRiffReadClass * klass);
-static void gst_riff_read_init (GstRiffRead * riff);
-
-static GstElementStateReturn gst_riff_read_change_state (GstElement * element);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_riff_read_get_type (void)
-{
- static GType gst_riff_read_type = 0;
-
- if (!gst_riff_read_type) {
- static const GTypeInfo gst_riff_read_info = {
- sizeof (GstRiffReadClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_riff_read_class_init,
- NULL,
- NULL,
- sizeof (GstRiffRead),
- 0,
- (GInstanceInitFunc) gst_riff_read_init,
- };
-
- gst_riff_read_type =
- g_type_register_static (GST_TYPE_ELEMENT, "GstRiffRead",
- &gst_riff_read_info, 0);
- }
-
- return gst_riff_read_type;
-}
-
-static void
-gst_riff_read_class_init (GstRiffReadClass * klass)
-{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
-
- GST_DEBUG_CATEGORY_INIT (riffread_debug, "riffread",
- 0, "RIFF stream helper class");
-
- gstelement_class->change_state = gst_riff_read_change_state;
-}
-
-static void
-gst_riff_read_init (GstRiffRead * riff)
-{
- riff->sinkpad = NULL;
- riff->bs = NULL;
- riff->level = NULL;
-}
-
-static GstElementStateReturn
-gst_riff_read_change_state (GstElement * element)
-{
- GstRiffRead *riff = GST_RIFF_READ (element);
-
- switch (GST_STATE_TRANSITION (element)) {
- case GST_STATE_READY_TO_PAUSED:
- if (!riff->sinkpad)
- return GST_STATE_FAILURE;
- riff->bs = gst_bytestream_new (riff->sinkpad);
- break;
- case GST_STATE_PAUSED_TO_READY:
- gst_bytestream_destroy (riff->bs);
- while (riff->level) {
- GstRiffLevel *level = riff->level->data;
-
- riff->level = g_list_remove (riff->level, level);
- g_free (level);
- }
- break;
- default:
- break;
- }
-
- if (GST_ELEMENT_CLASS (parent_class)->change_state)
- return GST_ELEMENT_CLASS (parent_class)->change_state (element);
-
- return GST_STATE_SUCCESS;
-}
-
-/*
- * Return: the amount of levels in the hierarchy that the
- * current element lies higher than the previous one.
- * The opposite isn't done - that's auto-done using list
- * element reading.
- */
-
-static guint
-gst_riff_read_element_level_up (GstRiffRead * riff)
-{
- guint num = 0;
- guint64 pos = gst_bytestream_tell (riff->bs);
-
- while (riff->level != NULL) {
- GList *last = g_list_last (riff->level);
- GstRiffLevel *level = last->data;
-
- if (pos >= level->start + level->length) {
- riff->level = g_list_remove (riff->level, level);
- g_free (level);
- num++;
- } else
- break;
- }
-
- return num;
-}
-
-/*
- * Event handler. Basic:
- * - EOS: end-of-file, stop processing, forward EOS.
- * - Interrupt: stop processing.
- * - Discont: shouldn't be handled here but in the seek handler. Error.
- * - Flush: ignore, since we check for flush flags manually. Don't forward.
- * - Others: warn, ignore.
- * Return value indicates whether to continue processing.
- */
-
-static gboolean
-gst_riff_read_use_event (GstRiffRead * riff, GstEvent * event)
-{
- if (!event) {
- GST_ELEMENT_ERROR (riff, RESOURCE, READ, (NULL), (NULL));
- return FALSE;
- }
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_EOS:
- gst_pad_event_default (riff->sinkpad, event);
- return FALSE;
-
- case GST_EVENT_INTERRUPT:
- gst_event_unref (event);
- return FALSE;
-
- case GST_EVENT_DISCONTINUOUS:
- GST_WARNING_OBJECT (riff, "Unexpected discont - might lose sync");
- gst_event_unref (event);
- return TRUE;
-
- case GST_EVENT_FLUSH:
- gst_event_unref (event);
- return TRUE;
-
- default:
- GST_WARNING ("don't know how to handle event %d", GST_EVENT_TYPE (event));
- gst_pad_event_default (riff->sinkpad, event);
- return TRUE;
- }
-
- /* happy */
- g_assert_not_reached ();
- return FALSE;
-}
-
-static gboolean
-gst_riff_read_handle_event (GstRiffRead * riff)
-{
- GstEvent *event = NULL;
- guint32 remaining;
-
- gst_bytestream_get_status (riff->bs, &remaining, &event);
-
- return gst_riff_read_use_event (riff, event);
-}
-
-/*
- * Read the next tag plus length (may be NULL). Return
- * TRUE on success or FALSE on failure.
- */
-
-gboolean
-gst_riff_peek_head (GstRiffRead * riff,
- guint32 * tag, guint32 * length, guint * level_up)
-{
- GList *last;
- guint8 *data;
-
- /* if we're at the end of a chunk, but unaligned, then re-align.
- * Those are essentially broken files, but unfortunately they
- * exist. */
- if ((last = g_list_last (riff->level)) != NULL) {
- GstRiffLevel *level = last->data;
- guint64 pos = gst_bytestream_tell (riff->bs);
-
- if (level->start + level->length - pos < 8) {
- if (!gst_bytestream_flush (riff->bs, level->start + level->length - pos)) {
- GST_ELEMENT_ERROR (riff, RESOURCE, READ, (NULL), (NULL));
- return FALSE;
- }
- }
- }
-
- /* read */
- while (gst_bytestream_peek_bytes (riff->bs, &data, 8) != 8) {
- if (!gst_riff_read_handle_event (riff))
- return FALSE;
- }
-
- /* parse tag + length (if wanted) */
- *tag = GST_READ_UINT32_LE (data);
- if (length)
- *length = GST_READ_UINT32_LE (((guint32 *) data) + 1);
-
- /* level */
- if (level_up)
- *level_up = gst_riff_read_element_level_up (riff);
-
- return TRUE;
-}
-
-/*
- * Read: the actual data (plus alignment and flush).
- * Return: the data, as a GstBuffer.
- */
-
-GstBuffer *
-gst_riff_peek_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
-{
- GstBuffer *buf = NULL;
- guint32 got;
-
- while ((got = gst_bytestream_peek (riff->bs, &buf, length)) != length) {
- if (buf)
- gst_buffer_unref (buf);
- if (!gst_riff_read_handle_event (riff))
- return NULL;
- }
-
- if (got_bytes)
- *got_bytes = got;
-
- return buf;
-}
-
-GstBuffer *
-gst_riff_read_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
-{
- GstBuffer *buf;
-
- if (!(buf = gst_riff_peek_element_data (riff, length, got_bytes)))
- return NULL;
-
- /* we need 16-bit alignment */
- if (length & 1)
- length++;
-
- if (!gst_bytestream_flush (riff->bs, length)) {
- gst_buffer_unref (buf);
- return NULL;
- }
-
- return buf;
-}
-
-/*
- * Seek.
- */
-
-GstEvent *
-gst_riff_read_seek (GstRiffRead * riff, guint64 offset)
-{
- guint64 length = gst_bytestream_length (riff->bs);
- guint32 remaining;
- GstEvent *event = NULL;
- guchar *data;
-
- /* hack for AVI files with broken idx1 size chunk markers */
- if (offset > length)
- offset = length;
-
- /* first, flush remaining buffers */
- gst_bytestream_get_status (riff->bs, &remaining, &event);
- if (event) {
- GST_WARNING ("Unexpected event before seek");
- if (!gst_riff_read_use_event (riff, event))
- return NULL;
- event = NULL;
- }
-
- if (remaining)
- gst_bytestream_flush_fast (riff->bs, remaining);
-
- /* now seek */
- if (!gst_bytestream_seek (riff->bs, offset, GST_SEEK_METHOD_SET)) {
- GST_ELEMENT_ERROR (riff, RESOURCE, SEEK, (NULL), (NULL));
- return NULL;
- }
-
- /* and now, peek a new byte. This will fail because there's a
- * pending event. Then, take the event and return it. */
- while (!event) {
- if (gst_bytestream_peek_bytes (riff->bs, &data, 1)) {
- GST_WARNING ("Unexpected data after seek - this means seek failed");
- break;
- }
-
- /* get the discont event and return */
- gst_bytestream_get_status (riff->bs, &remaining, &event);
- if (!event) {
- GST_WARNING ("No discontinuity event after seek - seek failed");
- break;
- } else if (GST_EVENT_TYPE (event) != GST_EVENT_DISCONTINUOUS) {
- if (!gst_riff_read_use_event (riff, event))
- return NULL;
- event = NULL;
- }
- }
-
- return event;
-}
-
-/*
- * Gives the tag of the next RIFF element.
- */
-
-guint32
-gst_riff_peek_tag (GstRiffRead * riff, guint * level_up)
-{
- guint32 tag;
-
- if (!gst_riff_peek_head (riff, &tag, NULL, level_up))
- return 0;
-
- return tag;
-}
-
-/*
- * Gives the tag of the next LIST/RIFF element.
- */
-
-guint32
-gst_riff_peek_list (GstRiffRead * riff)
-{
- guint32 lst;
- guint8 *data;
-
- if (!gst_riff_peek_head (riff, &lst, NULL, NULL))
- return FALSE;
- if (lst != GST_RIFF_TAG_LIST) {
- g_warning ("Not a LIST object");
- return 0;
- }
-
- if (gst_bytestream_peek_bytes (riff->bs, &data, 12) != 12) {
- GST_ELEMENT_ERROR (riff, RESOURCE, READ, (NULL), (NULL));
- return 0;
- }
-
- return GST_READ_UINT32_LE (((guint32 *) data) + 2);
-}
-
-/*
- * Don't read data.
- */
-
-gboolean
-gst_riff_read_skip (GstRiffRead * riff)
-{
- guint32 tag, length;
- GstEvent *event = NULL;
- guint32 remaining;
-
- if (!gst_riff_peek_head (riff, &tag, &length, NULL))
- return FALSE;
-
- /* 16-bit alignment */
- if (length & 1)
- length++;
-
- /* header itself */
- length += 8;
-
- /* see if we have that much data available */
- gst_bytestream_get_status (riff->bs, &remaining, &event);
- if (event) {
- GST_WARNING ("Unexpected event in skip");
- if (!gst_riff_read_use_event (riff, event))
- return FALSE;
- }
-
- /* yes */
- if (remaining >= length) {
- gst_bytestream_flush_fast (riff->bs, length);
- return TRUE;
- }
-
- /* no */
- if (!(event = gst_riff_read_seek (riff,
- gst_bytestream_tell (riff->bs) + length)))
- return FALSE;
-
- gst_event_unref (event);
-
- return TRUE;
-}
-
-/*
- * Read any type of data.
- */
-
-gboolean
-gst_riff_read_data (GstRiffRead * riff, guint32 * tag, GstBuffer ** buf)
-{
- guint32 length;
-
- if (!gst_riff_peek_head (riff, tag, &length, NULL))
- return FALSE;
- gst_bytestream_flush_fast (riff->bs, 8);
-
- return ((*buf = gst_riff_read_element_data (riff, length, NULL)) != NULL);
-}
-
-/*
- * Read a string.
- */
-
-gboolean
-gst_riff_read_ascii (GstRiffRead * riff, guint32 * tag, gchar ** str)
-{
- GstBuffer *buf;
-
- if (!gst_riff_read_data (riff, tag, &buf))
- return FALSE;
-
- *str = g_malloc (GST_BUFFER_SIZE (buf) + 1);
- memcpy (*str, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
- (*str)[GST_BUFFER_SIZE (buf)] = '\0';
-
- gst_buffer_unref (buf);
-
- return TRUE;
-}
-
-/*
- * Read media structs.
- */
-
-gboolean
-gst_riff_read_strh (GstRiffRead * riff, gst_riff_strh ** header)
-{
- guint32 tag;
- GstBuffer *buf;
- gst_riff_strh *strh;
-
- if (!gst_riff_read_data (riff, &tag, &buf))
- return FALSE;
-
- if (tag != GST_RIFF_TAG_strh) {
- g_warning ("Not a strh chunk");
- gst_buffer_unref (buf);
- return FALSE;
- }
- if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strh)) {
- GST_WARNING ("Too small strh (%d available, %d needed)",
- GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_strh));
- gst_buffer_unref (buf);
- return FALSE;
- }
-
- strh = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
- gst_buffer_unref (buf);
-
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
- strh->type = GUINT32_FROM_LE (strh->type);
- strh->fcc_handler = GUINT32_FROM_LE (strh->fcc_handler);
- strh->flags = GUINT32_FROM_LE (strh->flags);
- strh->priority = GUINT32_FROM_LE (strh->priority);
- strh->init_frames = GUINT32_FROM_LE (strh->init_frames);
- strh->scale = GUINT32_FROM_LE (strh->scale);
- strh->rate = GUINT32_FROM_LE (strh->rate);
- strh->start = GUINT32_FROM_LE (strh->start);
- strh->length = GUINT32_FROM_LE (strh->length);
- strh->bufsize = GUINT32_FROM_LE (strh->bufsize);
- strh->quality = GUINT32_FROM_LE (strh->quality);
- strh->samplesize = GUINT32_FROM_LE (strh->samplesize);
-#endif
-
- /* avoid divisions by zero */
- if (!strh->scale)
- strh->scale = 1;
- if (!strh->rate)
- strh->rate = 1;
-
- /* debug */
- GST_INFO ("strh tag found");
- GST_INFO (" type " GST_FOURCC_FORMAT, GST_FOURCC_ARGS (strh->type));
- GST_INFO (" fcc_handler " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (strh->fcc_handler));
- GST_INFO (" flags 0x%08x", strh->flags);
- GST_INFO (" priority %d", strh->priority);
- GST_INFO (" init_frames %d", strh->init_frames);
- GST_INFO (" scale %d", strh->scale);
- GST_INFO (" rate %d", strh->rate);
- GST_INFO (" start %d", strh->start);
- GST_INFO (" length %d", strh->length);
- GST_INFO (" bufsize %d", strh->bufsize);
- GST_INFO (" quality %d", strh->quality);
- GST_INFO (" samplesize %d", strh->samplesize);
-
- *header = strh;
-
- return TRUE;
-}
-
-gboolean
-gst_riff_read_strf_vids_with_data (GstRiffRead * riff,
- gst_riff_strf_vids ** header, GstBuffer ** extradata)
-{
- guint32 tag;
- GstBuffer *buf;
- gst_riff_strf_vids *strf;
-
- if (!gst_riff_read_data (riff, &tag, &buf))
- return FALSE;
-
- if (tag != GST_RIFF_TAG_strf) {
- g_warning ("Not a strf chunk");
- gst_buffer_unref (buf);
- return FALSE;
- }
- if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strf_vids)) {
- GST_WARNING ("Too small strf_vids (%d available, %d needed)",
- GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_strf_vids));
- gst_buffer_unref (buf);
- return FALSE;
- }
-
- strf = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
-
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
- strf->size = GUINT32_FROM_LE (strf->size);
- strf->width = GUINT32_FROM_LE (strf->width);
- strf->height = GUINT32_FROM_LE (strf->height);
- strf->planes = GUINT16_FROM_LE (strf->planes);
- strf->bit_cnt = GUINT16_FROM_LE (strf->bit_cnt);
- strf->compression = GUINT32_FROM_LE (strf->compression);
- strf->image_size = GUINT32_FROM_LE (strf->image_size);
- strf->xpels_meter = GUINT32_FROM_LE (strf->xpels_meter);
- strf->ypels_meter = GUINT32_FROM_LE (strf->ypels_meter);
- strf->num_colors = GUINT32_FROM_LE (strf->num_colors);
- strf->imp_colors = GUINT32_FROM_LE (strf->imp_colors);
-#endif
-
- /* size checking */
- *extradata = NULL;
- if (strf->size > GST_BUFFER_SIZE (buf)) {
- g_warning ("strf_vids header gave %d bytes data, only %d available",
- strf->size, GST_BUFFER_SIZE (buf));
- strf->size = GST_BUFFER_SIZE (buf);
- } else if (strf->size < GST_BUFFER_SIZE (buf)) {
- gint len;
-
- len = GST_BUFFER_SIZE (buf) - strf->size;
- if (len > 0) {
- *extradata = gst_buffer_create_sub (buf, strf->size, len);
- }
- } else if (strf->size > sizeof (gst_riff_strf_vids)) {
- *extradata = gst_buffer_create_sub (buf,
- sizeof (gst_riff_strf_vids), strf->size - sizeof (gst_riff_strf_vids));
- }
-
- /* debug */
- GST_INFO ("strf tag found in context vids:");
- GST_INFO (" size %d", strf->size);
- GST_INFO (" width %d", strf->width);
- GST_INFO (" height %d", strf->height);
- GST_INFO (" planes %d", strf->planes);
- GST_INFO (" bit_cnt %d", strf->bit_cnt);
- GST_INFO (" compression " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (strf->compression));
- GST_INFO (" image_size %d", strf->image_size);
- GST_INFO (" xpels_meter %d", strf->xpels_meter);
- GST_INFO (" ypels_meter %d", strf->ypels_meter);
- GST_INFO (" num_colors %d", strf->num_colors);
- GST_INFO (" imp_colors %d", strf->imp_colors);
- if (*extradata)
- GST_INFO (" %d bytes extra_data", GST_BUFFER_SIZE (*extradata));
-
- gst_buffer_unref (buf);
-
- *header = strf;
-
- return TRUE;
-}
-
-/*
- * Obsolete, use gst_riff_read_strf_vids_with_data ().
- */
-gboolean
-gst_riff_read_strf_vids (GstRiffRead * riff, gst_riff_strf_vids ** header)
-{
- GstBuffer *data = NULL;
- gboolean ret;
-
- ret = gst_riff_read_strf_vids_with_data (riff, header, &data);
- if (data)
- gst_buffer_unref (data);
-
- return ret;
-}
-
-gboolean
-gst_riff_read_strf_auds_with_data (GstRiffRead * riff,
- gst_riff_strf_auds ** header, GstBuffer ** extradata)
-{
- guint32 tag;
- GstBuffer *buf;
- gst_riff_strf_auds *strf;
-
- if (!gst_riff_read_data (riff, &tag, &buf))
- return FALSE;
-
- if (tag != GST_RIFF_TAG_strf && tag != GST_RIFF_TAG_fmt) {
- g_warning ("Not a strf chunk");
- gst_buffer_unref (buf);
- return FALSE;
- }
- if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strf_auds)) {
- GST_WARNING ("Too small strf_auds (%d available, %d needed)",
- GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_strf_auds));
- gst_buffer_unref (buf);
- return FALSE;
- }
-
- strf = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
-
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
- strf->format = GUINT16_FROM_LE (strf->format);
- strf->channels = GUINT16_FROM_LE (strf->channels);
- strf->rate = GUINT32_FROM_LE (strf->rate);
- strf->av_bps = GUINT32_FROM_LE (strf->av_bps);
- strf->blockalign = GUINT16_FROM_LE (strf->blockalign);
- strf->size = GUINT16_FROM_LE (strf->size);
-#endif
-
- /* size checking */
- *extradata = NULL;
- if (GST_BUFFER_SIZE (buf) > sizeof (gst_riff_strf_auds) + 2) {
- gint len;
-
- len = GST_READ_UINT16_LE (&GST_BUFFER_DATA (buf)[16]);
- if (len + 2 + sizeof (gst_riff_strf_auds) > GST_BUFFER_SIZE (buf)) {
- GST_WARNING ("Extradata indicated %d bytes, but only %d available",
- len, GST_BUFFER_SIZE (buf) - 2 - sizeof (gst_riff_strf_auds));
- len = GST_BUFFER_SIZE (buf) - 2 - sizeof (gst_riff_strf_auds);
- }
- if (len > 0) {
- *extradata = gst_buffer_create_sub (buf,
- sizeof (gst_riff_strf_auds) + 2, len);
- }
- }
-
- /* debug */
- GST_INFO ("strf tag found in context auds:");
- GST_INFO (" format %d", strf->format);
- GST_INFO (" channels %d", strf->channels);
- GST_INFO (" rate %d", strf->rate);
- GST_INFO (" av_bps %d", strf->av_bps);
- GST_INFO (" blockalign %d", strf->blockalign);
- GST_INFO (" size %d", strf->size); /* wordsize, not extrasize! */
- if (*extradata)
- GST_INFO (" %d bytes extra_data", GST_BUFFER_SIZE (*extradata));
-
- gst_buffer_unref (buf);
-
- *header = strf;
-
- return TRUE;
-}
-
-/*
- * Obsolete, use gst_riff_read_strf_auds_with_data ().
- */
-gboolean
-gst_riff_read_strf_auds (GstRiffRead * riff, gst_riff_strf_auds ** header)
-{
- GstBuffer *data = NULL;
- gboolean ret;
-
- ret = gst_riff_read_strf_auds_with_data (riff, header, &data);
- if (data)
- gst_buffer_unref (data);
-
- return ret;
-}
-
-gboolean
-gst_riff_read_strf_iavs (GstRiffRead * riff, gst_riff_strf_iavs ** header)
-{
- guint32 tag;
- GstBuffer *buf;
- gst_riff_strf_iavs *strf;
-
- if (!gst_riff_read_data (riff, &tag, &buf))
- return FALSE;
-
- if (tag != GST_RIFF_TAG_strf) {
- g_warning ("Not a strf chunk");
- gst_buffer_unref (buf);
- return FALSE;
- }
- if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strf_iavs)) {
- GST_WARNING ("Too small strf_iavs (%d available, %d needed)",
- GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_strf_iavs));
- gst_buffer_unref (buf);
- return FALSE;
- }
-
- strf = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
- gst_buffer_unref (buf);
-
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
- strf->DVAAuxSrc = GUINT32_FROM_LE (strf->DVAAuxSrc);
- strf->DVAAuxCtl = GUINT32_FROM_LE (strf->DVAAuxCtl);
- strf->DVAAuxSrc1 = GUINT32_FROM_LE (strf->DVAAuxSrc1);
- strf->DVAAuxCtl1 = GUINT32_FROM_LE (strf->DVAAuxCtl1);
- strf->DVVAuxSrc = GUINT32_FROM_LE (strf->DVVAuxSrc);
- strf->DVVAuxCtl = GUINT32_FROM_LE (strf->DVVAuxCtl);
- strf->DVReserved1 = GUINT32_FROM_LE (strf->DVReserved1);
- strf->DVReserved2 = GUINT32_FROM_LE (strf->DVReserved2);
-#endif
-
- /* debug */
- GST_INFO ("strf tag found in context iavs");
- GST_INFO (" DVAAuxSrc %08x", strf->DVAAuxSrc);
- GST_INFO (" DVAAuxCtl %08x", strf->DVAAuxCtl);
- GST_INFO (" DVAAuxSrc1 %08x", strf->DVAAuxSrc1);
- GST_INFO (" DVAAuxCtl1 %08x", strf->DVAAuxCtl1);
- GST_INFO (" DVVAuxSrc %08x", strf->DVVAuxSrc);
- GST_INFO (" DVVAuxCtl %08x", strf->DVVAuxCtl);
- GST_INFO (" DVReserved1 %08x", strf->DVReserved1);
- GST_INFO (" DVReserved2 %08x", strf->DVReserved2);
-
- *header = strf;
-
- return TRUE;
-}
-
-/*
- * Read a list.
- */
-
-gboolean
-gst_riff_read_list (GstRiffRead * riff, guint32 * tag)
-{
- guint32 length, lst;
- GstRiffLevel *level;
- guint8 *data;
-
- if (!gst_riff_peek_head (riff, &lst, &length, NULL))
- return FALSE;
- if (lst != GST_RIFF_TAG_LIST) {
- g_warning ("Not a LIST object");
- return FALSE;
- }
- gst_bytestream_flush_fast (riff->bs, 8);
- if (gst_bytestream_peek_bytes (riff->bs, &data, 4) != 4) {
- GST_ELEMENT_ERROR (riff, RESOURCE, READ, (NULL), (NULL));
- return FALSE;
- }
- gst_bytestream_flush_fast (riff->bs, 4);
- *tag = GST_READ_UINT32_LE (data);
-
- /* remember level */
- level = g_new (GstRiffLevel, 1);
- level->start = gst_bytestream_tell (riff->bs);
- level->length = length - 4;
- riff->level = g_list_append (riff->level, level);
-
- return TRUE;
-}
-
-/*
- * Utility function for reading metadata in a RIFF file.
- */
-
-gboolean
-gst_riff_read_info (GstRiffRead * riff)
-{
- guint32 tag;
- guint64 end;
- GstRiffLevel *level;
- GList *last;
- gchar *name, *type;
- GstTagList *taglist;
- gboolean have_tags = FALSE;
-
- /* What we're doing here is ugly (oh no!); we look
- * at our LIST tag size and assure that we do not
- * cross boundaries. This is to maintain the level
- * counter for the client app. */
- last = g_list_last (riff->level);
- level = last->data;
- riff->level = g_list_remove (riff->level, level);
- end = level->start + level->length;
- g_free (level);
-
- taglist = gst_tag_list_new ();
-
- while (gst_bytestream_tell (riff->bs) < end) {
- if (!gst_riff_peek_head (riff, &tag, NULL, NULL)) {
- return FALSE;
- }
-
- /* find out the type of metadata */
- switch (tag) {
- case GST_RIFF_INFO_IARL:
- type = GST_TAG_LOCATION;
- break;
- case GST_RIFF_INFO_IART:
- type = GST_TAG_ARTIST;
- break;
- case GST_RIFF_INFO_ICMS:
- type = NULL; /*"Commissioner"; */
- break;
- case GST_RIFF_INFO_ICMT:
- type = GST_TAG_COMMENT;
- break;
- case GST_RIFF_INFO_ICOP:
- type = GST_TAG_COPYRIGHT;
- break;
- case GST_RIFF_INFO_ICRD:
- type = GST_TAG_DATE;
- break;
- case GST_RIFF_INFO_ICRP:
- type = NULL; /*"Cropped"; */
- break;
- case GST_RIFF_INFO_IDIM:
- type = NULL; /*"Dimensions"; */
- break;
- case GST_RIFF_INFO_IDPI:
- type = NULL; /*"Dots per Inch"; */
- break;
- case GST_RIFF_INFO_IENG:
- type = NULL; /*"Engineer"; */
- break;
- case GST_RIFF_INFO_IGNR:
- type = GST_TAG_GENRE;
- break;
- case GST_RIFF_INFO_IKEY:
- type = NULL; /*"Keywords"; */ ;
- break;
- case GST_RIFF_INFO_ILGT:
- type = NULL; /*"Lightness"; */
- break;
- case GST_RIFF_INFO_IMED:
- type = NULL; /*"Medium"; */
- break;
- case GST_RIFF_INFO_INAM:
- type = GST_TAG_TITLE;
- break;
- case GST_RIFF_INFO_IPLT:
- type = NULL; /*"Palette"; */
- break;
- case GST_RIFF_INFO_IPRD:
- type = NULL; /*"Product"; */
- break;
- case GST_RIFF_INFO_ISBJ:
- type = NULL; /*"Subject"; */
- break;
- case GST_RIFF_INFO_ISFT:
- type = GST_TAG_ENCODER;
- break;
- case GST_RIFF_INFO_ISHP:
- type = NULL; /*"Sharpness"; */
- break;
- case GST_RIFF_INFO_ISRC:
- type = GST_TAG_ISRC;
- break;
- case GST_RIFF_INFO_ISRF:
- type = NULL; /*"Source Form"; */
- break;
- case GST_RIFF_INFO_ITCH:
- type = NULL; /*"Technician"; */
- break;
- default:
- type = NULL;
- GST_WARNING ("Unknown INFO (metadata) tag entry " GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (tag));
- break;
- }
-
- if (type) {
- name = NULL;
- if (!gst_riff_read_ascii (riff, &tag, &name)) {
- return FALSE;
- }
-
- if (name && name[0] != '\0') {
- GValue src = { 0 }
- , dest = {
- 0};
- GType dest_type = gst_tag_get_type (type);
-
- have_tags = TRUE;
- g_value_init (&src, G_TYPE_STRING);
- g_value_set_string (&src, name);
- g_value_init (&dest, dest_type);
- g_value_transform (&src, &dest);
- g_value_unset (&src);
- gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
- type, &dest, NULL);
- g_value_unset (&dest);
- }
- g_free (name);
- } else {
- gst_riff_read_skip (riff);
- }
- }
-
- if (have_tags) {
- GstElement *element = GST_ELEMENT (riff);
- GstEvent *event = gst_event_new_tag (taglist);
- const GList *padlist;
-
- /* let the world know about this wonderful thing */
- for (padlist = gst_element_get_pad_list (element);
- padlist != NULL; padlist = padlist->next) {
- if (GST_PAD_IS_SRC (padlist->data) && GST_PAD_IS_USABLE (padlist->data)) {
- gst_event_ref (event);
- gst_pad_push (GST_PAD (padlist->data), GST_DATA (event));
- }
- }
-
- gst_element_found_tags (element, taglist);
-
- gst_event_unref (event);
- } else {
- gst_tag_list_free (taglist);
- }
-
- return TRUE;
-}
-
-/*
- * Read RIFF header and document type.
- */
-
-gboolean
-gst_riff_read_header (GstRiffRead * riff, guint32 * doctype)
-{
- GstRiffLevel *level;
- guint32 tag, length;
- guint8 *data;
-
- /* We ignore size for openDML-2.0 support */
- if (!gst_riff_peek_head (riff, &tag, &length, NULL))
- return FALSE;
- if (tag != GST_RIFF_TAG_RIFF) {
- GST_ELEMENT_ERROR (riff, STREAM, WRONG_TYPE, (NULL), (NULL));
- return FALSE;
- }
- gst_bytestream_flush_fast (riff->bs, 8);
-
- /* doctype */
- if (gst_bytestream_peek_bytes (riff->bs, &data, 4) != 4) {
- GST_ELEMENT_ERROR (riff, RESOURCE, READ, (NULL), (NULL));
- return FALSE;
- }
- gst_bytestream_flush_fast (riff->bs, 4);
- *doctype = GST_READ_UINT32_LE (data);
-
- /* remember level */
- level = g_new (GstRiffLevel, 1);
- level->start = gst_bytestream_tell (riff->bs);
- level->length = length - 4;
- riff->level = g_list_append (riff->level, level);
-
- return TRUE;
-}
+++ /dev/null
-/* GStreamer RIFF I/O
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * riff-read.h: function declarations for parsing a RIFF file
- *
- * 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_RIFF_READ_H__
-#define __GST_RIFF_READ_H__
-
-#include <glib.h>
-#include <gst/gst.h>
-#include <gst/bytestream/bytestream.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RIFF_READ \
- (gst_riff_read_get_type ())
-#define GST_RIFF_READ(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RIFF_READ, GstRiffRead))
-#define GST_RIFF_READ_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RIFF_READ, GstRiffReadClass))
-#define GST_IS_RIFF_READ(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RIFF_READ))
-#define GST_IS_RIFF_READ_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RIFF_READ))
-#define GST_RIFF_READ_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RIFF_READ, GstRiffReadClass))
-
-typedef struct _GstRiffLevel {
- guint64 start,
- length;
-} GstRiffLevel;
-
-typedef struct _GstRiffRead {
- GstElement parent;
-
- GstPad *sinkpad;
- GstByteStream *bs;
-
- GList *level;
-} GstRiffRead;
-
-typedef struct _GstRiffReadClass {
- GstElementClass parent;
-} GstRiffReadClass;
-
-GType gst_riff_read_get_type (void);
-
-guint32 gst_riff_peek_tag (GstRiffRead *riff,
- guint *level_up);
-guint32 gst_riff_peek_list (GstRiffRead *riff);
-gboolean gst_riff_peek_head (GstRiffRead *riff,
- guint32 *tag,
- guint32 *length,
- guint *level_up);
-
-GstEvent *gst_riff_read_seek (GstRiffRead *riff,
- guint64 offset);
-gboolean gst_riff_read_skip (GstRiffRead *riff);
-gboolean gst_riff_read_data (GstRiffRead *riff,
- guint32 *tag,
- GstBuffer **buf);
-gboolean gst_riff_read_ascii (GstRiffRead *riff,
- guint32 *tag,
- gchar **str);
-gboolean gst_riff_read_list (GstRiffRead *riff,
- guint32 *tag);
-gboolean gst_riff_read_header (GstRiffRead *read,
- guint32 *doctype);
-GstBuffer *gst_riff_read_element_data (GstRiffRead *riff,
- guint length,
- guint *got_bytes);
-GstBuffer *gst_riff_peek_element_data (GstRiffRead *riff,
- guint length,
- guint *got_bytes);
-/*
- * Utility functions (including byteswapping).
- */
-gboolean gst_riff_read_strh (GstRiffRead *riff,
- gst_riff_strh **header);
-gboolean gst_riff_read_strf_vids (GstRiffRead *riff,
- gst_riff_strf_vids **header);
-gboolean gst_riff_read_strf_vids_with_data
- (GstRiffRead *riff,
- gst_riff_strf_vids **header,
- GstBuffer **extradata);
-gboolean gst_riff_read_strf_auds (GstRiffRead *riff,
- gst_riff_strf_auds **header);
-gboolean gst_riff_read_strf_auds_with_data
- (GstRiffRead *riff,
- gst_riff_strf_auds **header,
- GstBuffer **extradata);
-gboolean gst_riff_read_strf_iavs (GstRiffRead *riff,
- gst_riff_strf_iavs **header);
-gboolean gst_riff_read_info (GstRiffRead *riff);
-
-G_END_DECLS
-
-#endif /* __GST_RIFF_READ_H__ */
+++ /dev/null
-/* GStreamer RIFF I/O
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * riff.c: plugin registering
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return gst_library_load ("gstbytestream");
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "riff",
- "RIFF I/O functions",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
+++ /dev/null
-EXPORTS
- gst_plugin_desc
- gst_riff_read_get_type
- gst_riff_read_element_data
- gst_riff_create_video_template_caps
- gst_riff_create_video_caps
- gst_riff_create_video_caps_with_data
- gst_riff_create_audio_template_caps
- gst_riff_create_audio_caps
- gst_riff_create_audio_caps_with_data
- gst_riff_create_iavs_template_caps
- gst_riff_create_iavs_caps
- gst_riff_read_header
- gst_riff_read_data
- gst_riff_read_seek
- gst_riff_read_skip
- gst_riff_read_info
- gst_riff_read_list
- gst_riff_read_ascii
- gst_riff_read_strh
- gst_riff_read_strf_iavs
- gst_riff_read_strf_auds
- gst_riff_read_strf_auds_with_data
- gst_riff_read_strf_vids_with_data
- gst_riff_peek_tag
- gst_riff_peek_list
- gst_riff_peek_head
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="riff"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D67890}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;RIFF_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstriff.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="riff.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/riff.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstriff.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;RIFF_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstriff.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="riff.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstriff.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\riff-media.c">
- </File>
- <File
- RelativePath=".\riff-read.c">
- </File>
- <File
- RelativePath=".\riff.c">
- </File>
- <File
- RelativePath=".\riff.def">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\riff-ids.h">
- </File>
- <File
- RelativePath=".\riff-media.h">
- </File>
- <File
- RelativePath=".\riff-read.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-libgsttagincludedir = \
- $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/tag
-
-libgsttaginclude_HEADERS = \
- tag.h
+++ /dev/null
-/* GStreamer
- * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
- *
- * 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_TAG_TAG_H__
-#define __GST_TAG_TAG_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-
-/* functions for vorbis comment manipulation */
-
-G_CONST_RETURN gchar * gst_tag_from_vorbis_tag (const gchar * vorbis_tag);
-G_CONST_RETURN gchar * gst_tag_to_vorbis_tag (const gchar * gst_tag);
-void gst_vorbis_tag_add (GstTagList * list,
- const gchar * tag,
- const gchar * value);
-
-GList * gst_tag_to_vorbis_comments (const GstTagList * list,
- const gchar * tag);
-
-/* functions to convert GstBuffers with vorbiscomment contents to GstTagLists and back */
-GstTagList * gst_tag_list_from_vorbiscomment_buffer (const GstBuffer * buffer,
- const guint8 * id_data,
- const guint id_data_length,
- gchar ** vendor_string);
-GstBuffer * gst_tag_list_to_vorbiscomment_buffer (const GstTagList * list,
- const guint8 * id_data,
- const guint id_data_length,
- const gchar * vendor_string);
-
-/* functions for ID3 tag manipulation */
-
-guint gst_tag_id3_genre_count (void);
-G_CONST_RETURN gchar * gst_tag_id3_genre_get (const guint id);
-GstTagList * gst_tag_list_new_from_id3v1 (const guint8 * data);
-
-G_CONST_RETURN gchar * gst_tag_from_id3_tag (const gchar * vorbis_tag);
-G_CONST_RETURN gchar * gst_tag_to_id3_tag (const gchar * gst_tag);
-
-
-G_END_DECLS
-
-#endif /* __GST_TAG_TAG_H__ */
+++ /dev/null
-# variables used for enum/marshal generation
-glib_enum_headers=$(tuner_headers)
-glib_enum_define=GST_TUNER
-glib_enum_prefix=gst_tuner
-
-libgsttunerincludedir = \
- $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/tuner
-
-tuner_headers = \
- tuner.h \
- tunernorm.h \
- tunerchannel.h
-
-built_sources = \
- tuner-marshal.c \
- tuner-enumtypes.c
-
-built_headers = \
- tuner-marshal.h \
- tuner-enumtypes.h
-
-libgsttunerinclude_HEADERS = \
- $(tuner_headers)
-
-nodist_libgsttunerinclude_HEADERS = \
- tuner-enumtypes.h
-
-noinst_LTLIBRARIES = libgsttuner.la
-
-libgsttuner_la_SOURCES = \
- tuner.c \
- tunernorm.c \
- tunerchannel.c
-
-nodist_libgsttuner_la_SOURCES = \
- $(built_sources) \
- tuner-marshal.h
-
-libgsttuner_la_CFLAGS = $(GST_CFLAGS)
-
-BUILT_SOURCES = \
- $(built_sources) \
- $(built_headers)
-
-EXTRA_DIST = tuner-marshal.list
-
-CLEANFILES = $(BUILT_SOURCES)
-
-include $(top_srcdir)/common/glib-gen.mak
+++ /dev/null
-VOID:OBJECT,ULONG
-VOID:OBJECT,INT
+++ /dev/null
-/* GStreamer Tuner
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tuner.c: tuner design virtual class function wrappers
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "tuner.h"
-#include "tuner-marshal.h"
-
-#include <string.h>
-
-enum
-{
- NORM_CHANGED,
- CHANNEL_CHANGED,
- FREQUENCY_CHANGED,
- SIGNAL_CHANGED,
- LAST_SIGNAL
-};
-
-static void gst_tuner_class_init (GstTunerClass * klass);
-
-static guint gst_tuner_signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_tuner_get_type (void)
-{
- static GType gst_tuner_type = 0;
-
- if (!gst_tuner_type) {
- static const GTypeInfo gst_tuner_info = {
- sizeof (GstTunerClass),
- (GBaseInitFunc) gst_tuner_class_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- gst_tuner_type = g_type_register_static (G_TYPE_INTERFACE,
- "GstTuner", &gst_tuner_info, 0);
- g_type_interface_add_prerequisite (gst_tuner_type,
- GST_TYPE_IMPLEMENTS_INTERFACE);
- }
-
- return gst_tuner_type;
-}
-
-static void
-gst_tuner_class_init (GstTunerClass * klass)
-{
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- gst_tuner_signals[NORM_CHANGED] =
- g_signal_new ("norm-changed",
- GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstTunerClass, norm_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_TUNER_NORM);
- gst_tuner_signals[CHANNEL_CHANGED] =
- g_signal_new ("channel-changed",
- GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstTunerClass, channel_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
- GST_TYPE_TUNER_CHANNEL);
- gst_tuner_signals[FREQUENCY_CHANGED] =
- g_signal_new ("frequency-changed",
- GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstTunerClass, frequency_changed),
- NULL, NULL,
- gst_tuner_marshal_VOID__OBJECT_ULONG, G_TYPE_NONE, 2,
- GST_TYPE_TUNER_CHANNEL, G_TYPE_ULONG);
- gst_tuner_signals[SIGNAL_CHANGED] =
- g_signal_new ("signal-changed",
- GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstTunerClass, signal_changed),
- NULL, NULL,
- gst_tuner_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2,
- GST_TYPE_TUNER_CHANNEL, G_TYPE_INT);
-
- initialized = TRUE;
- }
-
- /* default virtual functions */
- klass->list_channels = NULL;
- klass->set_channel = NULL;
- klass->get_channel = NULL;
-
- klass->list_norms = NULL;
- klass->set_norm = NULL;
- klass->get_norm = NULL;
-
- klass->set_frequency = NULL;
- klass->get_frequency = NULL;
- klass->signal_strength = NULL;
-}
-
-/**
- * gst_tuner_list_channels:
- * @tuner: the #GstTuner (a #GstElement) to get the channels from.
- *
- * Retrieve a list of channels (e.g. 'composite', 's-video', ...)
- * from the given tuner object.
- *
- * Returns: a list of channels available on this tuner.
- */
-
-const GList *
-gst_tuner_list_channels (GstTuner * tuner)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- if (klass->list_channels) {
- return klass->list_channels (tuner);
- }
-
- return NULL;
-}
-
-/**
- * gst_tuner_set_channel:
- * @tuner: the #GstTuner (a #GstElement) that owns the channel.
- * @channel: the channel to tune to.
- *
- * Tunes the object to the given channel.
- */
-
-void
-gst_tuner_set_channel (GstTuner * tuner, GstTunerChannel * channel)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- if (klass->set_channel) {
- klass->set_channel (tuner, channel);
- }
-}
-
-/**
- * gst_Tuner_get_channel:
- * @tuner: the #GstTuner (a #GstElement) to get the current channel from.
- *
- * Retrieve the current channel from the tuner.
- *
- * Returns: the current channel of the tuner object.
- */
-
-GstTunerChannel *
-gst_tuner_get_channel (GstTuner * tuner)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- if (klass->get_channel) {
- return klass->get_channel (tuner);
- }
-
- return NULL;
-}
-
-/**
- * gst_tuner_get_norms_list:
- * @tuner: the #GstTuner (*a #GstElement) to get the list of norms from.
- *
- * Retrieve a list of available norms on the currently tuned channel
- * from the given tuner object.
- *
- * Returns: A list of norms available on the current channel for this
- * tuner object.
- */
-
-const GList *
-gst_tuner_list_norms (GstTuner * tuner)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- if (klass->list_norms) {
- return klass->list_norms (tuner);
- }
-
- return NULL;
-}
-
-/**
- * gst_tuner_set_norm:
- * @tuner: the #GstTuner (a #GstElement) to set the norm on.
- * @norm: the norm to use for the current channel.
- *
- * Changes the video norm on this tuner to the given norm.
- */
-
-void
-gst_tuner_set_norm (GstTuner * tuner, GstTunerNorm * norm)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- if (klass->set_norm) {
- klass->set_norm (tuner, norm);
- }
-}
-
-/**
- * gst_tuner_get_norm:
- * @tuner: the #GstTuner (a #GstElement) to get the current norm from.
- *
- * Get the current video norm from the given tuner object for the
- * currently selected channel.
- *
- * Returns: the current norm.
- */
-
-GstTunerNorm *
-gst_tuner_get_norm (GstTuner * tuner)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- if (klass->get_norm) {
- return klass->get_norm (tuner);
- }
-
- return NULL;
-}
-
-/**
- * gst_tuner_set_frequency:
- * @tuner: the #Gsttuner (a #GstElement) that owns the given channel.
- * @channel: the #GstTunerChannel to set the frequency on.
- * @frequency: the frequency to tune in to.
- *
- * Sets a tuning frequency on the given tuner/channel. Note that this
- * requires the given channel to be a "tuning" channel, which can be
- * checked using GST_TUNER_CHANNEL_HAS_FLAG (), with the proper flag
- * being GST_TUNER_CHANNEL_FREQUENCY.
- */
-
-void
-gst_tuner_set_frequency (GstTuner * tuner,
- GstTunerChannel * channel, gulong frequency)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- g_return_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
- GST_TUNER_CHANNEL_FREQUENCY));
-
- if (klass->set_frequency) {
- klass->set_frequency (tuner, channel, frequency);
- }
-}
-
-/**
- * gst_tuner_get_frequency:
- * @tuner: the #GstTuner (a #GstElement) that owns the given channel.
- * @channel: the #GstTunerChannel to retrieve the frequency from.
- *
- * Retrieve the current frequency from the given channel. The same
- * applies as for set_frequency (): check the flag.
- *
- * Returns: the current frequency, or 0 on error.
- */
-
-gulong
-gst_tuner_get_frequency (GstTuner * tuner, GstTunerChannel * channel)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- g_return_val_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
- GST_TUNER_CHANNEL_FREQUENCY), 0);
-
- if (klass->get_frequency) {
- return klass->get_frequency (tuner, channel);
- }
-
- return 0;
-}
-
-/**
- * gst_tuner_get_signal_strength:
- * @tuner: the #GstTuner (a #GstElement) that owns the given channel.
- * @channel: the #GstTunerChannel to get the signal strength from.
- *
- * get the strength of the signal on this channel. Note that this
- * requires the current channel to be a "tuning" channel, e.g. a
- * channel on which frequency can be set. This can be checked using
- * GST_TUNER_CHANNEL_HAS_FLAG (), and the appropriate flag to check
- * for is GST_TUNER_CHANNEL_FREQUENCY.
- *
- * Returns: signal strength, or 0 on error.
- */
-
-gint
-gst_tuner_signal_strength (GstTuner * tuner, GstTunerChannel * channel)
-{
- GstTunerClass *klass = GST_TUNER_GET_CLASS (tuner);
-
- g_return_val_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
- GST_TUNER_CHANNEL_FREQUENCY), 0);
-
- if (klass->signal_strength) {
- return klass->signal_strength (tuner, channel);
- }
-
- return 0;
-}
-
-GstTunerNorm *
-gst_tuner_find_norm_by_name (GstTuner * tuner, gchar * norm)
-{
- GList *walk;
-
- g_return_val_if_fail (GST_TUNER (tuner), NULL);
- g_return_val_if_fail (norm != NULL, NULL);
-
- walk = (GList *) gst_tuner_list_norms (tuner);
- while (walk) {
- if (strcmp (GST_TUNER_NORM (walk->data)->label, norm) == 0)
- return GST_TUNER_NORM (walk->data);
- walk = g_list_next (walk);
- }
- return NULL;
-}
-
-GstTunerChannel *
-gst_tuner_find_channel_by_name (GstTuner * tuner, gchar * channel)
-{
- GList *walk;
-
- g_return_val_if_fail (GST_TUNER (tuner), NULL);
- g_return_val_if_fail (channel != NULL, NULL);
-
- walk = (GList *) gst_tuner_list_channels (tuner);
- while (walk) {
- if (strcmp (GST_TUNER_CHANNEL (walk->data)->label, channel) == 0)
- return GST_TUNER_CHANNEL (walk->data);
- walk = g_list_next (walk);
- }
- return NULL;
-}
-
-void
-gst_tuner_channel_changed (GstTuner * tuner, GstTunerChannel * channel)
-{
- g_return_if_fail (GST_IS_TUNER (tuner));
- g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
-
- g_signal_emit (G_OBJECT (tuner),
- gst_tuner_signals[CHANNEL_CHANGED], 0, channel);
-}
-
-void
-gst_tuner_norm_changed (GstTuner * tuner, GstTunerNorm * norm)
-{
- g_return_if_fail (GST_IS_TUNER (tuner));
- g_return_if_fail (GST_IS_TUNER_NORM (norm));
-
- g_signal_emit (G_OBJECT (tuner), gst_tuner_signals[NORM_CHANGED], 0, norm);
-}
-
-void
-gst_tuner_frequency_changed (GstTuner * tuner,
- GstTunerChannel * channel, gulong frequency)
-{
- g_return_if_fail (GST_IS_TUNER (tuner));
- g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
-
- g_signal_emit (G_OBJECT (tuner),
- gst_tuner_signals[FREQUENCY_CHANGED], 0, channel, frequency);
-
- g_signal_emit_by_name (G_OBJECT (channel), "frequency_changed", frequency);
-}
-
-void
-gst_tuner_signal_changed (GstTuner * tuner,
- GstTunerChannel * channel, gint signal)
-{
- g_return_if_fail (GST_IS_TUNER (tuner));
- g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
-
- g_signal_emit (G_OBJECT (tuner),
- gst_tuner_signals[SIGNAL_CHANGED], 0, channel, signal);
-
- g_signal_emit_by_name (G_OBJECT (channel), "signal_changed", signal);
-}
+++ /dev/null
-/* GStreamer Tuner
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tuner.h: tuner interface design
- *
- * 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_TUNER_H__
-#define __GST_TUNER_H__
-
-#include <gst/gst.h>
-#include <gst/tuner/tunernorm.h>
-#include <gst/tuner/tunerchannel.h>
-#include <gst/tuner/tuner-enumtypes.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_TUNER \
- (gst_tuner_get_type ())
-#define GST_TUNER(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER, GstTuner))
-#define GST_TUNER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER, GstTunerClass))
-#define GST_IS_TUNER(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER))
-#define GST_IS_TUNER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER))
-#define GST_TUNER_GET_CLASS(inst) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_TUNER, GstTunerClass))
-
-typedef struct _GstTuner GstTuner;
-
-typedef struct _GstTunerClass {
- GTypeInterface klass;
-
- /* virtual functions */
- const GList * (* list_channels) (GstTuner *tuner);
- void (* set_channel) (GstTuner *tuner,
- GstTunerChannel *channel);
- GstTunerChannel *
- (* get_channel) (GstTuner *tuner);
-
- const GList * (* list_norms) (GstTuner *tuner);
- void (* set_norm) (GstTuner *tuner,
- GstTunerNorm *norm);
- GstTunerNorm *(* get_norm) (GstTuner *tuner);
-
- void (* set_frequency) (GstTuner *tuner,
- GstTunerChannel *channel,
- gulong frequency);
- gulong (* get_frequency) (GstTuner *tuner,
- GstTunerChannel *channel);
- gint (* signal_strength) (GstTuner *tuner,
- GstTunerChannel *channel);
-
- /* signals */
- void (*channel_changed) (GstTuner *tuner,
- GstTunerChannel *channel);
- void (*norm_changed) (GstTuner *tuner,
- GstTunerNorm *norm);
- void (*frequency_changed) (GstTuner *tuner,
- GstTunerChannel *channel,
- gulong frequency);
- void (*signal_changed) (GstTuner *tuner,
- GstTunerChannel *channel,
- gint signal);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstTunerClass;
-
-GType gst_tuner_get_type (void);
-
-/* virtual class function wrappers */
-const GList * gst_tuner_list_channels (GstTuner *tuner);
-void gst_tuner_set_channel (GstTuner *tuner,
- GstTunerChannel *channel);
-GstTunerChannel *
- gst_tuner_get_channel (GstTuner *tuner);
-
-const GList * gst_tuner_list_norms (GstTuner *tuner);
-void gst_tuner_set_norm (GstTuner *tuner,
- GstTunerNorm *channel);
-GstTunerNorm * gst_tuner_get_norm (GstTuner *tuner);
-
-void gst_tuner_set_frequency (GstTuner *tuner,
- GstTunerChannel *channel,
- gulong frequency);
-gulong gst_tuner_get_frequency (GstTuner *tuner,
- GstTunerChannel *channel);
-gint gst_tuner_signal_strength (GstTuner *tuner,
- GstTunerChannel *channel);
-
-/* helper functions */
-GstTunerNorm * gst_tuner_find_norm_by_name (GstTuner *tuner,
- gchar *norm);
-GstTunerChannel *gst_tuner_find_channel_by_name (GstTuner *tuner,
- gchar *channel);
-
-/* trigger signals */
-void gst_tuner_channel_changed (GstTuner *tuner,
- GstTunerChannel *channel);
-void gst_tuner_norm_changed (GstTuner *tuner,
- GstTunerNorm *norm);
-void gst_tuner_frequency_changed (GstTuner *tuner,
- GstTunerChannel *channel,
- gulong frequency);
-void gst_tuner_signal_changed (GstTuner *tuner,
- GstTunerChannel *channel,
- gint signal);
-
-G_END_DECLS
-
-#endif /* __GST_TUNER_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="tuner"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D6789C}"
- RootNamespace="tuner"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gsttuner.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="tuner.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/tuner.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gsttuner.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gsttuner.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile="tuner.def"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gsttuner.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\tuner.c">
- </File>
- <File
- RelativePath=".\tunerchannel.c">
- </File>
- <File
- RelativePath=".\tunernorm.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\tuner.h">
- </File>
- <File
- RelativePath=".\tunerchannel.h">
- </File>
- <File
- RelativePath=".\tunernorm.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/* GStreamer Tuner
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tunerchannel.c: tuner channel object design
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "tunerchannel.h"
-
-enum
-{
- /* FILL ME */
- SIGNAL_FREQUENCY_CHANGED,
- SIGNAL_SIGNAL_CHANGED,
- LAST_SIGNAL
-};
-
-static void gst_tuner_channel_class_init (GstTunerChannelClass * klass);
-static void gst_tuner_channel_init (GstTunerChannel * channel);
-static void gst_tuner_channel_dispose (GObject * object);
-
-static GObjectClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = { 0 };
-
-GType
-gst_tuner_channel_get_type (void)
-{
- static GType gst_tuner_channel_type = 0;
-
- if (!gst_tuner_channel_type) {
- static const GTypeInfo tuner_channel_info = {
- sizeof (GstTunerChannelClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_tuner_channel_class_init,
- NULL,
- NULL,
- sizeof (GstTunerChannel),
- 0,
- (GInstanceInitFunc) gst_tuner_channel_init,
- NULL
- };
-
- gst_tuner_channel_type =
- g_type_register_static (G_TYPE_OBJECT,
- "GstTunerChannel", &tuner_channel_info, 0);
- }
-
- return gst_tuner_channel_type;
-}
-
-static void
-gst_tuner_channel_class_init (GstTunerChannelClass * klass)
-{
- GObjectClass *object_klass = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
-
- signals[SIGNAL_FREQUENCY_CHANGED] =
- g_signal_new ("frequency-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstTunerChannelClass,
- frequency_changed),
- NULL, NULL, g_cclosure_marshal_VOID__ULONG, G_TYPE_NONE, 1, G_TYPE_ULONG);
- signals[SIGNAL_SIGNAL_CHANGED] =
- g_signal_new ("signal-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstTunerChannelClass,
- signal_changed),
- NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
- object_klass->dispose = gst_tuner_channel_dispose;
-}
-
-static void
-gst_tuner_channel_init (GstTunerChannel * channel)
-{
- channel->label = NULL;
- channel->flags = 0;
- channel->min_frequency = channel->max_frequency = 0;
- channel->min_signal = channel->max_signal = 0;
-}
-
-static void
-gst_tuner_channel_dispose (GObject * object)
-{
- GstTunerChannel *channel = GST_TUNER_CHANNEL (object);
-
- if (channel->label) {
- g_free (channel->label);
- channel->label = NULL;
- }
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
+++ /dev/null
-/* GStreamer Tuner
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tunerchannel.h: tuner channel object design
- *
- * 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_TUNER_CHANNEL_H__
-#define __GST_TUNER_CHANNEL_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_TUNER_CHANNEL \
- (gst_tuner_channel_get_type ())
-#define GST_TUNER_CHANNEL(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER_CHANNEL, \
- GstTunerChannel))
-#define GST_TUNER_CHANNEL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER_CHANNEL, \
- GstTunerChannelClass))
-#define GST_IS_TUNER_CHANNEL(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER_CHANNEL))
-#define GST_IS_TUNER_CHANNEL_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER_CHANNEL))
-
-typedef enum {
- GST_TUNER_CHANNEL_INPUT = (1<<0),
- GST_TUNER_CHANNEL_OUTPUT = (1<<1),
- GST_TUNER_CHANNEL_FREQUENCY = (1<<2),
- GST_TUNER_CHANNEL_AUDIO = (1<<3)
-} GstTunerChannelFlags;
-
-#define GST_TUNER_CHANNEL_HAS_FLAG(channel, flag) \
- ((channel)->flags & flag)
-
-typedef struct _GstTunerChannel {
- GObject parent;
-
- gchar *label;
- GstTunerChannelFlags flags;
- gfloat freq_multiplicator;
- gulong min_frequency,
- max_frequency;
- gint min_signal,
- max_signal;
-} GstTunerChannel;
-
-typedef struct _GstTunerChannelClass {
- GObjectClass parent;
-
- /* signals */
- void (*frequency_changed) (GstTunerChannel *channel,
- gulong frequency);
- void (*signal_changed) (GstTunerChannel *channel,
- gint signal);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstTunerChannelClass;
-
-GType gst_tuner_channel_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_TUNER_CHANNEL_H__ */
+++ /dev/null
-/* GStreamer Tuner
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tunernorm.c: tuner norm object design
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "tunernorm.h"
-
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-static void gst_tuner_norm_class_init (GstTunerNormClass * klass);
-static void gst_tuner_norm_init (GstTunerNorm * norm);
-static void gst_tuner_norm_dispose (GObject * object);
-
-static GObjectClass *parent_class = NULL;
-
-/*static guint signals[LAST_SIGNAL] = { 0 };*/
-
-GType
-gst_tuner_norm_get_type (void)
-{
- static GType gst_tuner_norm_type = 0;
-
- if (!gst_tuner_norm_type) {
- static const GTypeInfo tuner_norm_info = {
- sizeof (GstTunerNormClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_tuner_norm_class_init,
- NULL,
- NULL,
- sizeof (GstTunerNorm),
- 0,
- (GInstanceInitFunc) gst_tuner_norm_init,
- NULL
- };
-
- gst_tuner_norm_type =
- g_type_register_static (G_TYPE_OBJECT,
- "GstTunerNorm", &tuner_norm_info, 0);
- }
-
- return gst_tuner_norm_type;
-}
-
-static void
-gst_tuner_norm_class_init (GstTunerNormClass * klass)
-{
- GObjectClass *object_klass = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
-
- object_klass->dispose = gst_tuner_norm_dispose;
-}
-
-static void
-gst_tuner_norm_init (GstTunerNorm * norm)
-{
- norm->label = NULL;
- norm->fps = 0.;
-}
-
-static void
-gst_tuner_norm_dispose (GObject * object)
-{
- GstTunerNorm *norm = GST_TUNER_NORM (object);
-
- if (norm->label) {
- g_free (norm->label);
- norm->label = NULL;
- }
-
- if (parent_class->dispose)
- parent_class->dispose (object);
-}
+++ /dev/null
-/* GStreamer Tuner
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tunernorm.h: tuner norm object design
- *
- * 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_TUNER_NORM_H__
-#define __GST_TUNER_NORM_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_TUNER_NORM \
- (gst_tuner_norm_get_type ())
-#define GST_TUNER_NORM(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER_NORM, GstTunerNorm))
-#define GST_TUNER_NORM_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER_NORM, GstTunerNormClass))
-#define GST_IS_TUNER_NORM(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER_NORM))
-#define GST_IS_TUNER_NORM_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER_NORM))
-
-typedef struct _GstTunerNorm {
- GObject parent;
-
- gchar *label;
- gfloat fps;
-} GstTunerNorm;
-
-typedef struct _GstTunerNormClass {
- GObjectClass parent;
-
- gpointer _gst_reserved[GST_PADDING];
-} GstTunerNormClass;
-
-GType gst_tuner_norm_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_TUNER_NORM_H__ */
+++ /dev/null
-librarydir = $(libdir)/gstreamer-@GST_MAJORMINOR@
-
-library_LTLIBRARIES = libgstvideo.la
-
-libgstvideo_la_SOURCES = video.c gstvideosink.c
-
-libgstvideoincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/video
-libgstvideoinclude_HEADERS = video.h videosink.h
-
-libgstvideo_la_LIBADD =
-libgstvideo_la_CFLAGS = $(GST_CFLAGS)
-libgstvideo_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+++ /dev/null
-/*
- * GStreamer Video sink.
- *
- * Copyright (C) <2003> Julien Moutte <julien@moutte.net>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "videosink.h"
-
-static GstElementClass *parent_class = NULL;
-
-/* Private methods */
-
-static void
-gst_videosink_set_clock (GstElement * element, GstClock * clock)
-{
- GstVideoSink *videosink;
-
- videosink = GST_VIDEOSINK (element);
-
- videosink->clock = clock;
-}
-
-/* Initing stuff */
-
-static void
-gst_videosink_init (GstVideoSink * videosink)
-{
- videosink->width = 0;
- videosink->height = 0;
- videosink->clock = NULL;
-}
-
-static void
-gst_videosink_class_init (GstVideoSinkClass * klass)
-{
- GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
-
- gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
-
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
-
- gstelement_class->set_clock = gst_videosink_set_clock;
-}
-
-/* Public methods */
-
-GType
-gst_videosink_get_type (void)
-{
- static GType videosink_type = 0;
-
- if (!videosink_type) {
- static const GTypeInfo videosink_info = {
- sizeof (GstVideoSinkClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_videosink_class_init,
- NULL,
- NULL,
- sizeof (GstVideoSink),
- 0,
- (GInstanceInitFunc) gst_videosink_init,
- };
-
- videosink_type = g_type_register_static (GST_TYPE_ELEMENT,
- "GstVideoSink", &videosink_info, 0);
- }
-
- return videosink_type;
-}
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Library <2002> Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "video.h"
-
-/* This is simply a convenience function, nothing more or less */
-
-gdouble
-gst_video_frame_rate (GstPad * pad)
-{
- gdouble fps = 0.;
- const GstCaps *caps = NULL;
- GstStructure *structure;
-
- /* get pad caps */
- caps = GST_PAD_CAPS (pad);
- if (caps == NULL) {
- g_warning ("gstvideo: failed to get caps of pad %s:%s",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- return 0.;
- }
-
- structure = gst_caps_get_structure (caps, 0);
- if (!gst_structure_get_double (structure, "framerate", &fps)) {
- g_warning ("gstvideo: failed to get framerate property of pad %s:%s",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- return 0.;
- }
-
- GST_DEBUG ("Framerate request on pad %s:%s: %f",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad), fps);
-
- return fps;
-}
-
-gboolean
-gst_video_get_size (GstPad * pad, gint * width, gint * height)
-{
- const GstCaps *caps = NULL;
- GstStructure *structure;
- gboolean ret;
-
- g_return_val_if_fail (pad != NULL, FALSE);
- g_return_val_if_fail (width != NULL, FALSE);
- g_return_val_if_fail (height != NULL, FALSE);
-
- caps = GST_PAD_CAPS (pad);
-
- if (caps == NULL) {
- g_warning ("gstvideo: failed to get caps of pad %s:%s",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- return FALSE;
- }
-
- structure = gst_caps_get_structure (caps, 0);
- ret = gst_structure_get_int (structure, "width", width);
- ret &= gst_structure_get_int (structure, "height", height);
-
- if (!ret) {
- g_warning ("gstvideo: failed to get size properties on pad %s:%s",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)), GST_PAD_NAME (pad));
- return FALSE;
- }
-
- GST_DEBUG ("size request on pad %s:%s: %dx%d",
- GST_ELEMENT_NAME (gst_pad_get_parent (pad)),
- GST_PAD_NAME (pad), width ? *width : -1, height ? *height : -1);
-
- return TRUE;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "gstvideo",
- "Convenience routines for video plugins",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
+++ /dev/null
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Library <2002> Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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_VIDEO_H__
-#define __GST_VIDEO_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_VIDEO_BYTE1_MASK_32 "0xFF000000"
-#define GST_VIDEO_BYTE2_MASK_32 "0x00FF0000"
-#define GST_VIDEO_BYTE3_MASK_32 "0x0000FF00"
-#define GST_VIDEO_BYTE4_MASK_32 "0x000000FF"
-
-#define GST_VIDEO_BYTE1_MASK_24 "0x00FF0000"
-#define GST_VIDEO_BYTE2_MASK_24 "0x0000FF00"
-#define GST_VIDEO_BYTE3_MASK_24 "0x000000FF"
-
-#define GST_VIDEO_BYTE1_MASK_32_INT 0xFF000000
-#define GST_VIDEO_BYTE2_MASK_32_INT 0x00FF0000
-#define GST_VIDEO_BYTE3_MASK_32_INT 0x0000FF00
-#define GST_VIDEO_BYTE4_MASK_32_INT 0x000000FF
-
-#define GST_VIDEO_BYTE1_MASK_24_INT 0x00FF0000
-#define GST_VIDEO_BYTE2_MASK_24_INT 0x0000FF00
-#define GST_VIDEO_BYTE3_MASK_24_INT 0x000000FF
-
-#define GST_VIDEO_RED_MASK_16 "0xf800"
-#define GST_VIDEO_GREEN_MASK_16 "0x07e0"
-#define GST_VIDEO_BLUE_MASK_16 "0x001f"
-
-#define GST_VIDEO_RED_MASK_15 "0x7c00"
-#define GST_VIDEO_GREEN_MASK_15 "0x03e0"
-#define GST_VIDEO_BLUE_MASK_15 "0x001f"
-
-#define GST_VIDEO_RED_MASK_16_INT 0xf800
-#define GST_VIDEO_GREEN_MASK_16_INT 0x07e0
-#define GST_VIDEO_BLUE_MASK_16_INT 0x001f
-
-#define GST_VIDEO_RED_MASK_15_INT 0x7c00
-#define GST_VIDEO_GREEN_MASK_15_INT 0x03e0
-#define GST_VIDEO_BLUE_MASK_15_INT 0x001f
-
-#define GST_VIDEO_SIZE_RANGE "(int) [ 16, 4096 ]"
-#define GST_VIDEO_FPS_RANGE "(double) [ 0, max ]"
-
-/* consider the next 2 protected */
-#define __GST_VIDEO_CAPS_MAKE_32A(R, G, B, A) \
- "video/x-raw-rgb, " \
- "bpp = (int) 32, " \
- "depth = (int) 32, " \
- "endianness = (int) BIG_ENDIAN, " \
- "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", " \
- "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", " \
- "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", " \
- "alpha_mask = (int) " GST_VIDEO_BYTE ## A ## _MASK_32 ", " \
- "width = " GST_VIDEO_SIZE_RANGE ", " \
- "height = " GST_VIDEO_SIZE_RANGE ", " \
- "framerate = " GST_VIDEO_FPS_RANGE
-
-#define __GST_VIDEO_CAPS_MAKE_32(R, G, B) \
- "video/x-raw-rgb, " \
- "bpp = (int) 32, " \
- "depth = (int) 24, " \
- "endianness = (int) BIG_ENDIAN, " \
- "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", " \
- "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", " \
- "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", " \
- "width = " GST_VIDEO_SIZE_RANGE ", " \
- "height = " GST_VIDEO_SIZE_RANGE ", " \
- "framerate = " GST_VIDEO_FPS_RANGE
-
-#define __GST_VIDEO_CAPS_MAKE_24(R, G, B) \
- "video/x-raw-rgb, " \
- "bpp = (int) 24, " \
- "depth = (int) 24, " \
- "endianness = (int) BIG_ENDIAN, " \
- "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_24 ", " \
- "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_24 ", " \
- "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_24 ", " \
- "width = " GST_VIDEO_SIZE_RANGE ", " \
- "height = " GST_VIDEO_SIZE_RANGE ", " \
- "framerate = " GST_VIDEO_FPS_RANGE
-
-
-/* 24 bit */
-
-#define GST_VIDEO_CAPS_RGB \
- __GST_VIDEO_CAPS_MAKE_24 (1, 2, 3)
-
-#define GST_VIDEO_CAPS_BGR \
- __GST_VIDEO_CAPS_MAKE_24 (3, 2, 1)
-
-/* 32 bit */
-
-#define GST_VIDEO_CAPS_RGBx \
- __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3)
-
-#define GST_VIDEO_CAPS_xRGB \
- __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4)
-
-#define GST_VIDEO_CAPS_BGRx \
- __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1)
-
-#define GST_VIDEO_CAPS_xBGR \
- __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2)
-
-/* 32 bit alpha */
-
-#define GST_VIDEO_CAPS_RGBA \
- __GST_VIDEO_CAPS_MAKE_32A (1, 2, 3, 4)
-
-#define GST_VIDEO_CAPS_ARGB \
- __GST_VIDEO_CAPS_MAKE_32A (2, 3, 4, 1)
-
-#define GST_VIDEO_CAPS_BGRA \
- __GST_VIDEO_CAPS_MAKE_32A (3, 2, 1, 4)
-
-#define GST_VIDEO_CAPS_ABGR \
- __GST_VIDEO_CAPS_MAKE_32A (4, 3, 2, 1)
-
-/* note: the macro name uses the order on BE systems */
-#if G_BYTE_ORDER == G_BIG_ENDIAN
- #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \
- GST_VIDEO_CAPS_xRGB
- #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
- GST_VIDEO_CAPS_BGRx
-#else
- #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \
- GST_VIDEO_CAPS_BGRx
- #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
- GST_VIDEO_CAPS_xRGB
-#endif
-
-/* 15/16 bit */
-
-#define GST_VIDEO_CAPS_RGB_16 \
- "video/x-raw-rgb, " \
- "bpp = (int) 16, " \
- "depth = (int) 16, " \
- "endianness = (int) BYTE_ORDER, " \
- "red_mask = (int) " GST_VIDEO_RED_MASK_16 ", " \
- "green_mask = (int) " GST_VIDEO_GREEN_MASK_16 ", " \
- "blue_mask = (int) " GST_VIDEO_BLUE_MASK_16 ", " \
- "width = " GST_VIDEO_SIZE_RANGE ", " \
- "height = " GST_VIDEO_SIZE_RANGE ", " \
- "framerate = " GST_VIDEO_FPS_RANGE
-
-#define GST_VIDEO_CAPS_RGB_15 \
- "video/x-raw-rgb, " \
- "bpp = (int) 16, " \
- "depth = (int) 15, " \
- "endianness = (int) BYTE_ORDER, " \
- "red_mask = (int) " GST_VIDEO_RED_MASK_15 ", " \
- "green_mask = (int) " GST_VIDEO_GREEN_MASK_15 ", " \
- "blue_mask = (int) " GST_VIDEO_BLUE_MASK_15 ", " \
- "width = " GST_VIDEO_SIZE_RANGE ", " \
- "height = " GST_VIDEO_SIZE_RANGE ", " \
- "framerate = " GST_VIDEO_FPS_RANGE
-
-#define GST_VIDEO_CAPS_YUV(fourcc) \
- "video/x-raw-yuv, " \
- "format = (fourcc) " fourcc ", " \
- "width = " GST_VIDEO_SIZE_RANGE ", " \
- "height = " GST_VIDEO_SIZE_RANGE ", " \
- "framerate = " GST_VIDEO_FPS_RANGE
-
-/* functions */
-gdouble gst_video_frame_rate (GstPad *pad);
-gboolean gst_video_get_size (GstPad *pad,
- gint *width,
- gint *height);
-
-G_END_DECLS
-
-#endif /* __GST_VIDEO_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="video"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D6789D}"
- RootNamespace="video"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstvideo.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/video.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstvideo.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstvideo.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstvideo.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\gstvideosink.c">
- </File>
- <File
- RelativePath=".\video.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\video.h">
- </File>
- <File
- RelativePath=".\videosink.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-/*
- * GStreamer Video sink.
- *
- * Copyright (C) <2003> Julien Moutte <julien@moutte.net>
- *
- * 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_VIDEOSINK_H__
-#define __GST_VIDEOSINK_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_VIDEOSINK (gst_videosink_get_type())
-#define GST_VIDEOSINK(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEOSINK, GstVideoSink))
-#define GST_VIDEOSINK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VIDEOSINK, GstVideoSink))
-#define GST_IS_VIDEOSINK(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEOSINK))
-#define GST_IS_VIDEOSINK_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VIDEOSINK))
-#define GST_VIDEOSINK_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VIDEOSINK, GstVideoSinkClass))
-
-#define GST_VIDEOSINK_PAD(obj) (GST_VIDEOSINK (obj)->sinkpad)
-#define GST_VIDEOSINK_WIDTH(obj) (GST_VIDEOSINK (obj)->width)
-#define GST_VIDEOSINK_HEIGHT(obj) (GST_VIDEOSINK (obj)->height)
-#define GST_VIDEOSINK_CLOCK(obj) (GST_VIDEOSINK (obj)->clock)
-
-typedef struct _GstVideoSink GstVideoSink;
-typedef struct _GstVideoSinkClass GstVideoSinkClass;
-
-struct _GstVideoSink {
- GstElement element;
-
- GstPad *sinkpad;
-
- gint width, height;
-
- GstClock *clock;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-struct _GstVideoSinkClass {
- GstElementClass parent_class;
-
- gpointer _gst_reserved[GST_PADDING];
-};
-
-GType gst_videosink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_VIDEOSINK_H__ */
+++ /dev/null
-libgstinterfacesincludedir = \
- $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/xoverlay
-
-libgstinterfacesinclude_HEADERS = xoverlay.h
-
-noinst_LTLIBRARIES = libgstxoverlay.la
-
-libgstxoverlay_la_SOURCES = xoverlay.c
-libgstxoverlay_la_CFLAGS = $(GST_CFLAGS)
-libgstxoverlay_la_LIBADD =
-
+++ /dev/null
-/* GStreamer X-based Overlay
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * tv-mixer.c: tv-mixer design virtual class function wrappers
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "xoverlay.h"
-
-enum
-{
- HAVE_XWINDOW_ID,
- DESIRED_SIZE,
- LAST_SIGNAL
-};
-
-static guint gst_x_overlay_signals[LAST_SIGNAL] = { 0 };
-
-static void gst_x_overlay_base_init (gpointer g_class);
-
-GType
-gst_x_overlay_get_type (void)
-{
- static GType gst_x_overlay_type = 0;
-
- if (!gst_x_overlay_type) {
- static const GTypeInfo gst_x_overlay_info = {
- sizeof (GstXOverlayClass),
- gst_x_overlay_base_init,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- };
-
- gst_x_overlay_type = g_type_register_static (G_TYPE_INTERFACE,
- "GstXOverlay", &gst_x_overlay_info, 0);
- g_type_interface_add_prerequisite (gst_x_overlay_type,
- GST_TYPE_IMPLEMENTS_INTERFACE);
- }
-
- return gst_x_overlay_type;
-}
-
-/* FIXME: evil hack, we should figure out our marshal handling in this interfaces some day */
-extern void gst_marshal_VOID__INT_INT (GClosure * closure,
- GValue * return_value, guint n_param_values, const GValue * param_values,
- gpointer invocation_hint, gpointer marshal_data);
-
-static void
-gst_x_overlay_base_init (gpointer g_class)
-{
- GstXOverlayClass *overlay_class = (GstXOverlayClass *) g_class;
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- gst_x_overlay_signals[HAVE_XWINDOW_ID] =
- g_signal_new ("have-xwindow-id",
- GST_TYPE_X_OVERLAY, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstXOverlayClass, have_xwindow_id),
- NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
- gst_x_overlay_signals[DESIRED_SIZE] =
- g_signal_new ("desired-size-changed",
- GST_TYPE_X_OVERLAY, G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GstXOverlayClass, desired_size),
- NULL, NULL,
- gst_marshal_VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
-
- initialized = TRUE;
- }
-
- overlay_class->set_xwindow_id = NULL;
-}
-
-/**
- * gst_x_overlay_set_xwindow_id:
- * @overlay: a #GstXOverlay to set the XWindow on.
- * @xwindow_id: a #XID referencing the XWindow.
- *
- * This will call the video overlay's set_xwindow_id method. You should
- * use this method to tell to a XOverlay to display video output to a
- * specific XWindow. Passing 0 as the xwindow_id will tell the overlay to
- * stop using that window and create an internal one.
- */
-void
-gst_x_overlay_set_xwindow_id (GstXOverlay * overlay, gulong xwindow_id)
-{
- GstXOverlayClass *klass = GST_X_OVERLAY_GET_CLASS (overlay);
-
- if (klass->set_xwindow_id) {
- klass->set_xwindow_id (overlay, xwindow_id);
- }
-}
-
-/**
- * gst_x_overlay_got_xwindow_id:
- * @overlay: a #GstXOverlay which got a XWindow.
- * @xwindow_id: a #XID referencing the XWindow.
- *
- * This will fire an have_xwindow_id signal.
- *
- * This function should be used by video overlay developpers.
- */
-void
-gst_x_overlay_got_xwindow_id (GstXOverlay * overlay, gulong xwindow_id)
-{
- g_return_if_fail (overlay != NULL);
- g_return_if_fail (GST_IS_X_OVERLAY (overlay));
-
- g_signal_emit (G_OBJECT (overlay),
- gst_x_overlay_signals[HAVE_XWINDOW_ID], 0, (gint) xwindow_id);
-}
-
-/**
- * gst_x_overlay_get_desired_size:
- * @overlay: a #GstXOverlay which got a XWindow.
- * @width: pointer to a gint taking the width or NULL.
- * @height: pointer to a gint taking the height or NULL.
- *
- * Gets the desired size of the overlay. If the overlay doesn't know its desired
- * size, width and height are set to 0.
- */
-void
-gst_x_overlay_get_desired_size (GstXOverlay * overlay, guint * width,
- guint * height)
-{
- guint width_tmp, height_tmp;
- GstXOverlayClass *klass;
-
- g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE ((overlay), GST_TYPE_X_OVERLAY));
-
- klass = GST_X_OVERLAY_GET_CLASS (overlay);
- if (klass->get_desired_size && GST_IS_X_OVERLAY (overlay)) {
- /* this ensures that elements don't need to check width and height for NULL
- but apps may use NULL */
- klass->get_desired_size (overlay, width ? width : &width_tmp,
- height ? height : &height_tmp);
- } else {
- if (width)
- *width = 0;
- if (height)
- *height = 0;
- }
-}
-
-/**
- * gst_x_overlay_got_desired_size:
- * @overlay: a #GstXOverlay which changed its desired size.
- * @width: The new desired width
- * @height: The new desired height
- *
- * This will fire a "desired_size_changed" signal.
- *
- * This function should be used by video overlay developpers.
- */
-void
-gst_x_overlay_got_desired_size (GstXOverlay * overlay, guint width,
- guint height)
-{
- g_return_if_fail (GST_IS_X_OVERLAY (overlay));
-
- g_signal_emit (G_OBJECT (overlay),
- gst_x_overlay_signals[DESIRED_SIZE], 0, width, height);
-}
-
-/**
- * gst_x_overlay_expose:
- * @overlay: a #GstXOverlay to expose.
- *
- * Tell an overlay that it has been exposed. This will redraw the current frame
- * in the drawable even if the pipeline is PAUSED.
- */
-void
-gst_x_overlay_expose (GstXOverlay * overlay)
-{
- GstXOverlayClass *klass = GST_X_OVERLAY_GET_CLASS (overlay);
-
- if (klass->expose) {
- klass->expose (overlay);
- }
-}
+++ /dev/null
-/* GStreamer X-based Overlay
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
- *
- * x-overlay.h: X-based overlay interface design
- *
- * 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_X_OVERLAY_H__
-#define __GST_X_OVERLAY_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_X_OVERLAY \
- (gst_x_overlay_get_type ())
-#define GST_X_OVERLAY(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_X_OVERLAY, \
- GstXOverlay))
-#define GST_X_OVERLAY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_X_OVERLAY, GstXOverlayClass))
-#define GST_IS_X_OVERLAY(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_X_OVERLAY))
-#define GST_IS_X_OVERLAY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_X_OVERLAY))
-#define GST_X_OVERLAY_GET_CLASS(inst) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_X_OVERLAY, GstXOverlayClass))
-
-typedef struct _GstXOverlay GstXOverlay;
-
-typedef struct _GstXOverlayClass {
- GTypeInterface klass;
-
- /* virtual functions */
- void (* set_xwindow_id) (GstXOverlay *overlay,
- gulong xwindow_id);
- /* optional virtual functions */
- void (* get_desired_size) (GstXOverlay *overlay,
- guint *width,
- guint *height);
- void (* expose) (GstXOverlay *overlay);
-
- /* signals */
- void (*have_xwindow_id) (GstXOverlay *overlay,
- gulong xwindow_id);
- void (* desired_size) (GstXOverlay *overlay,
- guint width,
- guint height);
-
- gpointer _gst_reserved[GST_PADDING];
-} GstXOverlayClass;
-
-GType gst_x_overlay_get_type (void);
-
-/* virtual class function wrappers */
-void gst_x_overlay_set_xwindow_id (GstXOverlay *overlay, gulong xwindow_id);
-void gst_x_overlay_get_desired_size (GstXOverlay *overlay, guint *width, guint *height);
-void gst_x_overlay_expose (GstXOverlay *overlay);
-
-/* public methods to fire signals */
-void gst_x_overlay_got_xwindow_id (GstXOverlay *overlay, gulong xwindow_id);
-void gst_x_overlay_got_desired_size (GstXOverlay *overlay, guint width, guint height);
-
-G_END_DECLS
-
-#endif /* __GST_X_OVERLAY_H__ */
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="xoverlay"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D6789E}"
- RootNamespace="xoverlay"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../../win32/Debug"
- IntermediateDirectory="../../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstxoverlay.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Debug;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/xoverlay.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstxoverlay.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../../win32/Release"
- IntermediateDirectory="../../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../gstreamer/win32;../../../../gstreamer;../../../../gstreamer/libs;../../../../glib;../../../../glib/glib;../../../../glib/gmodule;"../../../gst-libs";../../../../popt/include;../../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstxoverlay.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../../gstreamer/win32/Release;../../../../glib/glib;../../../../glib/gmodule;../../../../glib/gthread;../../../../glib/gobject;../../../../gettext/lib;../../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstxoverlay.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\xoverlay.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\xoverlay.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-plugin_LTLIBRARIES = libgstxwindowlistener.la
-
-libgstxwindowlistener_la_SOURCES = xwindowlistener.c
-
-libraryincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/xwindowlistener
-libraryinclude_HEADERS = xwindowlistener.h
-
-libgstxwindowlistener_la_LIBADD =$(GST_LIBS) $(GST_PLUGIN_LIBS) $(X_LIBS)
-libgstxwindowlistener_la_CFLAGS = $(GST_CFLAGS) $(X_CFLAGS)
-libgstxwindowlistener_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+++ /dev/null
-/* G-Streamer X11 Window event/motion listener
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * xwindowlistener.c: implementation of the object
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include "xwindowlistener.h"
-
-#define NUM_CLIPS 1024
-
-static void gst_x_window_listener_class_init (GstXWindowListenerClass * klass);
-static void gst_x_window_listener_init (GstXWindowListener * xwin);
-static void gst_x_window_listener_dispose (GObject * object);
-
-static void gst_xwin_start (GstXWindowListener * xwin);
-static void gst_xwin_stop (GstXWindowListener * xwin);
-
-static GObjectClass *parent_class = NULL;
-
-GType
-gst_x_window_listener_get_type (void)
-{
- static GType x_window_listener_type = 0;
-
- if (!x_window_listener_type) {
- static const GTypeInfo x_window_listener_info = {
- sizeof (GstXWindowListenerClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_x_window_listener_class_init,
- NULL,
- NULL,
- sizeof (GstXWindowListener),
- 0,
- (GInstanceInitFunc) gst_x_window_listener_init,
- NULL
- };
-
- x_window_listener_type =
- g_type_register_static (G_TYPE_OBJECT,
- "GstXWindowListener", &x_window_listener_info, 0);
- }
-
- return x_window_listener_type;
-}
-
-static void
-gst_x_window_listener_class_init (GstXWindowListenerClass * klass)
-{
- GObjectClass *object_klass = (GObjectClass *) klass;
-
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
-
- object_klass->dispose = gst_x_window_listener_dispose;
-}
-
-static void
-gst_x_window_listener_init (GstXWindowListener * xwin)
-{
- xwin->xwindow_id = 0;
- xwin->display_name = NULL;
-
- xwin->map_window_func = NULL;
- xwin->set_window_func = NULL;
-
- xwin->thread = NULL;
-}
-
-static void
-gst_x_window_listener_dispose (GObject * object)
-{
- GstXWindowListener *xwin = GST_X_WINDOW_LISTENER (object);
-
- /* stop overlay */
- gst_x_window_listener_set_xid (xwin, 0);
-
- if (xwin->display_name) {
- g_free (xwin->display_name);
- xwin->display_name = NULL;
- }
-
- if (parent_class->dispose) {
- parent_class->dispose (object);
- }
-}
-
-GstXWindowListener *
-gst_x_window_listener_new (gchar * display,
- MapWindowFunc map_window_func,
- SetWindowFunc set_window_func, gpointer private_data)
-{
- GstXWindowListener *xwin = g_object_new (GST_TYPE_X_WINDOW_LISTENER, NULL);
-
- xwin->display_name = g_strdup (display);
- xwin->map_window_func = map_window_func;
- xwin->set_window_func = set_window_func;
- xwin->private_data = private_data;
-
- return xwin;
-}
-
-void
-gst_x_window_listener_set_xid (GstXWindowListener * xwin, XID id)
-{
- g_return_if_fail (xwin != NULL);
-
- if (id == xwin->xwindow_id) {
- return;
- }
-
- if (xwin->xwindow_id && xwin->thread) {
- gst_xwin_stop (xwin);
- }
-
- xwin->xwindow_id = id;
-
- if (xwin->xwindow_id && xwin->display_name && xwin->display_name[0] == ':') {
- g_return_if_fail (xwin->map_window_func != NULL);
- g_return_if_fail (xwin->set_window_func != NULL);
-
- gst_xwin_start (xwin);
- }
-}
-
-/*
- * The following code works as follows:
- * - the "client" (the one who uses this object) sets an XID
- * - we add a child XWindow to this XID, and follow motion/events
- * - after each event, we determine the position, size and clips
- * - next, we call the per-instance virtual functions set by the client
- * - and we do all this in an endless cycle
- *
- * This code originates largely from xawtv. By permission of Gerd Knorr
- * <kraxel@bytesex.org>, it was relicensed to LGPL.
- */
-
-#define DEBUG(...) \
- GST_DEBUG ("XWL: " __VA_ARGS__)
-
-static void
-gst_xwin_set_overlay (GstXWindowListener * xwin, gboolean on)
-{
- xwin->map_window_func (xwin->private_data, on);
-
- /* remember me */
- xwin->ov_visible = on;
-}
-
-static gboolean
-gst_xwin_refresh (gpointer data)
-{
- GstXWindowListener *xwin = GST_X_WINDOW_LISTENER (data);
- Window win, tmp;
- XSetWindowAttributes xswa;
- XWindowAttributes attr;
-
- g_mutex_lock (xwin->main_lock);
-
- win = DefaultRootWindow (xwin->main_display);
- XGetWindowAttributes (xwin->main_display, win, &attr);
-
- xwin->ov_refresh_id = 0;
-
- if (!xwin->ov_move && xwin->ov_map &&
- xwin->ov_visibility == VisibilityUnobscured) {
- g_mutex_unlock (xwin->main_lock);
- return FALSE; /* skip */
- }
-
- if (xwin->ov_map && xwin->ov_visibility != VisibilityFullyObscured) {
- xwin->ov_refresh = TRUE;
- }
-
- xswa.override_redirect = True;
- xswa.backing_store = NotUseful;
- xswa.save_under = False;
- tmp = XCreateWindow (xwin->main_display, win, 0, 0,
- attr.width, attr.height, 0,
- CopyFromParent, InputOutput, CopyFromParent,
- (CWSaveUnder | CWBackingStore | CWOverrideRedirect), &xswa);
- XMapWindow (xwin->main_display, tmp);
- XUnmapWindow (xwin->main_display, tmp);
- XDestroyWindow (xwin->main_display, tmp);
- xwin->ov_move = FALSE;
-
- g_mutex_unlock (xwin->main_lock);
-
- /* once */
- return FALSE;
-}
-
-static int
-x11_error_dev_null (Display * display, XErrorEvent * event)
-{
- return 0;
-}
-
-#define ADD_CLIP(_x, _y, _w, _h) \
- do { \
- GstXWindowClip *clip = &xwin->clips[xwin->num_clips++]; \
- clip->x_offset = _x; \
- clip->y_offset = _y; \
- clip->width = _w; \
- clip->height = _h; \
- clip->data = NULL; \
- } while (0);
-
-static void
-gst_xwin_set_clips (GstXWindowListener * xwin)
-{
- Window root, rroot, parent, *kids, me;
- XWindowAttributes attr;
- guint numkids;
- gint i;
- gint x1, y1, w1, h1;
- XErrorHandler old_handler;
-
- old_handler = XSetErrorHandler (x11_error_dev_null);
-
- if (xwin->num_clips != 0)
- xwin->ov_conf = TRUE;
- xwin->num_clips = 0;
-
- root = DefaultRootWindow (xwin->display);
- XGetWindowAttributes (xwin->display, root, &attr);
-
- if (xwin->x < 0)
- ADD_CLIP (0, 0, -xwin->x, xwin->h);
- if (xwin->y < 0)
- ADD_CLIP (0, 0, xwin->w, -xwin->y);
- if ((xwin->x + xwin->w) > attr.width)
- ADD_CLIP (attr.width - xwin->x, 0, xwin->w, xwin->h);
- if ((xwin->y + xwin->h) > attr.height)
- ADD_CLIP (0, attr.height - xwin->y, xwin->w, xwin->h);
-
- me = xwin->child;
- while (1) {
- XQueryTree (xwin->display, me, &rroot, &parent, &kids, &numkids);
- if (numkids)
- XFree (kids);
- if (root == parent)
- break;
- me = parent;
- }
-
- XQueryTree (xwin->display, root, &rroot, &parent, &kids, &numkids);
- for (i = 0; i < numkids; i++)
- if (kids[i] == me)
- break;
-
- for (i++; i < numkids; i++) {
- XGetWindowAttributes (xwin->display, kids[i], &attr);
- if (attr.map_state != IsViewable)
- continue;
-
- x1 = attr.x - xwin->x;
- y1 = attr.y - xwin->y;
- w1 = attr.width + 2 * attr.border_width;
- h1 = attr.height + 2 * attr.border_width;
- if (((x1 + w1) < 0) || (x1 > xwin->w) || ((y1 + h1) < 0) || (y1 > xwin->h))
- continue;
-
- if (x1 < 0)
- x1 = 0;
- if (y1 < 0)
- y1 = 0;
- ADD_CLIP (x1, y1, w1, h1);
- }
- XFree (kids);
-
- if (xwin->num_clips != 0)
- xwin->ov_conf = TRUE;
-
- XSetErrorHandler (old_handler);
-}
-
-
-static gboolean
-gst_xwin_window (GstXWindowListener * xwin)
-{
- if (xwin->ov_map && xwin->ov_wmmap &&
- xwin->ov_visibility != VisibilityFullyObscured) {
- /* visible */
- if (xwin->ov_visibility == VisibilityPartiallyObscured) {
- /* set clips */
- gst_xwin_set_clips (xwin);
- }
-
- if (xwin->ov_conf) {
- xwin->set_window_func (xwin->private_data,
- xwin->x, xwin->y, xwin->w, xwin->h, xwin->clips, xwin->num_clips);
-
- if (!xwin->ov_visible)
- gst_xwin_set_overlay (xwin, TRUE);
-
- g_mutex_lock (xwin->main_lock);
-
- if (xwin->ov_refresh_id)
- g_source_remove (xwin->ov_refresh_id);
- xwin->ov_refresh_id =
- g_timeout_add (200, (GSourceFunc) gst_xwin_refresh, (gpointer) xwin);
-
- xwin->ov_conf = FALSE;
-
- g_mutex_unlock (xwin->main_lock);
- }
- } else {
- /* not visible */
- if (xwin->ov_conf && xwin->ov_visible) {
- gst_xwin_set_overlay (xwin, FALSE);
-
- g_mutex_lock (xwin->main_lock);
-
- if (xwin->ov_refresh_id)
- g_source_remove (xwin->ov_refresh_id);
- xwin->ov_refresh_id =
- g_timeout_add (200, (GSourceFunc) gst_xwin_refresh, (gpointer) xwin);
-
- xwin->ov_conf = FALSE;
-
- g_mutex_unlock (xwin->main_lock);
- }
- }
-
- xwin->ov_conf_id = 0;
-
- /* once is enough */
- return FALSE;
-}
-
-static void
-gst_xwin_configure (GstXWindowListener * xwin)
-{
-#if 0
- /* This part is disabled, because the idle task will be done
- * in the main thread instead of here. */
- if (!xwin->ov_conf_id)
- xwin->ov_conf_id =
- g_idle_add ((GSourceFunc) gst_rec_xoverlay_window, (gpointer) xwin);
-#endif
-
- gst_xwin_window ((gpointer) xwin);
-}
-
-static void
-gst_xwin_resize (GstXWindowListener * xwin)
-{
- Drawable drawable, parent, *kids, root;
- guint numkids;
- XWindowAttributes attr;
-
- XGetWindowAttributes (xwin->display, xwin->xwindow_id, &attr);
- XMoveResizeWindow (xwin->display, xwin->child, 0, 0, attr.width, attr.height);
-
- /* set the video window - the first clip is our own window */
- xwin->x = 0;
- xwin->y = 0;
- xwin->w = attr.width;
- xwin->h = attr.height;
-
- drawable = xwin->child;
- while (1) {
- XQueryTree (xwin->display, drawable, &root, &parent, &kids, &numkids);
- if (numkids)
- XFree (kids);
- drawable = parent;
- XGetWindowAttributes (xwin->display, drawable, &attr);
- xwin->x += attr.x;
- xwin->y += attr.y;
- if (parent == attr.root)
- break;
- }
-
- xwin->ov_conf = TRUE;
- xwin->ov_move = TRUE;
-
- gst_xwin_configure (xwin);
-}
-
-static void
-gst_xwin_init_window (GstXWindowListener * xwin)
-{
- XWindowAttributes attr;
-
- /* start values */
- xwin->ov_conf = TRUE;
- xwin->ov_map = xwin->ov_wmmap = TRUE;
- xwin->ov_move = TRUE;
- xwin->ov_refresh = FALSE;
- g_mutex_lock (xwin->main_lock);
- xwin->ov_conf_id = xwin->ov_refresh_id = 0;
- g_mutex_unlock (xwin->main_lock);
- xwin->ov_visibility = VisibilityFullyObscured;
-
- /* start the memory that we'll use */
- xwin->clips = g_malloc (sizeof (GstXWindowClip) * NUM_CLIPS);
- xwin->num_clips = 0;
-
- /* open connection to X server */
- xwin->display = XOpenDisplay (xwin->display_name);
-
- /* window */
- XGetWindowAttributes (xwin->display, xwin->xwindow_id, &attr);
- xwin->child = XCreateSimpleWindow (xwin->display,
- xwin->xwindow_id, 0, 0, attr.width, attr.height, 0, 0, 0);
-
- /* listen to certain X events */
- XSelectInput (xwin->display, xwin->xwindow_id, StructureNotifyMask);
- XSelectInput (xwin->display, xwin->child,
- VisibilityChangeMask | StructureNotifyMask);
- XSelectInput (xwin->display, DefaultRootWindow (xwin->display),
- VisibilityChangeMask | StructureNotifyMask | SubstructureNotifyMask);
-
- /* show */
- XMapWindow (xwin->display, xwin->child);
-
- gst_xwin_resize (xwin);
-}
-
-static void
-gst_xwin_exit_window (GstXWindowListener * xwin)
-{
- /* disable overlay */
- gst_xwin_set_overlay (xwin, FALSE);
-
- /* delete idle funcs */
- if (xwin->ov_conf_id != 0)
- g_source_remove (xwin->ov_conf_id);
-
- g_mutex_lock (xwin->main_lock);
- if (xwin->ov_refresh_id != 0)
- g_source_remove (xwin->ov_refresh_id);
- g_mutex_unlock (xwin->main_lock);
-
- /* get away from X and free mem */
- XDestroyWindow (xwin->display, xwin->child);
- XCloseDisplay (xwin->display);
- g_free (xwin->clips);
-}
-
-static gpointer
-gst_xwin_thread (gpointer data)
-{
- GstXWindowListener *xwin = GST_X_WINDOW_LISTENER (data);
- XEvent event;
-
- /* Hi, I'm GStreamer. What's your name? */
- gst_xwin_init_window (xwin);
-
- while (xwin->cycle) {
- XNextEvent (xwin->display, &event);
-
- if (!xwin->cycle)
- break;
-
- if ((event.type == ConfigureNotify &&
- event.xconfigure.window == xwin->xwindow_id) ||
- (event.type == MapNotify &&
- event.xmap.window == xwin->xwindow_id) ||
- (event.type == UnmapNotify &&
- event.xunmap.window == xwin->xwindow_id)) {
- /* the 'parent' window, i.e. the widget provided by client */
- switch (event.type) {
- case MapNotify:
- xwin->ov_map = TRUE;
- xwin->ov_conf = TRUE;
- gst_xwin_configure (xwin);
- break;
-
- case UnmapNotify:
- xwin->ov_map = FALSE;
- xwin->ov_conf = TRUE;
- gst_xwin_configure (xwin);
- break;
-
- case ConfigureNotify:
- gst_xwin_resize (xwin);
- break;
-
- default:
- /* nothing */
- break;
- }
- } else if (event.xany.window == xwin->child) {
- /* our own private window */
- switch (event.type) {
- case Expose:
- if (!event.xexpose.count) {
- if (xwin->ov_refresh) {
- xwin->ov_refresh = FALSE;
- } else {
- xwin->ov_conf = TRUE;
- gst_xwin_configure (xwin);
- }
- }
- break;
-
- case VisibilityNotify:
- xwin->ov_visibility = event.xvisibility.state;
- if (xwin->ov_refresh) {
- if (event.xvisibility.state != VisibilityFullyObscured)
- xwin->ov_refresh = FALSE;
- } else {
- xwin->ov_conf = TRUE;
- gst_xwin_configure (xwin);
- }
- break;
-
- default:
- /* nothing */
- break;
- }
- } else {
- /* root window */
- switch (event.type) {
- case MapNotify:
- case UnmapNotify:
- /* are we still visible? */
- if (!xwin->ov_refresh) {
- XWindowAttributes attr;
- gboolean on;
-
- XGetWindowAttributes (xwin->display, xwin->xwindow_id, &attr);
- on = (attr.map_state == IsViewable);
- xwin->ov_wmmap = on;
- xwin->ov_conf = TRUE;
- gst_xwin_configure (xwin);
- }
- break;
-
- case ConfigureNotify:
- if (!xwin->ov_refresh) {
- gst_xwin_resize (xwin);
- }
- break;
-
- default:
- /* nothing */
- break;
- }
- }
- }
-
- /* Nice to have met you, see you later */
- gst_xwin_exit_window (xwin);
-
- g_thread_exit (NULL);
-
- return NULL;
-}
-
-static void
-gst_xwin_start (GstXWindowListener * xwin)
-{
- DEBUG ("Starting XWindow listener");
-
- xwin->cycle = TRUE;
- /* we use this main_display for two things: first of all,
- * the window needs to be 'refreshed' to remove artifacts
- * after every move. Secondly, we use this to 'unhang' the
- * event handler after we've stopped it */
- xwin->main_lock = g_mutex_new ();
- xwin->main_display = XOpenDisplay (xwin->display_name);
- xwin->thread = g_thread_create (gst_xwin_thread, (gpointer) xwin, TRUE, NULL);
-
- DEBUG ("Started X-overlay");
-}
-
-static void
-gst_xwin_stop (GstXWindowListener * xwin)
-{
- DEBUG ("Stopping XWindow listener");
-
- xwin->cycle = FALSE;
- /* now, the event loop will hang. To prevent this from hanging
- * our app, app, we re-do our refresh hack. Oh man, this is
- * ugly. But it works. :). */
- g_mutex_lock (xwin->main_lock);
- if (xwin->ov_refresh_id)
- g_source_remove (xwin->ov_refresh_id);
- g_mutex_unlock (xwin->main_lock);
-
- gst_xwin_refresh ((gpointer) xwin);
- g_thread_join (xwin->thread);
- XCloseDisplay (xwin->main_display);
- g_mutex_free (xwin->main_lock);
-
- DEBUG ("Stopped X-overlay");
-}
-
-/*
- * End of code inspired by XawTV.
- */
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "xwindowlistener",
- "X11-based XWindow event/motion listener",
- plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
+++ /dev/null
-/* G-Streamer X11 Window event/motion listener
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * xwindowlistener.h: object definition
- *
- * 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 __X_WINDOW_LISTENER_H__
-#define __X_WINDOW_LISTENER_H__
-
-#include <gst/gst.h>
-#include <X11/Xlib.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_X_WINDOW_LISTENER \
- (gst_x_window_listener_get_type())
-#define GST_X_WINDOW_LISTENER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_X_WINDOW_LISTENER, \
- GstXWindowListener))
-#define GST_X_WINDOW_LISTENER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_X_WINDOW_LISTENER, \
- GstXWindowListenerClass))
-#define GST_IS_X_WINDOW_LISTENER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_X_WINDOW_LISTENER))
-#define GST_IS_X_WINDOW_LISTENER_CLASS(obj) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_X_WINDOW_LISTENER))
-
-typedef struct _GstXWindowListener GstXWindowListener;
-typedef struct _GstXWindowListenerClass GstXWindowListenerClass;
-typedef struct _GstXWindowClip GstXWindowClip;
-typedef void (* MapWindowFunc) (gpointer your_data,
- gboolean visible);
-typedef void (* SetWindowFunc) (gpointer your_data,
- gint x, gint y,
- gint w, gint h,
- GstXWindowClip *clips,
- gint num_clips);
-
-struct _GstXWindowClip {
- gint32 x_offset,
- y_offset,
- width,
- height;
- gpointer data;
-};
-
-struct _GstXWindowListener {
- GObject parent;
-
- /* "per-instance virtual functions" */
- MapWindowFunc map_window_func;
- SetWindowFunc set_window_func;
-
- /* private data with which we call the virtual functions */
- gpointer private_data;
-
- /* general information of what we're doing */
- gchar *display_name;
- XID xwindow_id;
-
- /* one extra... */
- Display *main_display;
- GMutex *main_lock;
-
- /* oh my g*d, this is going to be so horribly ugly */
- GThread *thread;
- gboolean cycle;
-
- /* the overlay window + own thread */
- Display *display;
- Drawable child;
- gboolean ov_conf,
- ov_map,
- ov_visible,
- ov_refresh,
- ov_move,
- ov_wmmap;
- gint ov_visibility;
- guint ov_conf_id,
- ov_refresh_id;
- gint x, y, w, h;
- GstXWindowClip *clips;
- gint num_clips;
-};
-
-struct _GstXWindowListenerClass {
- GObjectClass parent;
-};
-
-GType gst_x_window_listener_get_type (void);
-GstXWindowListener *
- gst_x_window_listener_new (gchar *display,
- MapWindowFunc map_window_func,
- SetWindowFunc set_window_func,
- gpointer private_data);
-void gst_x_window_listener_set_xid (GstXWindowListener *xwin,
- XID id);
-
-G_END_DECLS
-
-#endif /* __X_WINDOW_LISTENER_H__ */