mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-16 13:04:18 +00:00
a hack to work around intltool's brokenness a current check for mpeg2dec details->klass reorganizations an element br...
Original commit message from CVS: * a hack to work around intltool's brokenness * a current check for mpeg2dec * details->klass reorganizations * an element browser that uses details->klass * separated cdxa parse out from the avi directory
This commit is contained in:
parent
d4458d89c9
commit
cca77e215b
29 changed files with 42 additions and 494 deletions
configure.ac
ext
esd
flac
jpeg
ladspa
gst
auparse
avi
cutter
flx
goom
law
level
median
monoscope
spectrum
udp
wavparse
m4
sys/oss
|
@ -166,7 +166,7 @@ GST_PLUGIN_LDFLAGS='-module -avoid-version'
|
|||
AC_SUBST(GST_PLUGIN_LDFLAGS)
|
||||
|
||||
GST_PLUGINS_ALL="\
|
||||
ac3parse adder audioscale auparse avi chart\
|
||||
ac3parse adder audioscale auparse avi cdxaparse chart\
|
||||
cutter deinterlace flx goom intfloat law level\
|
||||
median mpeg1enc mpeg1sys mpeg1videoparse mpeg2enc mpeg2sub\
|
||||
mpegaudio mpegaudioparse mpegstream mpegtypes modplug\
|
||||
|
@ -744,6 +744,7 @@ gst/adder/Makefile
|
|||
gst/audioscale/Makefile
|
||||
gst/auparse/Makefile
|
||||
gst/avi/Makefile
|
||||
gst/cdxaparse/Makefile
|
||||
gst/chart/Makefile
|
||||
gst/cutter/Makefile
|
||||
gst/deinterlace/Makefile
|
||||
|
|
|
@ -70,7 +70,7 @@ GType gst_esdmon_get_type(void);
|
|||
/* elementfactory information */
|
||||
static GstElementDetails esdmon_details = {
|
||||
"Esound audio monitor",
|
||||
"Src/Esdmon",
|
||||
"Source/Audio",
|
||||
"Monitors audio from an esound server",
|
||||
VERSION,
|
||||
"Richard Boulton <richard-gst@tartarus.org>",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
/* elementfactory information */
|
||||
static GstElementDetails esdsink_details = {
|
||||
"Esound audio sink",
|
||||
"Sink/Esdsink",
|
||||
"Sink/Audio",
|
||||
"Plays audio to an esound server",
|
||||
VERSION,
|
||||
"Richard Boulton <richard-gst@tartarus.org>",
|
||||
|
|
|
@ -29,7 +29,7 @@ extern GstPadTemplate *dec_src_template, *dec_sink_template;
|
|||
/* elementfactory information */
|
||||
GstElementDetails flacdec_details = {
|
||||
"FLAC decoder",
|
||||
"Filter/Audio/Decoder",
|
||||
"Codec/Audio/Decoder",
|
||||
"Decodes FLAC lossless audio streams",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
|
|
|
@ -28,7 +28,7 @@ extern GstPadTemplate *enc_src_template, *enc_sink_template;
|
|||
/* elementfactory information */
|
||||
GstElementDetails flacenc_details = {
|
||||
"FLAC encoder",
|
||||
"Filter/Audio/Encoder",
|
||||
"Codec/Audio/Encoder",
|
||||
"Encodes audio with the FLAC lossless audio encoder",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
|
|
|
@ -28,7 +28,7 @@ extern GstPadTemplate *jpegdec_src_template, *jpegdec_sink_template;
|
|||
/* elementfactory information */
|
||||
GstElementDetails gst_jpegdec_details = {
|
||||
"jpeg image decoder",
|
||||
"Filter/Decoder/Image",
|
||||
"Codec/Image/Decoder",
|
||||
".jpeg",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@tvd.be>",
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
/* elementfactory information */
|
||||
GstElementDetails gst_jpegenc_details = {
|
||||
"jpeg image encoder",
|
||||
"Filter/Encoder/Image",
|
||||
"Codec/Image/Encoder",
|
||||
".jpeg",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@tvd.be>",
|
||||
|
|
|
@ -398,6 +398,7 @@ gst_ladspa_init (GstLADSPA *ladspa)
|
|||
ladspa->newcaps = FALSE;
|
||||
ladspa->activated = FALSE;
|
||||
ladspa->bufpool = NULL;
|
||||
ladspa->inplace_broken = LADSPA_IS_INPLACE_BROKEN(ladspa->descriptor->Properties);
|
||||
|
||||
if (sinkcount==0 && srccount == 1) {
|
||||
/* get mode (no sink pads) */
|
||||
|
@ -719,7 +720,6 @@ gst_ladspa_loop(GstElement *element)
|
|||
GstBuffer **buffers_in, **buffers_out;
|
||||
GstBufferPool *bufpool;
|
||||
GstByteStream **bytestreams;
|
||||
gboolean inplace_broken;
|
||||
|
||||
GstLADSPA *ladspa = (GstLADSPA *)element;
|
||||
GstLADSPAClass *oclass = (GstLADSPAClass*)(G_OBJECT_GET_CLASS (ladspa));
|
||||
|
@ -799,7 +799,7 @@ gst_ladspa_loop(GstElement *element)
|
|||
/* we now have a full set of buffers_in.
|
||||
* now share or create the buffers_out */
|
||||
for (i=0 ; i<numsrcpads ; i++){
|
||||
if (i <= numsinkpads && !inplace_broken){
|
||||
if (i <= numsinkpads && !ladspa->inplace_broken){
|
||||
/* we can share buffers */
|
||||
buffers_out[i] = buffers_in[i];
|
||||
data_out[i] = data_in[i];
|
||||
|
@ -845,7 +845,7 @@ gst_ladspa_loop(GstElement *element)
|
|||
buffers_out[i] = NULL;
|
||||
}
|
||||
for (i=0 ; i<numsinkpads ; i++) {
|
||||
if (i > numsrcpads || inplace_broken){
|
||||
if (i > numsrcpads || ladspa->inplace_broken){
|
||||
/* we have some buffers to unref */
|
||||
gst_buffer_unref(buffers_in[i]);
|
||||
}
|
||||
|
@ -873,11 +873,10 @@ static void
|
|||
gst_ladspa_chain (GstPad *pad, GstBuffer *buf)
|
||||
{
|
||||
LADSPA_Descriptor *desc;
|
||||
LADSPA_Data *data_in, **data_out;
|
||||
GstBuffer **buffers_out;
|
||||
LADSPA_Data *data_in, **data_out = NULL;
|
||||
GstBuffer **buffers_out = NULL;
|
||||
|
||||
unsigned long num_samples;
|
||||
gboolean inplace_broken;
|
||||
guint num_to_process, num_processed, i, numsrcpads;
|
||||
|
||||
GstLADSPA *ladspa;
|
||||
|
@ -909,13 +908,12 @@ gst_ladspa_chain (GstPad *pad, GstBuffer *buf)
|
|||
|
||||
desc = ladspa->descriptor;
|
||||
|
||||
inplace_broken = LADSPA_IS_INPLACE_BROKEN(desc->Properties);
|
||||
if (numsrcpads > 0){
|
||||
guint num_created_buffers = 0;
|
||||
buffers_out = g_new(GstBuffer*, numsrcpads);
|
||||
data_out = g_new(LADSPA_Data*, numsrcpads);
|
||||
|
||||
if (inplace_broken){
|
||||
if (ladspa->inplace_broken){
|
||||
num_created_buffers = numsrcpads;
|
||||
}
|
||||
else {
|
||||
|
@ -1077,7 +1075,7 @@ ladspa_describe_plugin(const char *pcFullFilename,
|
|||
/* construct the element details struct */
|
||||
details = g_new0(GstElementDetails,1);
|
||||
details->longname = g_strdup(desc->Name);
|
||||
details->klass = "Filter/LADSPA";
|
||||
details->klass = "Filter/Audio/LADSPA";
|
||||
details->description = details->longname;
|
||||
details->version = g_strdup_printf("%ld",desc->UniqueID);
|
||||
details->author = g_strdup(desc->Maker);
|
||||
|
|
|
@ -66,7 +66,7 @@ struct _GstLADSPA {
|
|||
|
||||
gint samplerate, buffersize, numbuffers;
|
||||
gint64 timestamp;
|
||||
|
||||
gboolean inplace_broken;
|
||||
};
|
||||
|
||||
struct _GstLADSPAClass {
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
/* elementfactory information */
|
||||
static GstElementDetails gst_auparse_details = {
|
||||
".au parser",
|
||||
"Parser/Audio",
|
||||
"Codec/Parser",
|
||||
"Parse an .au file into raw audio",
|
||||
VERSION,
|
||||
"Erik Walthinsen <omega@cse.ogi.edu>",
|
||||
|
|
|
@ -2,20 +2,17 @@ plugindir = $(libdir)/gst
|
|||
|
||||
plugin_LTLIBRARIES = \
|
||||
libgstavimux.la \
|
||||
libgstavidemux.la \
|
||||
libgstcdxaparse.la
|
||||
libgstavidemux.la
|
||||
# libgstaviaudiodecoder.la
|
||||
|
||||
libgstavidemux_la_SOURCES = gstavidemux.c
|
||||
libgstavimux_la_SOURCES = gstavimux.c
|
||||
# libgstaviaudiodecoder_la_SOURCES = gstaviaudiodecoder.c
|
||||
libgstcdxaparse_la_SOURCES = gstcdxaparse.c
|
||||
|
||||
noinst_HEADERS = \
|
||||
gstavimux.h \
|
||||
gstavidemux.h \
|
||||
gstaviaudiodecoder.h \
|
||||
gstcdxaparse.h
|
||||
gstaviaudiodecoder.h
|
||||
|
||||
#CFLAGS += -Wall -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions -ffast-math -DNDEBUG
|
||||
|
||||
|
@ -31,8 +28,4 @@ libgstavimux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
|||
# libgstaviaudiodecoder_la_LIBADD =
|
||||
# libgstaviaudiodecoder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
|
||||
libgstcdxaparse_la_CFLAGS = -O2 -ffast-math $(GST_CFLAGS)
|
||||
libgstcdxaparse_la_LIBADD =
|
||||
libgstcdxaparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
|
||||
EXTRA_DIST = README_win32dll README
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
|
||||
/* elementfactory information */
|
||||
static GstElementDetails gst_avi_demux_details = {
|
||||
".avi parser",
|
||||
"Parser/Video",
|
||||
"Parse a .avi file into audio and video",
|
||||
"Avi demuxer",
|
||||
"Codec/Demuxer",
|
||||
"Demultiplex an avi file into audio and video",
|
||||
VERSION,
|
||||
"Erik Walthinsen <omega@cse.ogi.edu>\n"
|
||||
"Wim Taymans <wim.taymans@tvd.be>",
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
static GstElementDetails
|
||||
gst_avimux_details =
|
||||
{
|
||||
".avi mux",
|
||||
"Mux/Video",
|
||||
"Avi multiplexer",
|
||||
"Codec/Muxer",
|
||||
"Muxes audio and video into an avi stream",
|
||||
VERSION,
|
||||
"Ronald Bultje <rbultje@ronald.bitfreak.net>",
|
||||
|
|
|
@ -1,363 +0,0 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* <2002> Wim Taymans <wim.taymans@chello.be>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "gstcdxaparse.h"
|
||||
|
||||
#define MAKE_FOUR_CC(a,b,c,d) ( ((guint32)a) | (((guint32)b)<< 8) | \
|
||||
((guint32)c)<<16 | (((guint32)d)<<24) )
|
||||
|
||||
|
||||
/* RIFF types */
|
||||
#define GST_RIFF_TAG_RIFF MAKE_FOUR_CC('R','I','F','F')
|
||||
#define GST_RIFF_RIFF_CDXA MAKE_FOUR_CC('C','D','X','A')
|
||||
|
||||
|
||||
#define GST_RIFF_TAG_fmt MAKE_FOUR_CC('f','m','t',' ')
|
||||
#define GST_RIFF_TAG_data MAKE_FOUR_CC('d','a','t','a')
|
||||
|
||||
|
||||
/* elementfactory information */
|
||||
static GstElementDetails gst_cdxa_parse_details = {
|
||||
".dat parser",
|
||||
"Parser/Video",
|
||||
"Parse a .dat file (VCD) into raw mpeg1",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@tvd.be>",
|
||||
"(C) 2002",
|
||||
};
|
||||
|
||||
static GstCaps* cdxa_type_find (GstBuffer *buf, gpointer private);
|
||||
|
||||
/* typefactory for 'cdxa' */
|
||||
static GstTypeDefinition cdxadefinition = {
|
||||
"cdxaparse_video/avi",
|
||||
"video/avi",
|
||||
".dat",
|
||||
cdxa_type_find,
|
||||
};
|
||||
|
||||
/* CDXAParse signals and args */
|
||||
enum {
|
||||
/* FILL ME */
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
enum {
|
||||
ARG_0,
|
||||
/* FILL ME */
|
||||
};
|
||||
|
||||
GST_PAD_TEMPLATE_FACTORY (sink_templ,
|
||||
"sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_CAPS_NEW (
|
||||
"cdxaparse_sink",
|
||||
"video/avi",
|
||||
"format", GST_PROPS_STRING ("CDXA")
|
||||
)
|
||||
)
|
||||
|
||||
GST_PAD_TEMPLATE_FACTORY (src_templ,
|
||||
"src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_CAPS_NEW (
|
||||
"cdxaparse_src",
|
||||
"video/mpeg",
|
||||
"mpegversion", GST_PROPS_INT (1),
|
||||
"systemstream", GST_PROPS_BOOLEAN (TRUE)
|
||||
)
|
||||
)
|
||||
|
||||
static void gst_cdxa_parse_class_init (GstCDXAParseClass *klass);
|
||||
static void gst_cdxa_parse_init (GstCDXAParse *cdxa_parse);
|
||||
|
||||
static void gst_cdxa_parse_loop (GstElement *element);
|
||||
|
||||
static GstElementStateReturn
|
||||
gst_cdxa_parse_change_state (GstElement *element);
|
||||
|
||||
|
||||
static GstElementClass *parent_class = NULL;
|
||||
/*static guint gst_cdxa_parse_signals[LAST_SIGNAL] = { 0 }; */
|
||||
|
||||
GType
|
||||
gst_cdxa_parse_get_type(void)
|
||||
{
|
||||
static GType cdxa_parse_type = 0;
|
||||
|
||||
if (!cdxa_parse_type) {
|
||||
static const GTypeInfo cdxa_parse_info = {
|
||||
sizeof(GstCDXAParseClass),
|
||||
NULL,
|
||||
NULL,
|
||||
(GClassInitFunc)gst_cdxa_parse_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof(GstCDXAParse),
|
||||
0,
|
||||
(GInstanceInitFunc)gst_cdxa_parse_init,
|
||||
};
|
||||
cdxa_parse_type = g_type_register_static(GST_TYPE_ELEMENT, "GstCDXAParse", &cdxa_parse_info, 0);
|
||||
}
|
||||
return cdxa_parse_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_cdxa_parse_class_init (GstCDXAParseClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GstElementClass *gstelement_class;
|
||||
|
||||
gobject_class = (GObjectClass*)klass;
|
||||
gstelement_class = (GstElementClass*)klass;
|
||||
|
||||
parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
|
||||
|
||||
gstelement_class->change_state = gst_cdxa_parse_change_state;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_cdxa_parse_init (GstCDXAParse *cdxa_parse)
|
||||
{
|
||||
GST_FLAG_SET (cdxa_parse, GST_ELEMENT_EVENT_AWARE);
|
||||
|
||||
cdxa_parse->sinkpad = gst_pad_new_from_template (
|
||||
GST_PAD_TEMPLATE_GET (sink_templ), "sink");
|
||||
gst_element_add_pad (GST_ELEMENT (cdxa_parse), cdxa_parse->sinkpad);
|
||||
|
||||
cdxa_parse->srcpad = gst_pad_new_from_template (
|
||||
GST_PAD_TEMPLATE_GET (src_templ), "src");
|
||||
gst_element_add_pad (GST_ELEMENT (cdxa_parse), cdxa_parse->srcpad);
|
||||
|
||||
gst_element_set_loop_function (GST_ELEMENT (cdxa_parse), gst_cdxa_parse_loop);
|
||||
|
||||
}
|
||||
|
||||
static GstCaps*
|
||||
cdxa_type_find (GstBuffer *buf,
|
||||
gpointer private)
|
||||
{
|
||||
gchar *data = GST_BUFFER_DATA (buf);
|
||||
GstCaps *new;
|
||||
|
||||
GST_DEBUG (0,"cdxa_parse: typefind");
|
||||
|
||||
if (GUINT32_FROM_LE (((guint32 *)data)[0]) != GST_RIFF_TAG_RIFF)
|
||||
return NULL;
|
||||
if (GUINT32_FROM_LE (((guint32 *)data)[2]) != GST_RIFF_RIFF_CDXA)
|
||||
return NULL;
|
||||
|
||||
new = GST_CAPS_NEW ("cdxa_type_find",
|
||||
"video/avi",
|
||||
"RIFF", GST_PROPS_STRING ("CDXA"));
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_cdxa_parse_handle_event (GstCDXAParse *cdxa_parse)
|
||||
{
|
||||
guint32 remaining;
|
||||
GstEvent *event;
|
||||
GstEventType type;
|
||||
|
||||
gst_bytestream_get_status (cdxa_parse->bs, &remaining, &event);
|
||||
|
||||
type = event? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
|
||||
|
||||
switch (type) {
|
||||
case GST_EVENT_EOS:
|
||||
gst_pad_event_default (cdxa_parse->sinkpad, event);
|
||||
break;
|
||||
case GST_EVENT_SEEK:
|
||||
g_warning ("seek event\n");
|
||||
break;
|
||||
case GST_EVENT_FLUSH:
|
||||
g_warning ("flush event\n");
|
||||
break;
|
||||
case GST_EVENT_DISCONTINUOUS:
|
||||
g_warning ("discont event\n");
|
||||
break;
|
||||
default:
|
||||
g_warning ("unhandled event %d\n", type);
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
CDXA starts with the following header:
|
||||
|
||||
! RIFF:4 ! size:4 ! "CDXA" ! "fmt " ! size:4 ! (size+1)&~1 bytes of crap !
|
||||
! "data" ! data_size:4 ! (data_size/2352) sectors...
|
||||
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gchar RIFF_tag[4];
|
||||
guint32 riff_size;
|
||||
gchar CDXA_tag[4];
|
||||
gchar fmt_tag[4];
|
||||
guint32 fmt_size;
|
||||
} CDXAParseHeader;
|
||||
|
||||
/*
|
||||
A sectors is 2352 bytes long and is composed of:
|
||||
|
||||
! sync ! header ! subheader ! data ... ! edc !
|
||||
! 12 bytes ! 4 bytes ! 8 bytes ! 2324 bytes ! 4 bytes !
|
||||
!-------------------------------------------------------!
|
||||
|
||||
We parse the data out of it and send it to the srcpad.
|
||||
*/
|
||||
|
||||
static void
|
||||
gst_cdxa_parse_loop (GstElement *element)
|
||||
{
|
||||
GstCDXAParse *cdxa_parse;
|
||||
CDXAParseHeader *header;
|
||||
|
||||
g_return_if_fail (element != NULL);
|
||||
g_return_if_fail (GST_IS_CDXA_PARSE (element));
|
||||
|
||||
cdxa_parse = GST_CDXA_PARSE (element);
|
||||
|
||||
if (cdxa_parse->state == CDXA_PARSE_HEADER) {
|
||||
guint32 fmt_size;
|
||||
guint8 *buf;
|
||||
|
||||
header = (CDXAParseHeader *) gst_bytestream_peek_bytes (cdxa_parse->bs, 20);
|
||||
if (!header)
|
||||
return;
|
||||
|
||||
cdxa_parse->riff_size = GUINT32_FROM_LE (header->riff_size);
|
||||
fmt_size = (GUINT32_FROM_LE (header->fmt_size) + 1)&~1;
|
||||
|
||||
/* flush the header + fmt_size bytes + 4 bytes "data" */
|
||||
if (!gst_bytestream_flush (cdxa_parse->bs, 20 + fmt_size + 4))
|
||||
return;
|
||||
|
||||
/* get the data size */
|
||||
buf = gst_bytestream_peek_bytes (cdxa_parse->bs, 4);
|
||||
if (!buf)
|
||||
return;
|
||||
cdxa_parse->data_size = GUINT32_FROM_LE (*((guint32 *)buf));
|
||||
|
||||
/* flush the data size */
|
||||
if (!gst_bytestream_flush (cdxa_parse->bs, 4))
|
||||
return;
|
||||
|
||||
if (cdxa_parse->data_size % CDXA_SECTOR_SIZE)
|
||||
g_warning ("cdxa_parse: size not multiple of %d bytes", CDXA_SECTOR_SIZE);
|
||||
|
||||
cdxa_parse->sectors = cdxa_parse->data_size / CDXA_SECTOR_SIZE;
|
||||
|
||||
cdxa_parse->state = CDXA_PARSE_DATA;
|
||||
}
|
||||
else {
|
||||
GstBuffer *buf;
|
||||
GstBuffer *outbuf;
|
||||
|
||||
buf = gst_bytestream_read (cdxa_parse->bs, CDXA_SECTOR_SIZE);
|
||||
if (!buf) {
|
||||
gst_cdxa_parse_handle_event (cdxa_parse);
|
||||
return;
|
||||
}
|
||||
|
||||
outbuf = gst_buffer_create_sub (buf, 24, CDXA_DATA_SIZE);
|
||||
gst_buffer_unref (buf);
|
||||
|
||||
gst_pad_push (cdxa_parse->srcpad, outbuf);
|
||||
}
|
||||
}
|
||||
|
||||
static GstElementStateReturn
|
||||
gst_cdxa_parse_change_state (GstElement *element)
|
||||
{
|
||||
GstCDXAParse *cdxa_parse = GST_CDXA_PARSE (element);
|
||||
|
||||
switch (GST_STATE_TRANSITION (element)) {
|
||||
case GST_STATE_NULL_TO_READY:
|
||||
break;
|
||||
case GST_STATE_READY_TO_PAUSED:
|
||||
cdxa_parse->state = CDXA_PARSE_HEADER;
|
||||
cdxa_parse->bs = gst_bytestream_new (cdxa_parse->sinkpad);
|
||||
break;
|
||||
case GST_STATE_PAUSED_TO_PLAYING:
|
||||
break;
|
||||
case GST_STATE_PLAYING_TO_PAUSED:
|
||||
break;
|
||||
case GST_STATE_PAUSED_TO_READY:
|
||||
gst_bytestream_destroy (cdxa_parse->bs);
|
||||
break;
|
||||
case GST_STATE_READY_TO_NULL:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
parent_class->change_state (element);
|
||||
|
||||
return GST_STATE_SUCCESS;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
plugin_init (GModule *module, GstPlugin *plugin)
|
||||
{
|
||||
GstElementFactory *factory;
|
||||
GstTypeFactory *type;
|
||||
|
||||
/* this filter needs the riff parser */
|
||||
if (!gst_library_load ("gstbytestream")) {
|
||||
gst_info("cdxaparse: could not load support library: 'gstbytestream'\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* create an elementfactory for the cdxa_parse element */
|
||||
factory = gst_element_factory_new ("cdxaparse", GST_TYPE_CDXA_PARSE,
|
||||
&gst_cdxa_parse_details);
|
||||
g_return_val_if_fail (factory != NULL, FALSE);
|
||||
|
||||
gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (src_templ));
|
||||
gst_element_factory_add_pad_template (factory, GST_PAD_TEMPLATE_GET (sink_templ));
|
||||
|
||||
type = gst_type_factory_new (&cdxadefinition);
|
||||
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type));
|
||||
|
||||
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
GstPluginDesc plugin_desc = {
|
||||
GST_VERSION_MAJOR,
|
||||
GST_VERSION_MINOR,
|
||||
"cdxaparse",
|
||||
plugin_init
|
||||
};
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||
* <2002> Wim Tayans <wim.taymans@chello.be>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __GST_CDXA_PARSE_H__
|
||||
#define __GST_CDXA_PARSE_H__
|
||||
|
||||
#include <config.h>
|
||||
#include <gst/gst.h>
|
||||
#include <gst/bytestream/bytestream.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define GST_TYPE_CDXA_PARSE \
|
||||
(gst_cdxa_parse_get_type())
|
||||
#define GST_CDXA_PARSE(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CDXA_PARSE,GstCDXAParse))
|
||||
#define GST_CDXA_PARSE_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CDXA_PARSE,GstCDXAParse))
|
||||
#define GST_IS_CDXA_PARSE(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CDXA_PARSE))
|
||||
#define GST_IS_CDXA_PARSE_CLASS(obj) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CDXA_PARSE))
|
||||
|
||||
#define CDXA_SECTOR_SIZE 2352
|
||||
#define CDXA_DATA_SIZE 2324
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CDXA_PARSE_HEADER,
|
||||
CDXA_PARSE_DATA,
|
||||
} GstCDXAParseState;
|
||||
|
||||
typedef struct _GstCDXAParse GstCDXAParse;
|
||||
typedef struct _GstCDXAParseClass GstCDXAParseClass;
|
||||
|
||||
struct _GstCDXAParse {
|
||||
GstElement element;
|
||||
|
||||
/* pads */
|
||||
GstPad *sinkpad, *srcpad;
|
||||
|
||||
GstByteStream *bs;
|
||||
|
||||
GstCDXAParseState state;
|
||||
|
||||
guint32 riff_size;
|
||||
guint32 data_size;
|
||||
guint32 sectors;
|
||||
};
|
||||
|
||||
struct _GstCDXAParseClass {
|
||||
GstElementClass parent_class;
|
||||
};
|
||||
|
||||
GType gst_cdxa_parse_get_type (void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __GST_CDXA_PARSE_H__ */
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
static GstElementDetails cutter_details = {
|
||||
"Cutter",
|
||||
"Filter/Effect",
|
||||
"Filter/Audio/Effect",
|
||||
"Audio Cutter to split audio into non-silent bits",
|
||||
VERSION,
|
||||
"Thomas <thomas@apestaart.org>",
|
||||
|
|
|
@ -29,7 +29,7 @@ static GstCaps* flxdec_type_find(GstBuffer *buf, gpointer private);
|
|||
/* flx element information */
|
||||
static GstElementDetails flxdec_details = {
|
||||
"FLX Decoder",
|
||||
"flxdec",
|
||||
"Codec/Audio/Decoder",
|
||||
"FLX decoder",
|
||||
VERSION,
|
||||
"Sepp Wijnands <mrrazz@garbage-coderz.net>"
|
||||
|
|
|
@ -59,7 +59,7 @@ GType gst_goom_get_type(void);
|
|||
/* elementfactory information */
|
||||
static GstElementDetails gst_goom_details = {
|
||||
"GOOM: what a GOOM!",
|
||||
"Filter/Visualization",
|
||||
"Visualization",
|
||||
"Takes frames of data and outputs video frames using the GOOM filter",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
static GstElementDetails alawenc_details = {
|
||||
"PCM to A Law conversion",
|
||||
"Filter/Effect",
|
||||
"Filter/Audio/Conversion",
|
||||
"Convert 16bit PCM to 8bit A law",
|
||||
VERSION,
|
||||
"Zaheer Merali <zaheer@bellworldwide.net>",
|
||||
|
@ -12,7 +12,7 @@ static GstElementDetails alawenc_details = {
|
|||
|
||||
static GstElementDetails alawdec_details = {
|
||||
"A Law to PCM conversion",
|
||||
"Filter/Effect",
|
||||
"Filter/Audio/Conversion",
|
||||
"Convert 8bit A law to 16bit PCM",
|
||||
VERSION,
|
||||
"Zaheer Merali <zaheer@bellworldwide.net>",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
static GstElementDetails mulawenc_details = {
|
||||
"PCM to Mu Law conversion",
|
||||
"Filter/Effect",
|
||||
"Filter/Audio/Conversion",
|
||||
"Convert 16bit PCM to 8bit mu law",
|
||||
VERSION,
|
||||
"Zaheer Merali <zaheer@bellworldwide.net>",
|
||||
|
@ -12,7 +12,7 @@ static GstElementDetails mulawenc_details = {
|
|||
|
||||
static GstElementDetails mulawdec_details = {
|
||||
"Mu Law to PCM conversion",
|
||||
"Filter/Effect",
|
||||
"Filter/Audio/Conversion",
|
||||
"Convert 8bit mu law to 16bit PCM",
|
||||
VERSION,
|
||||
"Zaheer Merali <zaheer@bellworldwide.net>",
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
static GstElementDetails level_details = {
|
||||
"Level",
|
||||
"Filter/Effect",
|
||||
"Filter/Audio/Analysis",
|
||||
"RMS Level indicator for audio/raw",
|
||||
VERSION,
|
||||
"Thomas <thomas@apestaart.org>",
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
|
||||
static GstElementDetails median_details = {
|
||||
"Median effect",
|
||||
"Filter/Effect",
|
||||
"apply a median filter to an image",
|
||||
"Filter/Video",
|
||||
"Apply a median filter to an image",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
"(C) 2000",
|
||||
|
|
|
@ -62,7 +62,7 @@ GType gst_monoscope_get_type(void);
|
|||
/* elementfactory information */
|
||||
static GstElementDetails gst_monoscope_details = {
|
||||
"Monoscope",
|
||||
"Filter/Visualization",
|
||||
"Visualization",
|
||||
"Displays a highly stabilised waveform of audio input",
|
||||
VERSION,
|
||||
"Richard Boulton <richard@tartarus.org>",
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
static GstElementDetails gst_spectrum_details = {
|
||||
"Spectrum analyzer",
|
||||
"Filter/Analysis",
|
||||
"Filter/Audio/Analysis",
|
||||
"Run an FFT on the audio signal, output spectrum data",
|
||||
VERSION,
|
||||
"Erik Walthinsen <omega@cse.ogi.edu>",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
/* elementfactory information */
|
||||
GstElementDetails gst_udpsink_details = {
|
||||
"UDP packet sender",
|
||||
"Transport/",
|
||||
"Sink/Network",
|
||||
"",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
/* elementfactory information */
|
||||
GstElementDetails gst_udpsrc_details = {
|
||||
"UDP packet receiver",
|
||||
"Transport/",
|
||||
"Source/Network",
|
||||
"",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
|
|
|
@ -32,7 +32,7 @@ static void gst_wavparse_chain (GstPad *pad, GstBuffer *buf);
|
|||
/* elementfactory information */
|
||||
static GstElementDetails gst_wavparse_details = {
|
||||
".wav parser",
|
||||
"Parser/Audio",
|
||||
"Codec/Parser",
|
||||
"Parse a .wav file into raw audio",
|
||||
VERSION,
|
||||
"Erik Walthinsen <omega@cse.ogi.edu>",
|
||||
|
|
|
@ -57,12 +57,12 @@ AC_ARG_WITH(mpeg2dec-prefix,
|
|||
|
||||
if test x$mpeg2dec_config_prefix = x ; then
|
||||
MPEG2DEC_CHECK_LIBHEADER(MPEG2DEC, mpeg2, mpeg2_init, mpeg2dec/mpeg2.h,
|
||||
MPEG2DEC_LIBS="-lmpeg2 -lcpuaccel")
|
||||
MPEG2DEC_LIBS="-lmpeg2 -lcpuaccel",, -lcpuaccel)
|
||||
else
|
||||
MPEG2DEC_CHECK_LIBHEADER(MPEG2DEC, mpeg2, mpeg2_init, mpeg2dec/mpeg2.h, [
|
||||
MPEG2DEC_LIBS="-lmpeg2 -lcpuaccel -L$mpeg2dec_config_prefix/lib"
|
||||
MPEG2DEC_CFLAGS="-I$mpeg2dec_config_prefix/include"
|
||||
], , -L$mpeg2dec_config_prefix/lib, -I$mpeg2dec_config_prefix/include)
|
||||
], , -L$mpeg2dec_config_prefix/lib -lcpuaccel, -I$mpeg2dec_config_prefix/include)
|
||||
fi
|
||||
|
||||
if test "x$HAVE_MPEG2DEC" = "xyes"; then
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
static GstElementDetails gst_ossgst_details = {
|
||||
"Audio Wrapper (OSS)",
|
||||
"Src/Audio",
|
||||
"Source/Audio",
|
||||
"Hijacks /dev/dsp to get the output of OSS apps into GStreamer",
|
||||
VERSION,
|
||||
"Wim Taymans <wim.taymans@chello.be>",
|
||||
|
|
Loading…
Reference in a new issue