From 703a0d00d8b3548cc8dcdea1b645133d035a9734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 16 Jan 2007 08:29:11 +0000 Subject: [PATCH] gst/audiofx/audiopanorama.c: Use a function array for process methods, add more docs and define the startindex of enums. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message from CVS: Patch by: Sebastian Dröge * gst/audiofx/audiopanorama.c: (gst_audio_panorama_class_init), (gst_audio_panorama_set_process_function): Use a function array for process methods, add more docs and define the startindex of enums. --- ChangeLog | 9 ++++ gst/audiofx/audiopanorama.c | 90 +++++++++++++++++-------------------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/ChangeLog b/ChangeLog index 78732db234..ae37a808c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-01-16 Stefan Kost + + Patch by: Sebastian Dröge + + * gst/audiofx/audiopanorama.c: (gst_audio_panorama_class_init), + (gst_audio_panorama_set_process_function): + Use a function array for process methods, add more docs and define the + startindex of enums. + 2007-01-14 Tim-Philipp Müller Patch by: Mark Nauwelaerts diff --git a/gst/audiofx/audiopanorama.c b/gst/audiofx/audiopanorama.c index c0d7695206..9f8ac0056b 100644 --- a/gst/audiofx/audiopanorama.c +++ b/gst/audiofx/audiopanorama.c @@ -73,8 +73,9 @@ enum enum { - METHOD_PSYCHOACOUSTIC, - METHOD_SIMPLE + METHOD_PSYCHOACOUSTIC = 0, + METHOD_SIMPLE, + NUM_METHODS }; #define GST_TYPE_AUDIO_PANORAMA_METHOD (gst_audio_panorama_method_get_type ()) @@ -163,6 +164,27 @@ static void gst_audio_panorama_transform_s2s_float_simple (GstAudioPanorama * static GstFlowReturn gst_audio_panorama_transform (GstBaseTransform * base, GstBuffer * inbuf, GstBuffer * outbuf); + +/* Table with processing functions: [channels][format][method] */ +static GstAudioPanoramaProcessFunc panorama_process_functions[2][2][2] = { + { + {(GstAudioPanoramaProcessFunc) gst_audio_panorama_transform_m2s_int, + (GstAudioPanoramaProcessFunc) + gst_audio_panorama_transform_m2s_int_simple}, + {(GstAudioPanoramaProcessFunc) gst_audio_panorama_transform_m2s_float, + (GstAudioPanoramaProcessFunc) + gst_audio_panorama_transform_m2s_float_simple} + }, + { + {(GstAudioPanoramaProcessFunc) gst_audio_panorama_transform_s2s_int, + (GstAudioPanoramaProcessFunc) + gst_audio_panorama_transform_s2s_int_simple}, + {(GstAudioPanoramaProcessFunc) gst_audio_panorama_transform_s2s_float, + (GstAudioPanoramaProcessFunc) + gst_audio_panorama_transform_s2s_float_simple} + } +}; + /* GObject vmethod implementations */ static void @@ -194,7 +216,8 @@ gst_audio_panorama_class_init (GstAudioPanoramaClass * klass) * GstAudioPanorama:method * * Panning method: psychoacoustic mode keeps the same perceived loudness, - * while simple mode just controls the volume of one channel. + * while simple mode just controls the volume of one channel. It's merely + * a matter of taste which method should be chosen. * * Since: 0.10.6 **/ @@ -230,57 +253,24 @@ gst_audio_panorama_init (GstAudioPanorama * filter, static gboolean gst_audio_panorama_set_process_function (GstAudioPanorama * filter) { - gboolean ret; + gint channel_index, format_index, method_index; /* set processing function */ - switch (filter->channels) { - case 1: - if (!filter->format_float) { - if (filter->method == METHOD_SIMPLE) { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_m2s_int_simple; - } else { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_m2s_int; - } - } else { - if (filter->method == METHOD_SIMPLE) { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_m2s_float_simple; - } else { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_m2s_float; - } - } - ret = TRUE; - break; - case 2: - if (!filter->format_float) { - if (filter->method == METHOD_SIMPLE) { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_s2s_int_simple; - } else { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_s2s_int; - } - } else { - if (filter->method == METHOD_SIMPLE) { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_s2s_float_simple; - } else { - filter->process = (GstAudioPanoramaProcessFunc) - gst_audio_panorama_transform_s2s_float; - } - } - ret = TRUE; - break; - default: - ret = FALSE; - filter->process = NULL; - break; + channel_index = filter->channels - 1; + if (channel_index > 1 || channel_index < 0) { + filter->process = NULL; + return FALSE; } - return ret; + format_index = (filter->format_float) ? 1 : 0; + + method_index = filter->method; + if (method_index >= NUM_METHODS || method_index < 0) + method_index = METHOD_PSYCHOACOUSTIC; + + filter->process = + panorama_process_functions[channel_index][format_index][method_index]; + return TRUE; } static void