diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2007-04-18 09:48:25 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2007-04-18 09:48:25 +0000 |
commit | 1723d916dd9dae9b3df8a32d155e1f3529b11f16 (patch) | |
tree | 9b0e023080ef86486e0f4c320664ef593b578bcb | |
parent | b5cfe36ab7d498c9a514aabab1b7810a3f81cd6d (diff) |
gst/wavenc/gstwavenc.*: everything else results in a invalid block align and invalid files.
Original commit message from CVS:
* gst/wavenc/gstwavenc.c: (gst_wavenc_create_header_buf),
(gst_wavenc_sink_setcaps), (gst_wavenc_change_state):
* gst/wavenc/gstwavenc.h:
Wav apparently only supports width==GST_ROUND_UP(depth), everything
else results in a invalid block align and invalid files.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gst/wavenc/gstwavenc.c | 31 | ||||
-rw-r--r-- | gst/wavenc/gstwavenc.h | 1 |
3 files changed, 31 insertions, 9 deletions
@@ -1,3 +1,11 @@ +2007-04-18 Sebastian Dröge <slomo@circular-chaos.org> + + * gst/wavenc/gstwavenc.c: (gst_wavenc_create_header_buf), + (gst_wavenc_sink_setcaps), (gst_wavenc_change_state): + * gst/wavenc/gstwavenc.h: + Wav apparently only supports width==GST_ROUND_UP(depth), everything + else results in a invalid block align and invalid files. + 2007-04-17 Tim-Philipp Müller <tim at centricular dot net> Patch by: Snaik <snaik32 gmail com> diff --git a/gst/wavenc/gstwavenc.c b/gst/wavenc/gstwavenc.c index d72664ab..46be5ac1 100644 --- a/gst/wavenc/gstwavenc.c +++ b/gst/wavenc/gstwavenc.c @@ -78,8 +78,24 @@ GST_ELEMENT_DETAILS ("WAV audio muxer", "rate = (int) [ 1, MAX ], " \ "channels = (int) [ 1, 2 ], " \ "endianness = (int) LITTLE_ENDIAN, " \ - "width = (int) { 16, 24, 32 }, " \ - "depth = (int) [ 1, 32 ], " \ + "width = (int) 32, " \ + "depth = (int) [ 25, 32 ], " \ + "signed = (boolean) true" \ + "; " \ + "audio/x-raw-int, " \ + "rate = (int) [ 1, MAX ], " \ + "channels = (int) [ 1, 2 ], " \ + "endianness = (int) LITTLE_ENDIAN, " \ + "width = (int) 24, " \ + "depth = (int) [ 17, 24 ], " \ + "signed = (boolean) true" \ + "; " \ + "audio/x-raw-int, " \ + "rate = (int) [ 1, MAX ], " \ + "channels = (int) [ 1, 2 ], " \ + "endianness = (int) LITTLE_ENDIAN, " \ + "width = (int) 16, " \ + "depth = (int) [ 9, 16 ], " \ "signed = (boolean) true" \ "; " \ "audio/x-raw-int, " \ @@ -179,9 +195,10 @@ gst_wavenc_create_header_buf (GstWavEnc * wavenc, guint audio_data_size) wave.format.len = 16; wave.common.wFormatTag = WAVE_FORMAT_PCM; - wave.common.wBlockAlign = (wavenc->width / 8) * wave.common.wChannels; - wave.common.dwAvgBytesPerSec = wave.common.wBlockAlign * - wave.common.dwSamplesPerSec; + wave.common.wBlockAlign = + (GST_ROUND_UP_8 (wavenc->depth) / 8) * wave.common.wChannels; + wave.common.dwAvgBytesPerSec = + wave.common.wBlockAlign * wave.common.dwSamplesPerSec; memcpy (wave.data.id, "data", 4); wave.data.len = audio_data_size; @@ -257,12 +274,11 @@ gst_wavenc_sink_setcaps (GstPad * pad, GstCaps * caps) } wavenc->channels = chans; - wavenc->width = width; wavenc->depth = depth; wavenc->rate = rate; GST_LOG_OBJECT (wavenc, "accepted caps: chans=%u width=%u depth=%u rate=%u", - wavenc->channels, wavenc->width, wavenc->depth, wavenc->rate); + wavenc->channels, width, wavenc->depth, wavenc->rate); gst_object_unref (wavenc); return TRUE; @@ -636,7 +652,6 @@ gst_wavenc_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: wavenc->channels = 0; - wavenc->width = 0; wavenc->depth = 0; wavenc->rate = 0; wavenc->length = 0; diff --git a/gst/wavenc/gstwavenc.h b/gst/wavenc/gstwavenc.h index 8a34ab57..3970dfd2 100644 --- a/gst/wavenc/gstwavenc.h +++ b/gst/wavenc/gstwavenc.h @@ -48,7 +48,6 @@ struct _GstWavEnc { /* useful audio data */ guint depth; - guint width; guint rate; guint channels; guint32 length; |