summaryrefslogtreecommitdiff
path: root/ext/sndfile/gstsf.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sndfile/gstsf.c')
-rw-r--r--ext/sndfile/gstsf.c153
1 files changed, 78 insertions, 75 deletions
diff --git a/ext/sndfile/gstsf.c b/ext/sndfile/gstsf.c
index e71b18884..a8f1c61bc 100644
--- a/ext/sndfile/gstsf.c
+++ b/ext/sndfile/gstsf.c
@@ -27,79 +27,86 @@
#include "gstsf.h"
+/* sf formats */
-GType
-gst_sf_major_types_get_type (void)
+GstCaps *
+gst_sf_create_audio_template_caps (void)
{
- static GType sf_major_types_type = 0;
- static GEnumValue *sf_major_types = NULL;
-
- if (!sf_major_types_type) {
- SF_FORMAT_INFO format_info;
- int k, count;
-
- sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int));
-
- sf_major_types = g_new0 (GEnumValue, count + 1);
-
- for (k = 0; k < count; k++) {
- format_info.format = k;
- sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info,
- sizeof (format_info));
- sf_major_types[k].value = format_info.format;
- sf_major_types[k].value_name = g_strdup (format_info.name);
- sf_major_types[k].value_nick = g_strdup (format_info.extension);
-
- /* Irritatingly enough, there exist major_types with the same extension. Let's
- just hope that sndfile gives us the list in alphabetical order, as it
- currently does. */
- if (k > 0
- && strcmp (sf_major_types[k].value_nick,
- sf_major_types[k - 1].value_nick) == 0) {
- g_free ((gchar *) sf_major_types[k].value_nick);
- sf_major_types[k].value_nick =
- g_strconcat (sf_major_types[k - 1].value_nick, "-",
- sf_major_types[k].value_name, NULL);
- g_strcanon ((gchar *) sf_major_types[k].value_nick,
- G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-", '-');
- }
+ GstCaps *caps = gst_caps_new_empty ();
+ SF_FORMAT_INFO format_info;
+ const gchar *fmt;
+ gint k, count;
+
+ sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (gint));
+
+ for (k = 0; k < count; k++) {
+ format_info.format = k;
+ sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info));
+
+ switch (format_info.format) {
+ case SF_FORMAT_AIFF: /* Apple/SGI AIFF format */
+ fmt = "audio/x-aiff";
+ break;
+ case SF_FORMAT_AU: /* Sun/NeXT AU format */
+ fmt = "audio/x-au";
+ break;
+ case SF_FORMAT_FLAC: /* FLAC lossless file format */
+ fmt = "audio/x-flac";
+ break;
+ case SF_FORMAT_IRCAM: /* Berkeley/IRCAM/CARL */
+ fmt = "audio/x-ircam";
+ break;
+ case SF_FORMAT_NIST: /* Sphere NIST format. */
+ fmt = "audio/x-nist";
+ break;
+ case SF_FORMAT_OGG: /* Xiph OGG container */
+ fmt = "audio/ogg";
+ break;
+ case SF_FORMAT_PAF: /* Ensoniq PARIS file format. */
+ fmt = "audio/x-paris";
+ break;
+ case SF_FORMAT_RAW: /* RAW PCM data. */
+ fmt = "audio/x-raw";
+ break;
+ case SF_FORMAT_SDS: /* Midi Sample Dump Standard */
+ fmt = "audio/x-sds";
+ break;
+ case SF_FORMAT_SVX: /* Amiga IFF / SVX8 / SV16 format. */
+ fmt = "audio/x-svx";
+ break;
+ case SF_FORMAT_VOC: /* VOC files. */
+ fmt = "audio/x-voc";
+ break;
+ case SF_FORMAT_WAV: /* Microsoft WAV format */
+ case SF_FORMAT_WAVEX: /* MS WAVE with WAVEFORMATEX */
+ fmt = "audio/x-wav";
+ break;
+ case SF_FORMAT_W64: /* Sonic Foundry's 64 bit RIFF/WAV */
+ fmt = "audio/x-w64";
+ break;
+ case SF_FORMAT_XI: /* Fasttracker 2 Extended Instrument */
+ fmt = "audio/x-xi";
+ break;
+ case SF_FORMAT_RF64: /* RF64 WAV file */
+ case SF_FORMAT_MAT4: /* Matlab (tm) V4.2 / GNU Octave 2.0 */
+ case SF_FORMAT_MAT5: /* Matlab (tm) V5.0 / GNU Octave 2.1 */
+ case SF_FORMAT_PVF: /* Portable Voice Format */
+ case SF_FORMAT_HTK: /* HMM Tool Kit format */
+ case SF_FORMAT_AVR: /* Audio Visual Research */
+ case SF_FORMAT_SD2: /* Sound Designer 2 */
+ case SF_FORMAT_CAF: /* Core Audio File format */
+ case SF_FORMAT_WVE: /* Psion WVE format */
+ case SF_FORMAT_MPC2K: /* Akai MPC 2000 sampler */
+ default:
+ fmt = NULL;
+ GST_WARNING ("format 0x%x: '%s' is not mapped", format_info.format,
+ format_info.name);
}
-
- sf_major_types_type =
- g_enum_register_static ("GstSndfileMajorTypes", sf_major_types);
- }
- return sf_major_types_type;
-}
-
-GType
-gst_sf_minor_types_get_type (void)
-{
- static GType sf_minor_types_type = 0;
- static GEnumValue *sf_minor_types = NULL;
-
- if (!sf_minor_types_type) {
- SF_FORMAT_INFO format_info;
- int k, count;
-
- sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int));
-
- sf_minor_types = g_new0 (GEnumValue, count + 1);
-
- for (k = 0; k < count; k++) {
- format_info.format = k;
- sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info,
- sizeof (format_info));
- sf_minor_types[k].value = format_info.format;
- sf_minor_types[k].value_name = g_strdup (format_info.name);
- sf_minor_types[k].value_nick = g_ascii_strdown (format_info.name, -1);
- g_strcanon ((gchar *) sf_minor_types[k].value_nick,
- G_CSET_a_2_z G_CSET_DIGITS "-", '-');
+ if (fmt != NULL) {
+ gst_caps_append_structure (caps, gst_structure_new_empty (fmt));
}
-
- sf_minor_types_type =
- g_enum_register_static ("GstSndfileMinorTypes", sf_minor_types);
}
- return sf_minor_types_type;
+ return gst_caps_simplify (caps);
}
static gboolean
@@ -112,12 +119,8 @@ plugin_init (GstPlugin * plugin)
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
#endif /* ENABLE_NLS */
- if (!gst_element_register (plugin, "sfsink", GST_RANK_NONE,
- gst_sf_sink_get_type ()))
- return FALSE;
-
- if (!gst_element_register (plugin, "sfsrc", GST_RANK_NONE,
- gst_sf_src_get_type ()))
+ if (!gst_element_register (plugin, "sfdec", GST_RANK_MARGINAL,
+ gst_sf_dec_get_type ()))
return FALSE;
return TRUE;
@@ -126,5 +129,5 @@ plugin_init (GstPlugin * plugin)
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR,
sndfile,
- "use libsndfile to read and write audio from and to files",
+ "use libsndfile to read and write various audio formats",
plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)