ext/wavpack/: Some small clean-ups: use enums instead of hard-coded numbers, const-ify element details, re-factor som...

Original commit message from CVS:
Patch by: Sebastian Dröge  <slomo@circular-chaos.org>
* ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_reset),
(gst_wavpack_dec_init), (gst_wavpack_dec_change_state):
* ext/wavpack/gstwavpackenc.c: (gst_wavpack_enc_base_init),
(gst_wavpack_enc_class_init), (gst_wavpack_enc_reset),
(gst_wavpack_enc_init), (gst_wavpack_enc_set_wp_config),
(gst_wavpack_enc_change_state):
* ext/wavpack/gstwavpackparse.c:
Some small clean-ups: use enums instead of hard-coded numbers,
const-ify element details, re-factor some code into _reset()
functions (#352605).
This commit is contained in:
Sebastian Dröge 2006-11-15 12:35:46 +00:00 committed by Tim-Philipp Müller
parent 71b09a611a
commit e7794502ba
4 changed files with 118 additions and 70 deletions

View file

@ -1,3 +1,18 @@
2006-11-15 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Sebastian Dröge <slomo@circular-chaos.org>
* ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_reset),
(gst_wavpack_dec_init), (gst_wavpack_dec_change_state):
* ext/wavpack/gstwavpackenc.c: (gst_wavpack_enc_base_init),
(gst_wavpack_enc_class_init), (gst_wavpack_enc_reset),
(gst_wavpack_enc_init), (gst_wavpack_enc_set_wp_config),
(gst_wavpack_enc_change_state):
* ext/wavpack/gstwavpackparse.c:
Some small clean-ups: use enums instead of hard-coded numbers,
const-ify element details, re-factor some code into _reset()
functions (#352605).
2006-11-14 Tim-Philipp Müller <tim at centricular dot net> 2006-11-14 Tim-Philipp Müller <tim at centricular dot net>
* sys/dvb/gstdvbsrc.c: (gst_dvbsrc_create): * sys/dvb/gstdvbsrc.c: (gst_dvbsrc_create):

View file

@ -25,7 +25,7 @@
* SECTION:element-wavpackdec * SECTION:element-wavpackdec
* *
* <refsect2> * <refsect2>
* wavpackdec decodes framed (for example by the wavpackparse element) * WavpackDec decodes framed (for example by the WavpackParse element)
* Wavpack streams and decodes them to raw audio. * Wavpack streams and decodes them to raw audio.
* <ulink url="http://www.wavpack.com/">Wavpack</ulink> is an open-source * <ulink url="http://www.wavpack.com/">Wavpack</ulink> is an open-source
* audio codec that features both lossless and lossy encoding. * audio codec that features both lossless and lossy encoding.
@ -115,6 +115,22 @@ gst_wavpack_dec_class_init (GstWavpackDecClass * klass)
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_wavpack_dec_finalize); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_wavpack_dec_finalize);
} }
static void
gst_wavpack_dec_reset (GstWavpackDec * dec)
{
dec->wv_id.buffer = NULL;
dec->wv_id.position = dec->wv_id.length = 0;
dec->error_count = 0;
dec->channels = 0;
dec->sample_rate = 0;
dec->width = 0;
dec->depth = 0;
gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED);
}
static void static void
gst_wavpack_dec_init (GstWavpackDec * dec, GstWavpackDecClass * gklass) gst_wavpack_dec_init (GstWavpackDec * dec, GstWavpackDecClass * gklass)
{ {
@ -132,17 +148,7 @@ gst_wavpack_dec_init (GstWavpackDec * dec, GstWavpackDecClass * gklass)
dec->context = NULL; dec->context = NULL;
dec->stream_reader = gst_wavpack_stream_reader_new (); dec->stream_reader = gst_wavpack_stream_reader_new ();
dec->wv_id.buffer = NULL; gst_wavpack_dec_reset (dec);
dec->wv_id.position = dec->wv_id.length = 0;
dec->error_count = 0;
dec->channels = 0;
dec->sample_rate = 0;
dec->width = 0;
dec->depth = 0;
gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED);
} }
static void static void
@ -453,7 +459,6 @@ gst_wavpack_dec_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_NULL_TO_READY: case GST_STATE_CHANGE_NULL_TO_READY:
break; break;
case GST_STATE_CHANGE_READY_TO_PAUSED: case GST_STATE_CHANGE_READY_TO_PAUSED:
gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED);
break; break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING: case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break; break;
@ -471,13 +476,8 @@ gst_wavpack_dec_change_state (GstElement * element, GstStateChange transition)
WavpackCloseFile (dec->context); WavpackCloseFile (dec->context);
dec->context = NULL; dec->context = NULL;
} }
dec->wv_id.buffer = NULL;
dec->wv_id.position = 0; gst_wavpack_dec_reset (dec);
dec->wv_id.length = 0;
dec->channels = 0;
dec->sample_rate = 0;
dec->width = 0;
dec->depth = 0;
break; break;
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL:
break; break;

View file

@ -23,7 +23,7 @@
* SECTION:element-wavpackenc * SECTION:element-wavpackenc
* *
* <refsect2> * <refsect2>
* Wavpackenc encodes raw audio into a framed Wavpack stream. * WavpackEnc encodes raw audio into a framed Wavpack stream.
* <ulink url="http://www.wavpack.com/">Wavpack</ulink> is an open-source * <ulink url="http://www.wavpack.com/">Wavpack</ulink> is an open-source
* audio codec that features both lossless and lossy encoding. * audio codec that features both lossless and lossy encoding.
* <title>Example launch line</title> * <title>Example launch line</title>
@ -148,7 +148,15 @@ static GstStaticPadTemplate wvcsrc_factory = GST_STATIC_PAD_TEMPLATE ("wvcsrc",
GST_STATIC_CAPS ("audio/x-wavpack-correction, " "framed = (boolean) TRUE") GST_STATIC_CAPS ("audio/x-wavpack-correction, " "framed = (boolean) TRUE")
); );
#define DEFAULT_MODE 2 enum
{
GST_WAVPACK_ENC_MODE_VERY_FAST = 0,
GST_WAVPACK_ENC_MODE_FAST,
GST_WAVPACK_ENC_MODE_DEFAULT,
GST_WAVPACK_ENC_MODE_HIGH,
GST_WAVPACK_ENC_MODE_VERY_HIGH
};
#define GST_TYPE_WAVPACK_ENC_MODE (gst_wavpack_enc_mode_get_type ()) #define GST_TYPE_WAVPACK_ENC_MODE (gst_wavpack_enc_mode_get_type ())
static GType static GType
gst_wavpack_enc_mode_get_type (void) gst_wavpack_enc_mode_get_type (void)
@ -176,7 +184,13 @@ gst_wavpack_enc_mode_get_type (void)
return qtype; return qtype;
} }
#define DEFAULT_CORRECTION_MODE 0 enum
{
GST_WAVPACK_CORRECTION_MODE_OFF = 0,
GST_WAVPACK_CORRECTION_MODE_ON,
GST_WAVPACK_CORRECTION_MODE_OPTIMIZED
};
#define GST_TYPE_WAVPACK_ENC_CORRECTION_MODE (gst_wavpack_enc_correction_mode_get_type ()) #define GST_TYPE_WAVPACK_ENC_CORRECTION_MODE (gst_wavpack_enc_correction_mode_get_type ())
static GType static GType
gst_wavpack_enc_correction_mode_get_type (void) gst_wavpack_enc_correction_mode_get_type (void)
@ -196,7 +210,13 @@ gst_wavpack_enc_correction_mode_get_type (void)
return qtype; return qtype;
} }
#define DEFAULT_JS_MODE 0 enum
{
GST_WAVPACK_JS_MODE_AUTO = 0,
GST_WAVPACK_JS_MODE_LEFT_RIGHT,
GST_WAVPACK_JS_MODE_MID_SIDE
};
#define GST_TYPE_WAVPACK_ENC_JOINT_STEREO_MODE (gst_wavpack_enc_joint_stereo_mode_get_type ()) #define GST_TYPE_WAVPACK_ENC_JOINT_STEREO_MODE (gst_wavpack_enc_joint_stereo_mode_get_type ())
static GType static GType
gst_wavpack_enc_joint_stereo_mode_get_type (void) gst_wavpack_enc_joint_stereo_mode_get_type (void)
@ -221,7 +241,7 @@ GST_BOILERPLATE (GstWavpackEnc, gst_wavpack_enc, GstElement, GST_TYPE_ELEMENT);
static void static void
gst_wavpack_enc_base_init (gpointer klass) gst_wavpack_enc_base_init (gpointer klass)
{ {
static GstElementDetails element_details = { static const GstElementDetails element_details = {
"Wavpack audio encoder", "Wavpack audio encoder",
"Codec/Encoder/Audio", "Codec/Encoder/Audio",
"Encodes audio with the Wavpack lossless/lossy audio codec", "Encodes audio with the Wavpack lossless/lossy audio codec",
@ -265,7 +285,8 @@ gst_wavpack_enc_class_init (GstWavpackEncClass * klass)
g_object_class_install_property (gobject_class, ARG_MODE, g_object_class_install_property (gobject_class, ARG_MODE,
g_param_spec_enum ("mode", "Encoding mode", g_param_spec_enum ("mode", "Encoding mode",
"Speed versus compression tradeoff.", "Speed versus compression tradeoff.",
GST_TYPE_WAVPACK_ENC_MODE, DEFAULT_MODE, G_PARAM_READWRITE)); GST_TYPE_WAVPACK_ENC_MODE, GST_WAVPACK_ENC_MODE_DEFAULT,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, ARG_BITRATE, g_object_class_install_property (gobject_class, ARG_BITRATE,
g_param_spec_double ("bitrate", "Bitrate", g_param_spec_double ("bitrate", "Bitrate",
"Try to encode with this average bitrate (bits/sec). " "Try to encode with this average bitrate (bits/sec). "
@ -279,7 +300,7 @@ gst_wavpack_enc_class_init (GstWavpackEncClass * klass)
g_object_class_install_property (gobject_class, ARG_CORRECTION_MODE, g_object_class_install_property (gobject_class, ARG_CORRECTION_MODE,
g_param_spec_enum ("correction-mode", "Correction file mode", g_param_spec_enum ("correction-mode", "Correction file mode",
"Use this mode for correction file creation. Only works in lossy mode!", "Use this mode for correction file creation. Only works in lossy mode!",
GST_TYPE_WAVPACK_ENC_CORRECTION_MODE, DEFAULT_CORRECTION_MODE, GST_TYPE_WAVPACK_ENC_CORRECTION_MODE, GST_WAVPACK_CORRECTION_MODE_OFF,
G_PARAM_READWRITE)); G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, ARG_MD5, g_object_class_install_property (gobject_class, ARG_MD5,
g_param_spec_boolean ("md5", "MD5", g_param_spec_boolean ("md5", "MD5",
@ -291,7 +312,40 @@ gst_wavpack_enc_class_init (GstWavpackEncClass * klass)
g_object_class_install_property (gobject_class, ARG_JOINT_STEREO_MODE, g_object_class_install_property (gobject_class, ARG_JOINT_STEREO_MODE,
g_param_spec_enum ("joint-stereo-mode", "Joint-Stereo mode", g_param_spec_enum ("joint-stereo-mode", "Joint-Stereo mode",
"Use this joint-stereo mode.", GST_TYPE_WAVPACK_ENC_JOINT_STEREO_MODE, "Use this joint-stereo mode.", GST_TYPE_WAVPACK_ENC_JOINT_STEREO_MODE,
DEFAULT_JS_MODE, G_PARAM_READWRITE)); GST_WAVPACK_JS_MODE_AUTO, G_PARAM_READWRITE));
}
static void
gst_wavpack_enc_reset (GstWavpackEnc * enc)
{
/* close and free everything stream related if we already did something */
if (enc->wp_context) {
WavpackCloseFile (enc->wp_context);
enc->wp_context = NULL;
}
if (enc->wp_config) {
g_free (enc->wp_config);
enc->wp_config = NULL;
}
if (enc->first_block) {
g_free (enc->first_block);
enc->first_block = NULL;
}
enc->first_block_size = 0;
if (enc->md5_context) {
g_free (enc->md5_context);
enc->md5_context = NULL;
}
/* reset the last returns to GST_FLOW_OK. This is only set to something else
* while WavpackPackSamples() or more specific gst_wavpack_enc_push_block()
* so not valid anymore */
enc->srcpad_last_return = enc->wvcsrcpad_last_return = GST_FLOW_OK;
/* reset stream information */
enc->samplerate = 0;
enc->width = 0;
enc->channels = 0;
} }
static void static void
@ -314,11 +368,8 @@ gst_wavpack_enc_init (GstWavpackEnc * enc, GstWavpackEncClass * gclass)
enc->wp_config = NULL; enc->wp_config = NULL;
enc->wp_context = NULL; enc->wp_context = NULL;
enc->first_block = NULL; enc->first_block = NULL;
enc->first_block_size = 0;
enc->md5_context = NULL; enc->md5_context = NULL;
enc->samplerate = 0; gst_wavpack_enc_reset (enc);
enc->width = 0;
enc->channels = 0;
enc->wv_id = g_new0 (GstWavpackEncWriteID, 1); enc->wv_id = g_new0 (GstWavpackEncWriteID, 1);
enc->wv_id->correction = FALSE; enc->wv_id->correction = FALSE;
@ -328,12 +379,12 @@ gst_wavpack_enc_init (GstWavpackEnc * enc, GstWavpackEncClass * gclass)
enc->wvc_id->wavpack_enc = enc; enc->wvc_id->wavpack_enc = enc;
/* set default values of params */ /* set default values of params */
enc->mode = DEFAULT_MODE; enc->mode = GST_WAVPACK_ENC_MODE_DEFAULT;
enc->bitrate = 0.0; enc->bitrate = 0.0;
enc->correction_mode = DEFAULT_CORRECTION_MODE; enc->correction_mode = GST_WAVPACK_CORRECTION_MODE_OFF;
enc->md5 = FALSE; enc->md5 = FALSE;
enc->extra_processing = FALSE; enc->extra_processing = FALSE;
enc->joint_stereo_mode = DEFAULT_JS_MODE; enc->joint_stereo_mode = GST_WAVPACK_JS_MODE_AUTO;
} }
static void static void
@ -411,21 +462,21 @@ gst_wavpack_enc_set_wp_config (GstWavpackEnc * enc)
/* Encoding mode */ /* Encoding mode */
switch (enc->mode) { switch (enc->mode) {
#if 0 #if 0
case 0: case GST_WAVPACK_ENC_MODE_VERY_FAST:
enc->wp_config->flags |= CONFIG_VERY_FAST_FLAG; enc->wp_config->flags |= CONFIG_VERY_FAST_FLAG;
enc->wp_config->flags |= CONFIG_FAST_FLAG; enc->wp_config->flags |= CONFIG_FAST_FLAG;
break; break;
#endif #endif
case 1: case GST_WAVPACK_ENC_MODE_FAST:
enc->wp_config->flags |= CONFIG_FAST_FLAG; enc->wp_config->flags |= CONFIG_FAST_FLAG;
break; break;
case 2: /* default */ case GST_WAVPACK_ENC_MODE_DEFAULT:
break; break;
case 3: case GST_WAVPACK_ENC_MODE_HIGH:
enc->wp_config->flags |= CONFIG_HIGH_FLAG; enc->wp_config->flags |= CONFIG_HIGH_FLAG;
break; break;
#ifndef WAVPACK_OLD_API #ifndef WAVPACK_OLD_API
case 4: case GST_WAVPACK_ENC_MODE_VERY_HIGH:
enc->wp_config->flags |= CONFIG_HIGH_FLAG; enc->wp_config->flags |= CONFIG_HIGH_FLAG;
enc->wp_config->flags |= CONFIG_VERY_HIGH_FLAG; enc->wp_config->flags |= CONFIG_VERY_HIGH_FLAG;
break; break;
@ -445,7 +496,7 @@ gst_wavpack_enc_set_wp_config (GstWavpackEnc * enc)
/* Correction Mode, only in lossy mode */ /* Correction Mode, only in lossy mode */
if (enc->wp_config->flags & CONFIG_HYBRID_FLAG) { if (enc->wp_config->flags & CONFIG_HYBRID_FLAG) {
if (enc->correction_mode > 0) { if (enc->correction_mode > GST_WAVPACK_CORRECTION_MODE_OFF) {
enc->wvcsrcpad = enc->wvcsrcpad =
gst_pad_new_from_static_template (&wvcsrc_factory, "wvcsrc"); gst_pad_new_from_static_template (&wvcsrc_factory, "wvcsrc");
@ -463,14 +514,14 @@ gst_wavpack_enc_set_wp_config (GstWavpackEnc * enc)
gst_pad_set_active (enc->wvcsrcpad, TRUE); gst_pad_set_active (enc->wvcsrcpad, TRUE);
gst_element_add_pad (GST_ELEMENT (enc), enc->wvcsrcpad); gst_element_add_pad (GST_ELEMENT (enc), enc->wvcsrcpad);
enc->wp_config->flags |= CONFIG_CREATE_WVC; enc->wp_config->flags |= CONFIG_CREATE_WVC;
if (enc->correction_mode == 2) { if (enc->correction_mode == GST_WAVPACK_CORRECTION_MODE_OPTIMIZED) {
enc->wp_config->flags |= CONFIG_OPTIMIZE_WVC; enc->wp_config->flags |= CONFIG_OPTIMIZE_WVC;
} }
} }
gst_caps_unref (caps); gst_caps_unref (caps);
} }
} else { } else {
if (enc->correction_mode > 0) { if (enc->correction_mode > GST_WAVPACK_CORRECTION_MODE_OFF) {
enc->correction_mode = 0; enc->correction_mode = 0;
GST_WARNING_OBJECT (enc, "setting correction mode only has " GST_WARNING_OBJECT (enc, "setting correction mode only has "
"any effect if a bitrate is provided."); "any effect if a bitrate is provided.");
@ -492,13 +543,13 @@ gst_wavpack_enc_set_wp_config (GstWavpackEnc * enc)
/* Joint stereo mode */ /* Joint stereo mode */
switch (enc->joint_stereo_mode) { switch (enc->joint_stereo_mode) {
case 0: /* default */ case GST_WAVPACK_JS_MODE_AUTO:
break; break;
case 1: case GST_WAVPACK_JS_MODE_LEFT_RIGHT:
enc->wp_config->flags |= CONFIG_JOINT_OVERRIDE; enc->wp_config->flags |= CONFIG_JOINT_OVERRIDE;
enc->wp_config->flags &= ~CONFIG_JOINT_STEREO; enc->wp_config->flags &= ~CONFIG_JOINT_STEREO;
break; break;
case 2: case GST_WAVPACK_JS_MODE_MID_SIDE:
enc->wp_config->flags |= (CONFIG_JOINT_OVERRIDE | CONFIG_JOINT_STEREO); enc->wp_config->flags |= (CONFIG_JOINT_OVERRIDE | CONFIG_JOINT_STEREO);
break; break;
} }
@ -804,7 +855,9 @@ gst_wavpack_enc_change_state (GstElement * element, GstStateChange transition)
* as they're only set to something else in WavpackPackSamples() or more * as they're only set to something else in WavpackPackSamples() or more
* specific gst_wavpack_enc_push_block() and nothing happened there yet */ * specific gst_wavpack_enc_push_block() and nothing happened there yet */
enc->srcpad_last_return = enc->wvcsrcpad_last_return = GST_FLOW_OK; enc->srcpad_last_return = enc->wvcsrcpad_last_return = GST_FLOW_OK;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED: case GST_STATE_CHANGE_READY_TO_PAUSED:
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING: case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
default: default:
break; break;
@ -816,29 +869,7 @@ gst_wavpack_enc_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_PLAYING_TO_PAUSED: case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
break; break;
case GST_STATE_CHANGE_PAUSED_TO_READY: case GST_STATE_CHANGE_PAUSED_TO_READY:
/* close and free everything stream related */ gst_wavpack_enc_reset (enc);
if (enc->wp_context) {
WavpackCloseFile (enc->wp_context);
enc->wp_context = NULL;
}
if (enc->wp_config) {
g_free (enc->wp_config);
enc->wp_config = NULL;
}
if (enc->first_block) {
g_free (enc->first_block);
enc->first_block = NULL;
enc->first_block_size = 0;
}
if (enc->md5_context) {
g_free (enc->md5_context);
enc->md5_context = NULL;
}
/* reset the last returns to GST_FLOW_OK. This is only set to something else
* while WavpackPackSamples() or more specific gst_wavpack_enc_push_block()
* so not valid anymore */
enc->srcpad_last_return = enc->wvcsrcpad_last_return = GST_FLOW_OK;
break; break;
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL:
break; break;

View file

@ -25,9 +25,11 @@
* SECTION:element-wavpackparse * SECTION:element-wavpackparse
* *
* <refsect2> * <refsect2>
* Wavpackparse takes raw, unframed Wavpack streams and splits them into * WavpackParse takes raw, unframed Wavpack streams and splits them into
* single Wavpack chunks with information like bit depth and the position * single Wavpack chunks with information like bit depth and the position
* in the stream. * in the stream.
* <ulink url="http://www.wavpack.com/">Wavpack</ulink> is an open-source
* audio codec that features both lossless and lossy encoding.
* <title>Example launch line</title> * <title>Example launch line</title>
* <para> * <para>
* <programlisting> * <programlisting>