mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-17 22:06:41 +00:00
gst/wavenc/gstwavenc.c: Correctly handle width!=depth input.
Original commit message from CVS: * gst/wavenc/gstwavenc.c: (gst_wavenc_create_header_buf), (gst_wavenc_sink_setcaps): Correctly handle width!=depth input. * gst/wavparse/gstwavparse.c: Already export in the caps that width==8 uses unsigned samples and everything else uses signed samples.
This commit is contained in:
parent
112216c22f
commit
d26cbc8c66
3 changed files with 26 additions and 12 deletions
|
@ -1,3 +1,12 @@
|
|||
2007-03-29 Sebastian Dröge <slomo@circular-chaos.org>
|
||||
|
||||
* gst/wavenc/gstwavenc.c: (gst_wavenc_create_header_buf),
|
||||
(gst_wavenc_sink_setcaps):
|
||||
Correctly handle width!=depth input.
|
||||
* gst/wavparse/gstwavparse.c:
|
||||
Already export in the caps that width==8 uses unsigned samples and
|
||||
everything else uses signed samples.
|
||||
|
||||
2007-03-29 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
Patch by: Laurent Glayal <spglegle at yahoo dot fr>
|
||||
|
|
|
@ -78,14 +78,15 @@ GST_ELEMENT_DETAILS ("WAV audio muxer",
|
|||
"rate = (int) [ 1, MAX ], " \
|
||||
"channels = (int) [ 1, 2 ], " \
|
||||
"endianness = (int) LITTLE_ENDIAN, " \
|
||||
"width = (int) 16, " \
|
||||
"depth = (int) 16, " \
|
||||
"width = (int) { 16, 24, 32 }, " \
|
||||
"depth = (int) [ 1, 32 ], " \
|
||||
"signed = (boolean) true" \
|
||||
"; " \
|
||||
"audio/x-raw-int, " \
|
||||
"rate = (int) [ 1, MAX ], " \
|
||||
"channels = (int) [ 1, 2 ], " \
|
||||
"width = (int) 8, " \
|
||||
"depth = (int) [ 1, 8 ], " \
|
||||
"signed = (boolean) false"
|
||||
|
||||
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
|
@ -154,7 +155,6 @@ gst_wavenc_init (GstWavEnc * wavenc, GstWavEncClass * klass)
|
|||
|
||||
#define WAV_HEADER_LEN 44
|
||||
|
||||
/* FIXME: we are probably not handling depth != width correctly here */
|
||||
static GstBuffer *
|
||||
gst_wavenc_create_header_buf (GstWavEnc * wavenc, guint audio_data_size)
|
||||
{
|
||||
|
@ -179,11 +179,9 @@ gst_wavenc_create_header_buf (GstWavEnc * wavenc, guint audio_data_size)
|
|||
wave.format.len = 16;
|
||||
|
||||
wave.common.wFormatTag = WAVE_FORMAT_PCM;
|
||||
wave.common.dwAvgBytesPerSec =
|
||||
wave.common.wChannels * wave.common.dwSamplesPerSec *
|
||||
(wave.common.wBitsPerSample >> 3);
|
||||
wave.common.wBlockAlign =
|
||||
wave.common.wChannels * (wave.common.wBitsPerSample >> 3);
|
||||
wave.common.wBlockAlign = (wavenc->width / 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;
|
||||
|
@ -253,14 +251,14 @@ gst_wavenc_sink_setcaps (GstPad * pad, GstCaps * caps)
|
|||
if (!gst_structure_get_int (structure, "channels", &chans) ||
|
||||
!gst_structure_get_int (structure, "rate", &rate) ||
|
||||
!gst_structure_get_int (structure, "width", &width) ||
|
||||
(width != 8 && !gst_structure_get_int (structure, "depth", &depth))) {
|
||||
!gst_structure_get_int (structure, "depth", &depth)) {
|
||||
GST_WARNING_OBJECT (wavenc, "caps incomplete");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
wavenc->channels = chans;
|
||||
wavenc->width = width;
|
||||
wavenc->depth = (width == 8) ? 8 : depth;
|
||||
wavenc->depth = depth;
|
||||
wavenc->rate = rate;
|
||||
|
||||
GST_LOG_OBJECT (wavenc, "accepted caps: chans=%u width=%u depth=%u rate=%u",
|
||||
|
|
|
@ -110,11 +110,18 @@ static GstStaticPadTemplate src_template_factory =
|
|||
GST_PAD_SOMETIMES,
|
||||
GST_STATIC_CAPS ("audio/x-raw-int, "
|
||||
"endianness = (int) little_endian, "
|
||||
"signed = (boolean) { true, false }, "
|
||||
"width = (int) { 8, 16, 24, 32 }, "
|
||||
"signed = (boolean) true, "
|
||||
"width = (int) { 16, 24, 32 }, "
|
||||
"depth = (int) [ 1, 32 ], "
|
||||
"rate = (int) [ 8000, 96000 ], "
|
||||
"channels = (int) [ 1, 8 ]; "
|
||||
"audio/x-raw-int, "
|
||||
"endianness = (int) little_endian, "
|
||||
"signed = (boolean) false, "
|
||||
"width = (int) 8, "
|
||||
"depth = (int) [ 1, 8 ], "
|
||||
"rate = (int) [ 8000, 96000 ], "
|
||||
"channels = (int) [ 1, 8 ]; "
|
||||
"audio/ms-gsm; "
|
||||
"audio/mpeg, "
|
||||
"mpegversion = (int) 1, "
|
||||
|
|
Loading…
Reference in a new issue