Original commit message from CVS:
Cleanups
This commit is contained in:
Wim Taymans 2002-12-27 16:35:09 +00:00
parent 810d5e5430
commit e40f901226
2 changed files with 86 additions and 93 deletions

View file

@ -21,9 +21,9 @@
#include <string.h>
#include <gstwavenc.h>
static void gst_wavenc_class_init (GstWavEncClass *klass);
static void gst_wavenc_init (GstWavEnc *wavenc);
static void gst_wavenc_chain (GstPad *pad, GstBuffer *buf);
static void gst_wavenc_class_init (GstWavEncClass *klass);
static void gst_wavenc_init (GstWavEnc *wavenc);
static void gst_wavenc_chain (GstPad *pad, GstBuffer *buf);
#define WAVE_FORMAT_PCM 0x0001
@ -36,30 +36,30 @@ static void gst_wavenc_chain (GstPad *pad, GstBuffer *buf);
*((buf)+1) = (unsigned char)((x>>8)&0xff);
struct riff_struct {
unsigned char id[4]; /* RIFF */
unsigned int len;
unsigned char wav_id[4]; /* WAVE */
guint8 id[4]; /* RIFF */
guint32 len;
guint8 wav_id[4]; /* WAVE */
};
struct chunk_struct {
unsigned char id[4];
unsigned int len;
guint8 id[4];
guint32 len;
};
struct common_struct {
unsigned short wFormatTag;
unsigned short wChannels;
unsigned int dwSamplesPerSec;
unsigned int dwAvgBytesPerSec;
unsigned short wBlockAlign;
unsigned short wBitsPerSample; /* Only for PCM */
guint16 wFormatTag;
guint16 wChannels;
guint32 dwSamplesPerSec;
guint32 dwAvgBytesPerSec;
guint16 wBlockAlign;
guint16 wBitsPerSample; /* Only for PCM */
};
struct wave_header {
struct riff_struct riff;
struct chunk_struct format;
struct common_struct common;
struct chunk_struct data;
struct riff_struct riff;
struct chunk_struct format;
struct common_struct common;
struct chunk_struct data;
};
static GstElementDetails gst_wavenc_details = {
@ -74,50 +74,53 @@ static GstElementDetails gst_wavenc_details = {
static GstPadTemplate *srctemplate, *sinktemplate;
static GstPadTemplate *
sink_factory (void)
{
return gst_pad_template_new ("wavenc_sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
gst_caps_new ("wavenc_raw",
"audio/raw",
gst_props_new ("format", GST_PROPS_STRING ("int"),
"law", GST_PROPS_INT (0),
"endianness", GST_PROPS_INT (G_BYTE_ORDER),
"signed", GST_PROPS_BOOLEAN (TRUE),
"width", GST_PROPS_INT (16),
"depth", GST_PROPS_INT (16),
"rate", GST_PROPS_INT_RANGE (8000, 48000),
"channels", GST_PROPS_INT_RANGE (1, 2),
NULL)),
NULL);
}
GST_PAD_TEMPLATE_FACTORY (sink_factory,
"sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_CAPS_NEW (
"wavenc_raw",
"audio/raw",
"format", GST_PROPS_STRING ("int"),
"law", GST_PROPS_INT (0),
"endianness", GST_PROPS_INT (G_BYTE_ORDER),
"signed", GST_PROPS_BOOLEAN (TRUE),
"width", GST_PROPS_INT (16),
"depth", GST_PROPS_INT (16),
"rate", GST_PROPS_INT_RANGE (8000, 48000),
"channels", GST_PROPS_INT_RANGE (1, 2)
)
)
static GstPadTemplate *
src_factory (void)
{
return gst_pad_template_new ("wavenc_src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
gst_caps_new ("wavenc_wav",
"audio/x-wav",
NULL),
NULL);
}
GST_PAD_TEMPLATE_FACTORY (src_factory,
"src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_CAPS_NEW (
"wavenc_wav",
"audio/x-wav",
NULL
)
)
static GstElementClass *parent_class = NULL;
GType
static GType
gst_wavenc_get_type (void)
{
static GType type = 0;
if (type == 0) {
static const GTypeInfo info = {
sizeof (GstWavEncClass), NULL, NULL,
(GClassInitFunc) gst_wavenc_class_init, NULL, NULL,
sizeof (GstWavEnc), 0, (GInstanceInitFunc) gst_wavenc_init
sizeof (GstWavEncClass),
NULL,
NULL,
(GClassInitFunc) gst_wavenc_class_init,
NULL,
NULL,
sizeof (GstWavEnc),
0,
(GInstanceInitFunc) gst_wavenc_init
};
type = g_type_register_static (GST_TYPE_ELEMENT, "GstWavEnc", &info, 0);
@ -132,13 +135,13 @@ gst_wavenc_change_state (GstElement *element)
GstWavEnc *wavenc = GST_WAVENC (element);
switch (GST_STATE_TRANSITION (element)) {
case GST_STATE_NULL_TO_READY:
case GST_STATE_PAUSED_TO_READY:
wavenc->setup = FALSE;
break;
default:
break;
case GST_STATE_PAUSED_TO_READY:
case GST_STATE_READY_TO_PAUSED:
wavenc->setup = FALSE;
wavenc->flush_header = TRUE;
break;
default:
break;
}
if (parent_class->change_state) {
@ -163,7 +166,7 @@ static gboolean
gst_wavenc_setup (GstWavEnc *wavenc)
{
struct wave_header wave;
int size = 0x7fffffff; /* Use a bogus size initially */
gint size = 0x7fffffff; /* Use a bogus size initially */
wave.common.wChannels = wavenc->channels;
wave.common.wBitsPerSample = wavenc->bits;
@ -256,41 +259,39 @@ gst_wavenc_chain (GstPad *pad,
GstEvent *event = GST_EVENT (buf);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
/* Should do something... */
gst_event_unref (event);
case GST_EVENT_EOS:
/* Should do something... */
gst_event_unref (event);
gst_pad_push (wavenc->srcpad, GST_BUFFER (gst_event_new (GST_EVENT_EOS)));
gst_element_set_eos (GST_ELEMENT (wavenc));
break;
default:
gst_pad_event_default (pad, event);
return;
if (GST_PAD_IS_USABLE (wavenc->srcpad))
gst_pad_push (wavenc->srcpad, GST_BUFFER (gst_event_new (GST_EVENT_EOS)));
gst_element_set_eos (GST_ELEMENT (wavenc));
break;
default:
gst_pad_event_default (pad, event);
return;
}
} else {
}
else {
if (!wavenc->setup) {
gst_buffer_unref (buf);
gst_element_error (GST_ELEMENT (wavenc), "encoder not initialised (input is not audio?)");
return;
}
if (wavenc->flush_header) {
GstBuffer *outbuf;
if (GST_PAD_IS_USABLE (wavenc->srcpad)) {
if (wavenc->flush_header) {
GstBuffer *outbuf;
outbuf = gst_buffer_new_and_alloc (WAV_HEADER_LEN);
memcpy (GST_BUFFER_DATA (outbuf), wavenc->header, WAV_HEADER_LEN);
outbuf = gst_buffer_new_and_alloc (WAV_HEADER_LEN);
memcpy (GST_BUFFER_DATA (outbuf), wavenc->header, WAV_HEADER_LEN);
if (GST_PAD_IS_USABLE (wavenc->srcpad)) {
gst_pad_push (wavenc->srcpad, outbuf);
} else {
gst_buffer_unref (outbuf);
wavenc->flush_header = FALSE;
}
wavenc->flush_header = FALSE;
}
gst_pad_push (wavenc->srcpad, buf);
gst_pad_push (wavenc->srcpad, buf);
}
}
}

View file

@ -25,17 +25,14 @@
#include <config.h>
#include <gst/gst.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
G_BEGIN_DECLS
#define GST_TYPE_WAVENC \
(gst_wavenc_get_type())
#define GST_WAVENC(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_WAVENC,GstWavEnc))
#define GST_WAVENC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_WAVENC,GstWavEnc))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_WAVENC,GstWavEncClass))
#define GST_IS_WAVENC(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WAVENC))
#define GST_IS_WAVENC_CLASS(obj) \
@ -66,11 +63,6 @@ struct _GstWavEncClass {
GstElementClass parent_class;
};
GType gst_wavenc_get_type(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
G_END_DECLS
#endif /* __GST_ENC_H__ */