diff options
author | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-14 22:34:33 +0000 |
---|---|---|
committer | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-14 22:34:33 +0000 |
commit | 5d25c00e4b613b9cdf2c04fa3a68dffa03834a68 (patch) | |
tree | 74a5b1eaf3a324b520e64e87404fd0b3018a7829 /gst/wavenc | |
parent | 1e83b097f7b732ae49e294a5a398bdc3e88854a8 (diff) |
gst-indent
Original commit message from CVS:
gst-indent
Diffstat (limited to 'gst/wavenc')
-rw-r--r-- | gst/wavenc/gstwavenc.c | 737 | ||||
-rw-r--r-- | gst/wavenc/gstwavenc.h | 13 | ||||
-rw-r--r-- | gst/wavenc/riff.h | 171 |
3 files changed, 467 insertions, 454 deletions
diff --git a/gst/wavenc/gstwavenc.c b/gst/wavenc/gstwavenc.c index 8a2d4ba0..757330f0 100644 --- a/gst/wavenc/gstwavenc.c +++ b/gst/wavenc/gstwavenc.c @@ -27,10 +27,10 @@ #include <gstwavenc.h> #include <riff.h> -static void gst_wavenc_base_init (gpointer g_class); -static void gst_wavenc_class_init (GstWavEncClass *klass); -static void gst_wavenc_init (GstWavEnc *wavenc); -static void gst_wavenc_chain (GstPad *pad, GstData *_data); +static void gst_wavenc_base_init (gpointer g_class); +static void gst_wavenc_class_init (GstWavEncClass * klass); +static void gst_wavenc_init (GstWavEnc * wavenc); +static void gst_wavenc_chain (GstPad * pad, GstData * _data); #define WAVE_FORMAT_PCM 0x0001 @@ -42,65 +42,63 @@ static void gst_wavenc_chain (GstPad *pad, GstData *_data); #define WRITE_U16(buf, x) *(buf) = (unsigned char) (x&0xff);\ *((buf)+1) = (unsigned char)((x>>8)&0xff); -struct riff_struct { - guint8 id[4]; /* RIFF */ - guint32 len; - guint8 wav_id[4]; /* WAVE */ +struct riff_struct +{ + guint8 id[4]; /* RIFF */ + guint32 len; + guint8 wav_id[4]; /* WAVE */ }; -struct chunk_struct { - guint8 id[4]; - guint32 len; +struct chunk_struct +{ + guint8 id[4]; + guint32 len; }; -struct common_struct { - guint16 wFormatTag; - guint16 wChannels; - guint32 dwSamplesPerSec; - guint32 dwAvgBytesPerSec; - guint16 wBlockAlign; - guint16 wBitsPerSample; /* Only for PCM */ +struct common_struct +{ + 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 wave_header +{ + struct riff_struct riff; + struct chunk_struct format; + struct common_struct common; + struct chunk_struct data; }; -static GstElementDetails gst_wavenc_details = GST_ELEMENT_DETAILS ( - "WAV encoder", - "Codec/Encoder/Audio", - "Encode raw audio into WAV", - "Iain Holmes <iain@prettypeople.org>" -); - -static GstStaticPadTemplate sink_factory = -GST_STATIC_PAD_TEMPLATE ( - "sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "rate = (int) [ 1, MAX ], " - "channels = (int) [ 1, MAX ], " - "endianness = (int) LITTLE_ENDIAN, " - "width = (int) { 8, 16 }, " - "depth = (int) { 8, 16 }, " - "signed = (boolean) true" - ) -); - -static GstStaticPadTemplate src_factory = -GST_STATIC_PAD_TEMPLATE ( - "src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-wav") -); - -enum { - PROP_0, +static GstElementDetails gst_wavenc_details = +GST_ELEMENT_DETAILS ("WAV encoder", + "Codec/Encoder/Audio", + "Encode raw audio into WAV", + "Iain Holmes <iain@prettypeople.org>"); + +static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw-int, " + "rate = (int) [ 1, MAX ], " + "channels = (int) [ 1, MAX ], " + "endianness = (int) LITTLE_ENDIAN, " + "width = (int) { 8, 16 }, " + "depth = (int) { 8, 16 }, " "signed = (boolean) true") + ); + +static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-wav") + ); + +enum +{ + PROP_0, }; static GstElementClass *parent_class = NULL; @@ -112,14 +110,14 @@ gst_wavenc_get_type (void) if (type == 0) { static const GTypeInfo info = { - sizeof (GstWavEncClass), - gst_wavenc_base_init, + sizeof (GstWavEncClass), + gst_wavenc_base_init, + NULL, + (GClassInitFunc) gst_wavenc_class_init, NULL, - (GClassInitFunc) gst_wavenc_class_init, - NULL, NULL, - sizeof (GstWavEnc), - 0, + sizeof (GstWavEnc), + 0, (GInstanceInitFunc) gst_wavenc_init }; @@ -130,10 +128,10 @@ gst_wavenc_get_type (void) } static GstElementStateReturn -gst_wavenc_change_state (GstElement *element) +gst_wavenc_change_state (GstElement * element) { GstWavEnc *wavenc = GST_WAVENC (element); - + switch (GST_STATE_TRANSITION (element)) { case GST_STATE_PAUSED_TO_READY: wavenc->setup = FALSE; @@ -151,19 +149,17 @@ gst_wavenc_change_state (GstElement *element) } static void -set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec) { - GstWavEnc *enc; - - enc = GST_WAVENC (object); - - switch (prop_id) { - default: - break; - } + GstWavEnc *enc; + + enc = GST_WAVENC (object); + + switch (prop_id) { + default: + break; + } } static void @@ -172,32 +168,32 @@ gst_wavenc_base_init (gpointer g_class) GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); gst_element_class_set_details (element_class, &gst_wavenc_details); - + gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); } static void -gst_wavenc_class_init (GstWavEncClass *klass) +gst_wavenc_class_init (GstWavEncClass * klass) { GstElementClass *element_class; GObjectClass *object_class; - + element_class = (GstElementClass *) klass; object_class = (GObjectClass *) klass; object_class->set_property = set_property; - + element_class->change_state = gst_wavenc_change_state; parent_class = g_type_class_ref (GST_TYPE_ELEMENT); } static gboolean -gst_wavenc_setup (GstWavEnc *wavenc) +gst_wavenc_setup (GstWavEnc * wavenc) { struct wave_header wave; - gint 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; @@ -214,8 +210,11 @@ gst_wavenc_setup (GstWavEnc *wavenc) 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.dwAvgBytesPerSec = + wave.common.wChannels * wave.common.dwSamplesPerSec * + (wave.common.wBitsPerSample >> 3); + wave.common.wBlockAlign = + wave.common.wChannels * (wave.common.wBitsPerSample >> 3); strncpy (wave.data.id, "data", 4); wave.data.len = size - 44; @@ -239,7 +238,7 @@ gst_wavenc_setup (GstWavEnc *wavenc) } static GstPadLinkReturn -gst_wavenc_sinkconnect (GstPad *pad, const GstCaps *caps) +gst_wavenc_sinkconnect (GstPad * pad, const GstCaps * caps) { GstWavEnc *wavenc; GstStructure *structure; @@ -248,9 +247,9 @@ gst_wavenc_sinkconnect (GstPad *pad, const GstCaps *caps) structure = gst_caps_get_structure (caps, 0); - gst_structure_get_int (structure, "channels", &wavenc->channels); - gst_structure_get_int (structure, "rate", &wavenc->rate); - gst_structure_get_int (structure, "depth", &wavenc->bits); + gst_structure_get_int (structure, "channels", &wavenc->channels); + gst_structure_get_int (structure, "rate", &wavenc->rate); + gst_structure_get_int (structure, "depth", &wavenc->bits); gst_wavenc_setup (wavenc); @@ -262,324 +261,328 @@ gst_wavenc_sinkconnect (GstPad *pad, const GstCaps *caps) } static void -gst_wavenc_stop_file (GstWavEnc *wavenc) +gst_wavenc_stop_file (GstWavEnc * wavenc) { GstEvent *event; GstBuffer *outbuf; - - event = gst_event_new_seek (GST_FORMAT_BYTES | - GST_SEEK_METHOD_SET, 0); + + event = gst_event_new_seek (GST_FORMAT_BYTES | GST_SEEK_METHOD_SET, 0); gst_pad_send_event (GST_PAD_PEER (wavenc->srcpad), event); - + outbuf = gst_buffer_new_and_alloc (WAV_HEADER_LEN); WRITE_U32 (wavenc->header + 4, wavenc->length); memcpy (GST_BUFFER_DATA (outbuf), wavenc->header, WAV_HEADER_LEN); - + gst_pad_push (wavenc->srcpad, GST_DATA (outbuf)); } static void -gst_wavenc_init (GstWavEnc *wavenc) +gst_wavenc_init (GstWavEnc * wavenc) { GstElementClass *klass = GST_ELEMENT_GET_CLASS (wavenc); - wavenc->sinkpad = gst_pad_new_from_template ( - gst_element_class_get_pad_template (klass, "sink"), "sink"); + wavenc->sinkpad = + gst_pad_new_from_template (gst_element_class_get_pad_template (klass, + "sink"), "sink"); gst_element_add_pad (GST_ELEMENT (wavenc), wavenc->sinkpad); gst_pad_set_chain_function (wavenc->sinkpad, gst_wavenc_chain); gst_pad_set_link_function (wavenc->sinkpad, gst_wavenc_sinkconnect); - - wavenc->srcpad = gst_pad_new_from_template ( - gst_element_class_get_pad_template (klass, "src"), "src"); + + wavenc->srcpad = + gst_pad_new_from_template (gst_element_class_get_pad_template (klass, + "src"), "src"); gst_element_add_pad (GST_ELEMENT (wavenc), wavenc->srcpad); wavenc->setup = FALSE; wavenc->flush_header = TRUE; - + GST_FLAG_SET (wavenc, GST_ELEMENT_EVENT_AWARE); } -struct _maps { - guint32 id; - char *name; +struct _maps +{ + guint32 id; + char *name; } maps[] = { - { GST_RIFF_INFO_IARL, "Location" }, - { GST_RIFF_INFO_IART, "Artist" }, - { GST_RIFF_INFO_ICMS, "Commissioner" }, - { GST_RIFF_INFO_ICMT, "Comment" }, - { GST_RIFF_INFO_ICOP, "Copyright" }, - { GST_RIFF_INFO_ICRD, "Creation Date" }, - { GST_RIFF_INFO_IENG, "Engineer" }, - { GST_RIFF_INFO_IGNR, "Genre" }, - { GST_RIFF_INFO_IKEY, "Keywords" }, - { GST_RIFF_INFO_INAM, "Title" }, /* Name */ - { GST_RIFF_INFO_IPRD, "Product" }, - { GST_RIFF_INFO_ISBJ, "Subject" }, - { GST_RIFF_INFO_ISFT, "Software" }, - { GST_RIFF_INFO_ITCH, "Technician" }, - { 0, NULL } + { + GST_RIFF_INFO_IARL, "Location"}, { + GST_RIFF_INFO_IART, "Artist"}, { + GST_RIFF_INFO_ICMS, "Commissioner"}, { + GST_RIFF_INFO_ICMT, "Comment"}, { + GST_RIFF_INFO_ICOP, "Copyright"}, { + GST_RIFF_INFO_ICRD, "Creation Date"}, { + GST_RIFF_INFO_IENG, "Engineer"}, { + GST_RIFF_INFO_IGNR, "Genre"}, { + GST_RIFF_INFO_IKEY, "Keywords"}, { + GST_RIFF_INFO_INAM, "Title"}, /* Name */ + { + GST_RIFF_INFO_IPRD, "Product"}, { + GST_RIFF_INFO_ISBJ, "Subject"}, { + GST_RIFF_INFO_ISFT, "Software"}, { + GST_RIFF_INFO_ITCH, "Technician"}, { + 0, NULL} }; #if 0 static guint32 get_id_from_name (const char *name) { - int i; + int i; - for (i = 0; maps[i].name; i++) { - if (strcasecmp (maps[i].name, name) == 0) { - return maps[i].id; - } - } + for (i = 0; maps[i].name; i++) { + if (strcasecmp (maps[i].name, name) == 0) { + return maps[i].id; + } + } - return 0; + return 0; } static void -write_metadata (GstWavEnc *wavenc) +write_metadata (GstWavEnc * wavenc) { - GString *info_str; - GList *props; - int total = 4; - gboolean need_to_write = FALSE; - - info_str = g_string_new ("LIST INFO"); - - for (props = wavenc->metadata->properties->properties; props; props = props->next) { - GstPropsEntry *entry = props->data; - const char *name; - guint32 id; - - name = gst_props_entry_get_name (entry); - id = get_id_from_name (name); - if (id != 0) { - const char *text; - char *tmp; - int len, req, i; - - need_to_write = TRUE; /* We've got at least one entry */ - - gst_props_entry_get_string (entry, &text); - len = strlen (text) + 1; /* The length in the file includes the \0 */ - - tmp = g_strdup_printf (GST_FOURCC_FORMAT "%d%s", GST_FOURCC_ARGS (id), - GUINT32_TO_LE (len), text); - g_string_append (info_str, tmp); - g_free (tmp); - - /* Check that we end on an even boundary */ - req = ((len + 8) + 1) & ~1; - for (i = 0; i < req - len; i++) { - g_string_append_printf (info_str, "%c", 0); - } - - total += req; - } - } - - if (need_to_write) { - GstBuffer *buf; - /* Now we've got all the strings together, we can write our length in */ - info_str->str[4] = GUINT32_TO_LE (total); - - buf = gst_buffer_new (); - gst_buffer_set_data (buf, info_str->str, info_str->len); - - gst_pad_push (wavenc->srcpad, GST_DATA (buf)); - g_string_free (info_str, FALSE); - } + GString *info_str; + GList *props; + int total = 4; + gboolean need_to_write = FALSE; + + info_str = g_string_new ("LIST INFO"); + + for (props = wavenc->metadata->properties->properties; props; + props = props->next) { + GstPropsEntry *entry = props->data; + const char *name; + guint32 id; + + name = gst_props_entry_get_name (entry); + id = get_id_from_name (name); + if (id != 0) { + const char *text; + char *tmp; + int len, req, i; + + need_to_write = TRUE; /* We've got at least one entry */ + + gst_props_entry_get_string (entry, &text); + len = strlen (text) + 1; /* The length in the file includes the \0 */ + + tmp = g_strdup_printf (GST_FOURCC_FORMAT "%d%s", GST_FOURCC_ARGS (id), + GUINT32_TO_LE (len), text); + g_string_append (info_str, tmp); + g_free (tmp); + + /* Check that we end on an even boundary */ + req = ((len + 8) + 1) & ~1; + for (i = 0; i < req - len; i++) { + g_string_append_printf (info_str, "%c", 0); + } + + total += req; + } + } + + if (need_to_write) { + GstBuffer *buf; + + /* Now we've got all the strings together, we can write our length in */ + info_str->str[4] = GUINT32_TO_LE (total); + + buf = gst_buffer_new (); + gst_buffer_set_data (buf, info_str->str, info_str->len); + + gst_pad_push (wavenc->srcpad, GST_DATA (buf)); + g_string_free (info_str, FALSE); + } } static void -write_cues (GstWavEnc *wavenc) +write_cues (GstWavEnc * wavenc) { - GString *cue_string, *point_string; - GstBuffer *buf; - GList *cue_list, *c; - int num_cues, total = 4; - - if (gst_props_get (wavenc->metadata->properties, - "cues", &cue_list, - NULL) == FALSE) { - /* No cues, move along please, nothing to see here */ - return; - } - - /* Space for 'cue ', chunk size and number of cuepoints */ - cue_string = g_string_new ("cue "); + GString *cue_string, *point_string; + GstBuffer *buf; + GList *cue_list, *c; + int num_cues, total = 4; + + if (gst_props_get (wavenc->metadata->properties, + "cues", &cue_list, NULL) == FALSE) { + /* No cues, move along please, nothing to see here */ + return; + } + + /* Space for 'cue ', chunk size and number of cuepoints */ + cue_string = g_string_new ("cue "); #define CUEPOINT_SIZE 24 - point_string = g_string_sized_new (CUEPOINT_SIZE); - - for (c = cue_list, num_cues = 0; c; c = c->next, num_cues++) { - GstCaps *cue_caps = c->data; - guint32 pos; - - gst_props_get (cue_caps->properties, "position", &pos, NULL); - - point_string->str[0] = GUINT32_TO_LE (num_cues + 1); - point_string->str[4] = GUINT32_TO_LE (0); - /* Fixme: There is probably a macro for this */ - point_string->str[8] = 'd'; - point_string->str[9] = 'a'; - point_string->str[10] = 't'; - point_string->str[11] = 'a'; - point_string->str[12] = GUINT32_TO_LE (0); - point_string->str[16] = GUINT32_TO_LE (0); - point_string->str[20] = GUINT32_TO_LE (pos); - - total += CUEPOINT_SIZE; - } - - /* Set the length and chunk size */ - cue_string->str[4] = GUINT32_TO_LE (total); - cue_string->str[8] = GUINT32_TO_LE (num_cues); - /* Stick the cue points on the end */ - g_string_append (cue_string, point_string->str); - g_string_free (point_string, TRUE); - - buf = gst_buffer_new (); - gst_buffer_set_data (buf, cue_string->str, cue_string->len); - - gst_pad_push (wavenc->srcpad, GST_DATA (buf)); - g_string_free (cue_string, FALSE); + point_string = g_string_sized_new (CUEPOINT_SIZE); + + for (c = cue_list, num_cues = 0; c; c = c->next, num_cues++) { + GstCaps *cue_caps = c->data; + guint32 pos; + + gst_props_get (cue_caps->properties, "position", &pos, NULL); + + point_string->str[0] = GUINT32_TO_LE (num_cues + 1); + point_string->str[4] = GUINT32_TO_LE (0); + /* Fixme: There is probably a macro for this */ + point_string->str[8] = 'd'; + point_string->str[9] = 'a'; + point_string->str[10] = 't'; + point_string->str[11] = 'a'; + point_string->str[12] = GUINT32_TO_LE (0); + point_string->str[16] = GUINT32_TO_LE (0); + point_string->str[20] = GUINT32_TO_LE (pos); + + total += CUEPOINT_SIZE; + } + + /* Set the length and chunk size */ + cue_string->str[4] = GUINT32_TO_LE (total); + cue_string->str[8] = GUINT32_TO_LE (num_cues); + /* Stick the cue points on the end */ + g_string_append (cue_string, point_string->str); + g_string_free (point_string, TRUE); + + buf = gst_buffer_new (); + gst_buffer_set_data (buf, cue_string->str, cue_string->len); + + gst_pad_push (wavenc->srcpad, GST_DATA (buf)); + g_string_free (cue_string, FALSE); } static void -write_labels (GstWavEnc *wavenc) +write_labels (GstWavEnc * wavenc) { - GstBuffer *buf; - GString *info_str; - int total = 4; - GList *caps; - - info_str = g_string_new ("LIST adtl"); - if (gst_props_get (wavenc->metadata->properties, "ltxts", &caps, NULL)) { - GList *p; - int i; - - for (p = caps, i = 1; p; p = p->next, i++) { - GstCaps *ltxt_caps = p->data; - GString *ltxt; - char *label = NULL; - int len, req, j; - - gst_props_get (ltxt_caps->properties, "name", &label, NULL); - len = strlen (label); + GstBuffer *buf; + GString *info_str; + int total = 4; + GList *caps; + + info_str = g_string_new ("LIST adtl"); + if (gst_props_get (wavenc->metadata->properties, "ltxts", &caps, NULL)) { + GList *p; + int i; + + for (p = caps, i = 1; p; p = p->next, i++) { + GstCaps *ltxt_caps = p->data; + GString *ltxt; + char *label = NULL; + int len, req, j; + + gst_props_get (ltxt_caps->properties, "name", &label, NULL); + len = strlen (label); #define LTXT_SIZE 28 - ltxt = g_string_new ("ltxt "); - ltxt->str[8] = GUINT32_TO_LE (i); /* Identifier */ - ltxt->str[12] = GUINT32_TO_LE (0); /* Sample Length */ - ltxt->str[16] = GUINT32_TO_LE (0); /* FIXME: Don't save the purpose yet */ - ltxt->str[20] = GUINT16_TO_LE (0); /* Country */ - ltxt->str[22] = GUINT16_TO_LE (0); /* Language */ - ltxt->str[24] = GUINT16_TO_LE (0); /* Dialect */ - ltxt->str[26] = GUINT16_TO_LE (0); /* Code Page */ - g_string_append (ltxt, label); - g_free (label); - - len += LTXT_SIZE; - - ltxt->str[4] = GUINT32_TO_LE (len); - - /* Check that we end on an even boundary */ - req = ((len + 8) + 1) & ~1; - for (j = 0; j < req - len; j++) { - g_string_append_printf (ltxt, "%c", 0); - } - - total += req; - - g_string_append (info_str, ltxt->str); - g_string_free (ltxt, TRUE); - } - } - - if (gst_props_get (wavenc->metadata->properties, "labels", &caps, NULL)) { - GList *p; - int i; - - for (p = caps, i = 1; p; p = p->next, i++) { - GstCaps *labl_caps = p->data; - GString *labl; - char *label = NULL; - int len, req, j; - - gst_props_get (labl_caps->properties, "name", &label, NULL); - len = strlen (label); + ltxt = g_string_new ("ltxt "); + ltxt->str[8] = GUINT32_TO_LE (i); /* Identifier */ + ltxt->str[12] = GUINT32_TO_LE (0); /* Sample Length */ + ltxt->str[16] = GUINT32_TO_LE (0); /* FIXME: Don't save the purpose yet */ + ltxt->str[20] = GUINT16_TO_LE (0); /* Country */ + ltxt->str[22] = GUINT16_TO_LE (0); /* Language */ + ltxt->str[24] = GUINT16_TO_LE (0); /* Dialect */ + ltxt->str[26] = GUINT16_TO_LE (0); /* Code Page */ + g_string_append (ltxt, label); + g_free (label); + + len += LTXT_SIZE; + + ltxt->str[4] = GUINT32_TO_LE (len); + + /* Check that we end on an even boundary */ + req = ((len + 8) + 1) & ~1; + for (j = 0; j < req - len; j++) { + g_string_append_printf (ltxt, "%c", 0); + } + + total += req; + + g_string_append (info_str, ltxt->str); + g_string_free (ltxt, TRUE); + } + } + + if (gst_props_get (wavenc->metadata->properties, "labels", &caps, NULL)) { + GList *p; + int i; + + for (p = caps, i = 1; p; p = p->next, i++) { + GstCaps *labl_caps = p->data; + GString *labl; + char *label = NULL; + int len, req, j; + + gst_props_get (labl_caps->properties, "name", &label, NULL); + len = strlen (label); #define LABL_SIZE 4 - labl = g_string_new ("labl "); - labl->str[8] = GUINT32_TO_LE (i); - g_string_append (labl, label); - g_free (label); - - len += LABL_SIZE; + labl = g_string_new ("labl "); + labl->str[8] = GUINT32_TO_LE (i); + g_string_append (labl, label); + g_free (label); - labl->str[4] = GUINT32_TO_LE (len); + len += LABL_SIZE; - /* Check our size */ - req = ((len + 8) + 1) & ~1; - for (j = 0; j < req - len; j++) { - g_string_append_printf (labl, "%c", 0); - } + labl->str[4] = GUINT32_TO_LE (len); - total += req; + /* Check our size */ + req = ((len + 8) + 1) & ~1; + for (j = 0; j < req - len; j++) { + g_string_append_printf (labl, "%c", 0); + } - g_string_append (info_str, labl->str); - g_string_free (labl, TRUE); - } - } + total += req; - if (gst_props_get (wavenc->metadata->properties, "notes", &caps, NULL)) { - GList *p; - int i; + g_string_append (info_str, labl->str); + g_string_free (labl, TRUE); + } + } + + if (gst_props_get (wavenc->metadata->properties, "notes", &caps, NULL)) { + GList *p; + int i; - for (p = caps, i = 1; p; p = p->next, i++) { - GstCaps *note_caps = p->data; - GString *note; - char *label = NULL; - int len, req, j; + for (p = caps, i = 1; p; p = p->next, i++) { + GstCaps *note_caps = p->data; + GString *note; + char *label = NULL; + int len, req, j; - gst_props_get (note_caps->properties, "name", &label, NULL); - len = strlen (label); + gst_props_get (note_caps->properties, "name", &label, NULL); + len = strlen (label); #define NOTE_SIZE 4 - note = g_string_new ("note "); - note->str[8] = GUINT32_TO_LE (i); - g_string_append (note, label); - g_free (label); + note = g_string_new ("note "); + note->str[8] = GUINT32_TO_LE (i); + g_string_append (note, label); + g_free (label); - len += NOTE_SIZE; + len += NOTE_SIZE; - note->str[4] = GUINT32_TO_LE (len); + note->str[4] = GUINT32_TO_LE (len); - /* Size check */ - req = ((len + 8) + 1) & ~1; - for (j = 0; j < req - len; j++) { - g_string_append_printf (note, "%c", 0); - } + /* Size check */ + req = ((len + 8) + 1) & ~1; + for (j = 0; j < req - len; j++) { + g_string_append_printf (note, "%c", 0); + } - total += req; + total += req; - g_string_append (info_str, note->str); - g_string_free (note, TRUE); - } - } + g_string_append (info_str, note->str); + g_string_free (note, TRUE); + } + } - info_str->str[4] = GUINT32_TO_LE (total); + info_str->str[4] = GUINT32_TO_LE (total); - buf = gst_buffer_new (); - gst_buffer_set_data (buf, info_str->str, info_str->len); + buf = gst_buffer_new (); + gst_buffer_set_data (buf, info_str->str, info_str->len); - gst_pad_push (wavenc->srcpad, GST_DATA (buf)); - g_string_free (info_str, FALSE); + gst_pad_push (wavenc->srcpad, GST_DATA (buf)); + g_string_free (info_str, FALSE); } #endif static void -gst_wavenc_chain (GstPad *pad, - GstData *_data) +gst_wavenc_chain (GstPad * pad, GstData * _data) { GstBuffer *buf = GST_BUFFER (_data); GstWavEnc *wavenc; @@ -588,41 +591,41 @@ gst_wavenc_chain (GstPad *pad, if (!wavenc->setup) { gst_buffer_unref (buf); - GST_ELEMENT_ERROR (wavenc, CORE, NEGOTIATION, (NULL), ("encoder not initialised (input is not audio?)")); + GST_ELEMENT_ERROR (wavenc, CORE, NEGOTIATION, (NULL), + ("encoder not initialised (input is not audio?)")); return; } - if (GST_IS_EVENT (buf)) { - if (GST_EVENT_TYPE (buf) == GST_EVENT_EOS) { - wavenc->pad_eos = TRUE; + if (GST_IS_EVENT (buf)) { + if (GST_EVENT_TYPE (buf) == GST_EVENT_EOS) { + wavenc->pad_eos = TRUE; #if 0 - /* Write our metadata if we have any */ - if (wavenc->metadata) { - write_metadata (wavenc); - write_cues (wavenc); - write_labels (wavenc); - } + /* Write our metadata if we have any */ + if (wavenc->metadata) { + write_metadata (wavenc); + write_cues (wavenc); + write_labels (wavenc); + } #endif - - gst_wavenc_stop_file (wavenc); - gst_pad_push (wavenc->srcpad, - GST_DATA (gst_event_new (GST_EVENT_EOS))); - gst_element_set_eos (GST_ELEMENT (wavenc)); - } else { - gst_pad_event_default (wavenc->srcpad, GST_EVENT (buf)); - } - return; - } + + gst_wavenc_stop_file (wavenc); + gst_pad_push (wavenc->srcpad, GST_DATA (gst_event_new (GST_EVENT_EOS))); + gst_element_set_eos (GST_ELEMENT (wavenc)); + } else { + gst_pad_event_default (wavenc->srcpad, GST_EVENT (buf)); + } + return; + } 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); GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); - + gst_pad_push (wavenc->srcpad, GST_DATA (outbuf)); wavenc->flush_header = FALSE; } @@ -633,20 +636,14 @@ gst_wavenc_chain (GstPad *pad, } static gboolean -plugin_init (GstPlugin *plugin) +plugin_init (GstPlugin * plugin) { - return gst_element_register (plugin, "wavenc", GST_RANK_NONE, GST_TYPE_WAVENC); + return gst_element_register (plugin, "wavenc", GST_RANK_NONE, + GST_TYPE_WAVENC); } -GST_PLUGIN_DEFINE ( - GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "wavenc", - "Encode raw audio into WAV", - plugin_init, - VERSION, - GST_LICENSE, - GST_PACKAGE, - GST_ORIGIN -) - +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "wavenc", + "Encode raw audio into WAV", + plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN) diff --git a/gst/wavenc/gstwavenc.h b/gst/wavenc/gstwavenc.h index 8810001a..7711a25d 100644 --- a/gst/wavenc/gstwavenc.h +++ b/gst/wavenc/gstwavenc.h @@ -25,7 +25,6 @@ #include <gst/gst.h> G_BEGIN_DECLS - #define GST_TYPE_WAVENC \ (gst_wavenc_get_type()) #define GST_WAVENC(obj) \ @@ -36,17 +35,17 @@ G_BEGIN_DECLS (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_WAVENC)) #define GST_IS_WAVENC_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WAVENC)) - typedef struct _GstWavEnc GstWavEnc; typedef struct _GstWavEncClass GstWavEncClass; #define WAV_HEADER_LEN 44 -struct _GstWavEnc { +struct _GstWavEnc +{ GstElement element; /* pads */ - GstPad *sinkpad,*srcpad; + GstPad *sinkpad, *srcpad; /* useful audio data */ guint bits; @@ -54,15 +53,15 @@ struct _GstWavEnc { guint channels; guint width; guint32 length; - + gboolean setup, flush_header, pad_eos; guchar header[WAV_HEADER_LEN]; }; -struct _GstWavEncClass { +struct _GstWavEncClass +{ GstElementClass parent_class; }; G_END_DECLS - #endif /* __GST_ENC_H__ */ diff --git a/gst/wavenc/riff.h b/gst/wavenc/riff.h index 141ed1fa..bf18a1fe 100644 --- a/gst/wavenc/riff.h +++ b/gst/wavenc/riff.h @@ -24,11 +24,12 @@ #include <gst/gst.h> -typedef enum { - GST_RIFF_OK = 0, +typedef enum +{ + GST_RIFF_OK = 0, GST_RIFF_ENOTRIFF = -1, - GST_RIFF_EINVAL = -2, - GST_RIFF_ENOMEM = -3 + GST_RIFF_EINVAL = -2, + GST_RIFF_ENOMEM = -3 } GstRiffReturn; #define MAKE_FOUR_CC(a,b,c,d) GST_MAKE_FOURCC(a,b,c,d) @@ -81,29 +82,29 @@ typedef enum { #define GST_RIFF_FCCH_MSVC MAKE_FOUR_CC('M','S','V','C') /* INFO types - see http://www.saettler.com/RIFFMCI/riffmci.html */ -#define GST_RIFF_INFO_IARL MAKE_FOUR_CC('I','A','R','L') /* location */ -#define GST_RIFF_INFO_IART MAKE_FOUR_CC('I','A','R','T') /* artist */ -#define GST_RIFF_INFO_ICMS MAKE_FOUR_CC('I','C','M','S') /* commissioned */ -#define GST_RIFF_INFO_ICMT MAKE_FOUR_CC('I','C','M','T') /* comment */ -#define GST_RIFF_INFO_ICOP MAKE_FOUR_CC('I','C','O','P') /* copyright */ -#define GST_RIFF_INFO_ICRD MAKE_FOUR_CC('I','C','R','D') /* creation date */ -#define GST_RIFF_INFO_ICRP MAKE_FOUR_CC('I','C','R','P') /* cropped */ -#define GST_RIFF_INFO_IDIM MAKE_FOUR_CC('I','D','I','M') /* dimensions */ -#define GST_RIFF_INFO_IDPI MAKE_FOUR_CC('I','D','P','I') /* dots-per-inch */ -#define GST_RIFF_INFO_IENG MAKE_FOUR_CC('I','E','N','G') /* engineer(s) */ -#define GST_RIFF_INFO_IGNR MAKE_FOUR_CC('I','G','N','R') /* genre */ -#define GST_RIFF_INFO_IKEY MAKE_FOUR_CC('I','K','E','Y') /* keywords */ -#define GST_RIFF_INFO_ILGT MAKE_FOUR_CC('I','L','G','T') /* lightness */ -#define GST_RIFF_INFO_IMED MAKE_FOUR_CC('I','M','E','D') /* medium */ -#define GST_RIFF_INFO_INAM MAKE_FOUR_CC('I','N','A','M') /* name */ -#define GST_RIFF_INFO_IPLT MAKE_FOUR_CC('I','P','L','T') /* palette setting */ -#define GST_RIFF_INFO_IPRD MAKE_FOUR_CC('I','P','R','D') /* product */ -#define GST_RIFF_INFO_ISBJ MAKE_FOUR_CC('I','S','B','J') /* subject */ -#define GST_RIFF_INFO_ISFT MAKE_FOUR_CC('I','S','F','T') /* software */ -#define GST_RIFF_INFO_ISHP MAKE_FOUR_CC('I','S','H','P') /* sharpness */ -#define GST_RIFF_INFO_ISRC MAKE_FOUR_CC('I','S','R','C') /* source */ -#define GST_RIFF_INFO_ISRF MAKE_FOUR_CC('I','S','R','F') /* source form */ -#define GST_RIFF_INFO_ITCH MAKE_FOUR_CC('I','T','C','H') /* technician(s) */ +#define GST_RIFF_INFO_IARL MAKE_FOUR_CC('I','A','R','L') /* location */ +#define GST_RIFF_INFO_IART MAKE_FOUR_CC('I','A','R','T') /* artist */ +#define GST_RIFF_INFO_ICMS MAKE_FOUR_CC('I','C','M','S') /* commissioned */ +#define GST_RIFF_INFO_ICMT MAKE_FOUR_CC('I','C','M','T') /* comment */ +#define GST_RIFF_INFO_ICOP MAKE_FOUR_CC('I','C','O','P') /* copyright */ +#define GST_RIFF_INFO_ICRD MAKE_FOUR_CC('I','C','R','D') /* creation date */ +#define GST_RIFF_INFO_ICRP MAKE_FOUR_CC('I','C','R','P') /* cropped */ +#define GST_RIFF_INFO_IDIM MAKE_FOUR_CC('I','D','I','M') /* dimensions */ +#define GST_RIFF_INFO_IDPI MAKE_FOUR_CC('I','D','P','I') /* dots-per-inch */ +#define GST_RIFF_INFO_IENG MAKE_FOUR_CC('I','E','N','G') /* engineer(s) */ +#define GST_RIFF_INFO_IGNR MAKE_FOUR_CC('I','G','N','R') /* genre */ +#define GST_RIFF_INFO_IKEY MAKE_FOUR_CC('I','K','E','Y') /* keywords */ +#define GST_RIFF_INFO_ILGT MAKE_FOUR_CC('I','L','G','T') /* lightness */ +#define GST_RIFF_INFO_IMED MAKE_FOUR_CC('I','M','E','D') /* medium */ +#define GST_RIFF_INFO_INAM MAKE_FOUR_CC('I','N','A','M') /* name */ +#define GST_RIFF_INFO_IPLT MAKE_FOUR_CC('I','P','L','T') /* palette setting */ +#define GST_RIFF_INFO_IPRD MAKE_FOUR_CC('I','P','R','D') /* product */ +#define GST_RIFF_INFO_ISBJ MAKE_FOUR_CC('I','S','B','J') /* subject */ +#define GST_RIFF_INFO_ISFT MAKE_FOUR_CC('I','S','F','T') /* software */ +#define GST_RIFF_INFO_ISHP MAKE_FOUR_CC('I','S','H','P') /* sharpness */ +#define GST_RIFF_INFO_ISRC MAKE_FOUR_CC('I','S','R','C') /* source */ +#define GST_RIFF_INFO_ISRF MAKE_FOUR_CC('I','S','R','F') /* source form */ +#define GST_RIFF_INFO_ITCH MAKE_FOUR_CC('I','T','C','H') /* technician(s) */ /*********Chunk Names***************/ #define GST_RIFF_FF00 MAKE_FOUR_CC(0xFF,0xFF,0x00,0x00) @@ -182,7 +183,7 @@ typedef enum { #define GST_RIFF_v422 MAKE_FOUR_CC( 'v', '4', '2', '2') #define GST_RIFF_V422 MAKE_FOUR_CC( 'V', '4', '2', '2') #define GST_RIFF_mvi1 MAKE_FOUR_CC( 'm', 'v', 'i', '1') -#define GST_RIFF_MPIX MAKE_FOUR_CC(0x04,0x00, 'i', '1') /* MotionPixels munged their id */ +#define GST_RIFF_MPIX MAKE_FOUR_CC(0x04,0x00, 'i', '1') /* MotionPixels munged their id */ #define GST_RIFF_AURA MAKE_FOUR_CC( 'A', 'U', 'R', 'A') #define GST_RIFF_DMB1 MAKE_FOUR_CC( 'D', 'M', 'B', '1') #define GST_RIFF_dmb1 MAKE_FOUR_CC( 'd', 'm', 'b', '1') @@ -218,7 +219,7 @@ typedef enum { #define GST_RIFF_rpza MAKE_FOUR_CC( 'r', 'p', 'z', 'a') /* And this here's the mistakes that need to be supported */ -#define GST_RIFF_azpr MAKE_FOUR_CC( 'a', 'z', 'p', 'r') /* recognize Apple's rpza mangled? */ +#define GST_RIFF_azpr MAKE_FOUR_CC( 'a', 'z', 'p', 'r') /* recognize Apple's rpza mangled? */ /*********** FND in MJPG **********/ #define GST_RIFF_ISFT MAKE_FOUR_CC( 'I', 'S', 'F', 'T') @@ -231,21 +232,22 @@ typedef enum { #define GST_RIFF_rec MAKE_FOUR_CC( 'r', 'e', 'c', ' ') /* common data structures */ -struct _gst_riff_avih { - guint32 us_frame; /* microsec per frame */ - guint32 max_bps; /* byte/s overall */ - guint32 pad_gran; /* pad_gran (???) */ +struct _gst_riff_avih +{ + guint32 us_frame; /* microsec per frame */ + guint32 max_bps; /* byte/s overall */ + guint32 pad_gran; /* pad_gran (???) */ guint32 flags; /* flags values */ -#define GST_RIFF_AVIH_HASINDEX 0x00000010 /* has idx1 chunk */ -#define GST_RIFF_AVIH_MUSTUSEINDEX 0x00000020 /* must use idx1 chunk to determine order */ -#define GST_RIFF_AVIH_ISINTERLEAVED 0x00000100 /* AVI file is interleaved */ -#define GST_RIFF_AVIH_WASCAPTUREFILE 0x00010000 /* specially allocated used for capturing real time video */ -#define GST_RIFF_AVIH_COPYRIGHTED 0x00020000 /* contains copyrighted data */ - guint32 tot_frames; /* # of frames (all) */ - guint32 init_frames; /* initial frames (???) */ +#define GST_RIFF_AVIH_HASINDEX 0x00000010 /* has idx1 chunk */ +#define GST_RIFF_AVIH_MUSTUSEINDEX 0x00000020 /* must use idx1 chunk to determine order */ +#define GST_RIFF_AVIH_ISINTERLEAVED 0x00000100 /* AVI file is interleaved */ +#define GST_RIFF_AVIH_WASCAPTUREFILE 0x00010000 /* specially allocated used for capturing real time video */ +#define GST_RIFF_AVIH_COPYRIGHTED 0x00020000 /* contains copyrighted data */ + guint32 tot_frames; /* # of frames (all) */ + guint32 init_frames; /* initial frames (???) */ guint32 streams; - guint32 bufsize; /* suggested buffer size */ + guint32 bufsize; /* suggested buffer size */ guint32 width; guint32 height; guint32 scale; @@ -254,26 +256,28 @@ struct _gst_riff_avih { guint32 length; }; -struct _gst_riff_strh { - guint32 type; /* stream type */ - guint32 fcc_handler; /* fcc_handler */ +struct _gst_riff_strh +{ + guint32 type; /* stream type */ + guint32 fcc_handler; /* fcc_handler */ guint32 flags; /* flags values */ #define GST_RIFF_STRH_DISABLED 0x000000001 #define GST_RIFF_STRH_VIDEOPALCHANGES 0x000010000 guint32 priority; - guint32 init_frames; /* initial frames (???) */ + guint32 init_frames; /* initial frames (???) */ guint32 scale; guint32 rate; guint32 start; guint32 length; - guint32 bufsize; /* suggested buffer size */ + guint32 bufsize; /* suggested buffer size */ guint32 quality; guint32 samplesize; /* XXX 16 bytes ? */ }; -struct _gst_riff_strf_vids { /* == BitMapInfoHeader */ +struct _gst_riff_strf_vids +{ /* == BitMapInfoHeader */ guint32 size; guint32 width; guint32 height; @@ -283,13 +287,14 @@ struct _gst_riff_strf_vids { /* == BitMapInfoHeader */ guint32 image_size; guint32 xpels_meter; guint32 ypels_meter; - guint32 num_colors; /* used colors */ - guint32 imp_colors; /* important colors */ + guint32 num_colors; /* used colors */ + guint32 imp_colors; /* important colors */ /* may be more for some codecs */ }; -struct _gst_riff_strf_auds { /* == WaveHeader (?) */ +struct _gst_riff_strf_auds +{ /* == WaveHeader (?) */ guint16 format; /**** from public Microsoft RIFF docs ******/ #define GST_RIFF_WAVE_FORMAT_UNKNOWN (0x0000) @@ -328,7 +333,8 @@ struct _gst_riff_strf_auds { /* == WaveHeader (?) */ guint16 size; }; -struct _gst_riff_strf_iavs { +struct _gst_riff_strf_iavs +{ guint32 DVAAuxSrc; guint32 DVAAuxCtl; guint32 DVAAuxSrc1; @@ -339,26 +345,30 @@ struct _gst_riff_strf_iavs { guint32 DVReserved2; }; -struct _gst_riff_riff { +struct _gst_riff_riff +{ guint32 id; guint32 size; guint32 type; }; -struct _gst_riff_list { +struct _gst_riff_list +{ guint32 id; guint32 size; guint32 type; }; -struct _gst_riff_labl { +struct _gst_riff_labl +{ guint32 id; guint32 size; guint32 identifier; }; -struct _gst_riff_ltxt { +struct _gst_riff_ltxt +{ guint32 id; guint32 size; @@ -371,14 +381,16 @@ struct _gst_riff_ltxt { guint16 codepage; }; -struct _gst_riff_note { +struct _gst_riff_note +{ guint32 id; guint32 size; guint32 identifier; }; -struct _gst_riff_cuepoints { +struct _gst_riff_cuepoints +{ guint32 identifier; guint32 position; guint32 id; @@ -387,19 +399,22 @@ struct _gst_riff_cuepoints { guint32 offset; }; -struct _gst_riff_cue { +struct _gst_riff_cue +{ guint32 id; guint32 size; - guint32 cuepoints; /* Number of cue points held in the data */ + guint32 cuepoints; /* Number of cue points held in the data */ }; -struct _gst_riff_chunk { +struct _gst_riff_chunk +{ guint32 id; guint32 size; }; -struct _gst_riff_index_entry { +struct _gst_riff_index_entry +{ guint32 id; guint32 flags; #define GST_RIFF_IF_LIST (0x00000001L) @@ -410,29 +425,31 @@ struct _gst_riff_index_entry { guint32 size; }; -struct _gst_riff_dmlh { +struct _gst_riff_dmlh +{ guint32 totalframes; }; -typedef struct _gst_riff_riff gst_riff_riff; -typedef struct _gst_riff_list gst_riff_list; -typedef struct _gst_riff_chunk gst_riff_chunk; -typedef struct _gst_riff_index_entry gst_riff_index_entry; - -typedef struct _gst_riff_avih gst_riff_avih; -typedef struct _gst_riff_strh gst_riff_strh; -typedef struct _gst_riff_strf_vids gst_riff_strf_vids; -typedef struct _gst_riff_strf_auds gst_riff_strf_auds; -typedef struct _gst_riff_strf_iavs gst_riff_strf_iavs; -typedef struct _gst_riff_dmlh gst_riff_dmlh; -typedef struct _GstRiffChunk GstRiffChunk; - -struct _GstRiffChunk { +typedef struct _gst_riff_riff gst_riff_riff; +typedef struct _gst_riff_list gst_riff_list; +typedef struct _gst_riff_chunk gst_riff_chunk; +typedef struct _gst_riff_index_entry gst_riff_index_entry; + +typedef struct _gst_riff_avih gst_riff_avih; +typedef struct _gst_riff_strh gst_riff_strh; +typedef struct _gst_riff_strf_vids gst_riff_strf_vids; +typedef struct _gst_riff_strf_auds gst_riff_strf_auds; +typedef struct _gst_riff_strf_iavs gst_riff_strf_iavs; +typedef struct _gst_riff_dmlh gst_riff_dmlh; +typedef struct _GstRiffChunk GstRiffChunk; + +struct _GstRiffChunk +{ gulong offset; guint32 id; guint32 size; - guint32 form; /* for list chunks */ + guint32 form; /* for list chunks */ gchar *data; }; |