mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 20:42:30 +00:00
removal of //-style comments don't link plugins to core libs -- the versioning is done internally to the plugins with...
Original commit message from CVS: * removal of //-style comments * don't link plugins to core libs -- the versioning is done internally to the plugins with the plugin_info struct, and symbol resolution is lazy, so we can always know if a plugin can be loaded by the plugin_info data. in theory.
This commit is contained in:
parent
29ea57179f
commit
f6c63f0d8e
36 changed files with 690 additions and 690 deletions
|
@ -10,7 +10,7 @@ BUILT_SOURCES = \
|
||||||
|
|
||||||
libgstidentity2_la_SOURCES = gst-identity2.gob $(GOB_FILES_ID)
|
libgstidentity2_la_SOURCES = gst-identity2.gob $(GOB_FILES_ID)
|
||||||
libgstidentity2_la_CFLAGS = $(GST_CFLAGS)
|
libgstidentity2_la_CFLAGS = $(GST_CFLAGS)
|
||||||
libgstidentity2_la_LIBADD = $(GST_LIBS)
|
libgstidentity2_la_LIBADD =
|
||||||
|
|
||||||
%.c %.h %-private.h: %.gob
|
%.c %.h %-private.h: %.gob
|
||||||
gob $<
|
gob $<
|
||||||
|
|
|
@ -10,7 +10,7 @@ endif
|
||||||
|
|
||||||
libgsta52dec_la_SOURCES = gsta52dec.c
|
libgsta52dec_la_SOURCES = gsta52dec.c
|
||||||
libgsta52dec_la_CFLAGS = $(GST_CFLAGS) -O3 $(ARCHFLAGS) $(FOMIT_FRAME_POINTER)
|
libgsta52dec_la_CFLAGS = $(GST_CFLAGS) -O3 $(ARCHFLAGS) $(FOMIT_FRAME_POINTER)
|
||||||
libgsta52dec_la_LIBADD = $(GST_LIBS) -la52 -lm
|
libgsta52dec_la_LIBADD = -la52 -lm
|
||||||
libgsta52dec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgsta52dec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
noinst_HEADERS = gsta52dec.h
|
noinst_HEADERS = gsta52dec.h
|
||||||
|
|
|
@ -7,7 +7,7 @@ plugin_LTLIBRARIES = libgstdvdsrc.la
|
||||||
|
|
||||||
libgstdvdsrc_la_SOURCES = dvdsrc.c
|
libgstdvdsrc_la_SOURCES = dvdsrc.c
|
||||||
libgstdvdsrc_la_CFLAGS = $(GST_CFLAGS)
|
libgstdvdsrc_la_CFLAGS = $(GST_CFLAGS)
|
||||||
libgstdvdsrc_la_LIBADD = $(GST_LIBS) $(DVDREAD_LIBS)
|
libgstdvdsrc_la_LIBADD = $(DVDREAD_LIBS)
|
||||||
libgstdvdsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstdvdsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
noinst_HEADERS = dvdsrc.h
|
noinst_HEADERS = dvdsrc.h
|
||||||
|
|
|
@ -49,7 +49,7 @@ int main(int argc,char *argv[]) {
|
||||||
gst_init(&argc,&argv);
|
gst_init(&argc,&argv);
|
||||||
gnome_init("MPEG2 Video player","0.0.1",argc,argv);
|
gnome_init("MPEG2 Video player","0.0.1",argc,argv);
|
||||||
|
|
||||||
// ***** construct the main pipeline *****
|
/* ***** construct the main pipeline ***** */
|
||||||
pipeline = GST_PIPELINE(gst_pipeline_new("pipeline"));
|
pipeline = GST_PIPELINE(gst_pipeline_new("pipeline"));
|
||||||
g_return_val_if_fail(pipeline != NULL, -1);
|
g_return_val_if_fail(pipeline != NULL, -1);
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ int main(int argc,char *argv[]) {
|
||||||
gtk_object_set(GTK_OBJECT(src),"angle",atoi(argv[4]),NULL);
|
gtk_object_set(GTK_OBJECT(src),"angle",atoi(argv[4]),NULL);
|
||||||
|
|
||||||
parse = gst_elementfactory_make("mpeg2parse","parse");
|
parse = gst_elementfactory_make("mpeg2parse","parse");
|
||||||
//parse = gst_elementfactory_make("mpeg1parse","parse");
|
/*parse = gst_elementfactory_make("mpeg1parse","parse"); */
|
||||||
g_return_val_if_fail(parse != NULL, -1);
|
g_return_val_if_fail(parse != NULL, -1);
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
|
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
|
||||||
|
@ -70,7 +70,7 @@ int main(int argc,char *argv[]) {
|
||||||
gst_element_connect(src,"src",parse,"sink");
|
gst_element_connect(src,"src",parse,"sink");
|
||||||
|
|
||||||
|
|
||||||
// ***** pre-construct the video thread *****
|
/* ***** pre-construct the video thread ***** */
|
||||||
v_thread = GST_ELEMENT(gst_thread_new("v_thread"));
|
v_thread = GST_ELEMENT(gst_thread_new("v_thread"));
|
||||||
g_return_val_if_fail(v_thread != NULL, -1);
|
g_return_val_if_fail(v_thread != NULL, -1);
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ int main(int argc,char *argv[]) {
|
||||||
gst_element_connect(color,"src",show,"sink");
|
gst_element_connect(color,"src",show,"sink");
|
||||||
|
|
||||||
|
|
||||||
// ***** pre-construct the audio thread *****
|
/* ***** pre-construct the audio thread ***** */
|
||||||
a_thread = GST_ELEMENT(gst_thread_new("a_thread"));
|
a_thread = GST_ELEMENT(gst_thread_new("a_thread"));
|
||||||
g_return_val_if_fail(a_thread != NULL, -1);
|
g_return_val_if_fail(a_thread != NULL, -1);
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ int main(int argc,char *argv[]) {
|
||||||
gst_element_connect(a_decode,"src",osssink,"sink");
|
gst_element_connect(a_decode,"src",osssink,"sink");
|
||||||
|
|
||||||
|
|
||||||
// ***** construct the GUI *****
|
/* ***** construct the GUI ***** */
|
||||||
appwindow = gnome_app_new("DVD Player","DVD Player");
|
appwindow = gnome_app_new("DVD Player","DVD Player");
|
||||||
|
|
||||||
gtk_socket = gtk_socket_new ();
|
gtk_socket = gtk_socket_new ();
|
||||||
|
|
|
@ -114,15 +114,15 @@ static void dvdsrc_init (DVDSrc *dvdsrc);
|
||||||
static void dvdsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
|
static void dvdsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
|
||||||
static void dvdsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
|
static void dvdsrc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
|
||||||
|
|
||||||
//static GstBuffer * dvdsrc_get (GstPad *pad);
|
/*static GstBuffer * dvdsrc_get (GstPad *pad); */
|
||||||
static void dvdsrc_loop (GstElement *element);
|
static void dvdsrc_loop (GstElement *element);
|
||||||
//static GstBuffer * dvdsrc_get_region (GstPad *pad,gulong offset,gulong size);
|
/*static GstBuffer * dvdsrc_get_region (GstPad *pad,gulong offset,gulong size); */
|
||||||
|
|
||||||
static GstElementStateReturn dvdsrc_change_state (GstElement *element);
|
static GstElementStateReturn dvdsrc_change_state (GstElement *element);
|
||||||
|
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
//static guint dvdsrc_signals[LAST_SIGNAL] = { 0 };
|
/*static guint dvdsrc_signals[LAST_SIGNAL] = { 0 }; */
|
||||||
|
|
||||||
GType
|
GType
|
||||||
dvdsrc_get_type (void)
|
dvdsrc_get_type (void)
|
||||||
|
@ -193,7 +193,7 @@ dvdsrc_init (DVDSrc *dvdsrc)
|
||||||
static void
|
static void
|
||||||
dvdsrc_destory (DVDSrc *dvdsrc)
|
dvdsrc_destory (DVDSrc *dvdsrc)
|
||||||
{
|
{
|
||||||
// FIXME
|
/* FIXME */
|
||||||
g_print("FIXME\n");
|
g_print("FIXME\n");
|
||||||
g_free(dvdsrc->priv);
|
g_free(dvdsrc->priv);
|
||||||
}
|
}
|
||||||
|
@ -213,7 +213,7 @@ dvdsrc_set_property (GObject *object, guint prop_id, const GValue *value, GParam
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case ARG_LOCATION:
|
case ARG_LOCATION:
|
||||||
/* the element must be stopped in order to do this */
|
/* the element must be stopped in order to do this */
|
||||||
//g_return_if_fail(!GST_FLAG_IS_SET(src,GST_STATE_RUNNING));
|
/*g_return_if_fail(!GST_FLAG_IS_SET(src,GST_STATE_RUNNING)); */
|
||||||
|
|
||||||
if (priv->location)
|
if (priv->location)
|
||||||
g_free (priv->location);
|
g_free (priv->location);
|
||||||
|
@ -462,7 +462,7 @@ dvdsrc_loop (GstElement *element)
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
/* create the buffer */
|
/* create the buffer */
|
||||||
// FIXME: should eventually use a bufferpool for this
|
/* FIXME: should eventually use a bufferpool for this */
|
||||||
buf = gst_buffer_new ();
|
buf = gst_buffer_new ();
|
||||||
g_return_if_fail (buf);
|
g_return_if_fail (buf);
|
||||||
|
|
||||||
|
@ -490,7 +490,7 @@ dvdsrc_loop (GstElement *element)
|
||||||
*/
|
*/
|
||||||
navRead_DSI( &dsi_pack, &(data[ DSI_START_BYTE ]) );
|
navRead_DSI( &dsi_pack, &(data[ DSI_START_BYTE ]) );
|
||||||
assert( priv->cur_pack == dsi_pack.dsi_gi.nv_pck_lbn );
|
assert( priv->cur_pack == dsi_pack.dsi_gi.nv_pck_lbn );
|
||||||
//navPrint_DSI(&dsi_pack);
|
/*navPrint_DSI(&dsi_pack); */
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -679,7 +679,7 @@ dvdsrc_get (GstPad *pad)
|
||||||
g_return_val_if_fail (GST_FLAG_IS_SET (dvdsrc, DVDSRC_OPEN),NULL);
|
g_return_val_if_fail (GST_FLAG_IS_SET (dvdsrc, DVDSRC_OPEN),NULL);
|
||||||
|
|
||||||
/* create the buffer */
|
/* create the buffer */
|
||||||
// FIXME: should eventually use a bufferpool for this
|
/* FIXME: should eventually use a bufferpool for this */
|
||||||
buf = gst_buffer_new ();
|
buf = gst_buffer_new ();
|
||||||
g_return_val_if_fail (buf, NULL);
|
g_return_val_if_fail (buf, NULL);
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ GstElementDetails dvdsrc_details;
|
||||||
#define GST_IS_DVDSRC_CLASS(obj) \
|
#define GST_IS_DVDSRC_CLASS(obj) \
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVDSRC))
|
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVDSRC))
|
||||||
|
|
||||||
// NOTE: per-element flags start with 16 for now
|
/* NOTE: per-element flags start with 16 for now */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DVDSRC_OPEN = GST_ELEMENT_FLAG_LAST,
|
DVDSRC_OPEN = GST_ELEMENT_FLAG_LAST,
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ plugin_LTLIBRARIES = libgstlame.la
|
||||||
|
|
||||||
libgstlame_la_SOURCES = gstlame.c
|
libgstlame_la_SOURCES = gstlame.c
|
||||||
libgstlame_la_CFLAGS = $(GST_CFLAGS)
|
libgstlame_la_CFLAGS = $(GST_CFLAGS)
|
||||||
libgstlame_la_LIBADD = $(GST_LIBS) $(LAME_LIBS)
|
libgstlame_la_LIBADD = $(LAME_LIBS)
|
||||||
libgstlame_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstlame_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
noinst_HEADERS = gstlame.h
|
noinst_HEADERS = gstlame.h
|
||||||
|
|
|
@ -177,7 +177,7 @@ enum {
|
||||||
ARG_ATH_ONLY,
|
ARG_ATH_ONLY,
|
||||||
ARG_ATH_SHORT,
|
ARG_ATH_SHORT,
|
||||||
ARG_NO_ATH,
|
ARG_NO_ATH,
|
||||||
/* ARG_ATH_TYPE, // note: CVS has this, 3.87 doesn't */
|
/* ARG_ATH_TYPE, /* note: CVS has this, 3.87 doesn't */ */
|
||||||
ARG_ATH_LOWER,
|
ARG_ATH_LOWER,
|
||||||
ARG_CWLIMIT,
|
ARG_CWLIMIT,
|
||||||
ARG_ALLOW_DIFF_SHORT,
|
ARG_ALLOW_DIFF_SHORT,
|
||||||
|
@ -235,7 +235,7 @@ gst_lame_class_init (GstLameClass *klass)
|
||||||
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BITRATE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BITRATE,
|
||||||
g_param_spec_int("bitrate","bitrate","bitrate",
|
g_param_spec_int("bitrate","bitrate","bitrate",
|
||||||
G_MININT,G_MAXINT,128,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,128,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQUENCY,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQUENCY,
|
||||||
g_param_spec_int("frequency","frequency","frequency",
|
g_param_spec_int("frequency","frequency","frequency",
|
||||||
0,G_MAXINT, 44100 ,G_PARAM_READABLE));
|
0,G_MAXINT, 44100 ,G_PARAM_READABLE));
|
||||||
|
@ -244,93 +244,93 @@ gst_lame_class_init (GstLameClass *klass)
|
||||||
0, 2, 2 ,G_PARAM_READABLE));
|
0, 2, 2 ,G_PARAM_READABLE));
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_COMPRESSION_RATIO,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_COMPRESSION_RATIO,
|
||||||
g_param_spec_float("compression_ratio","compression_ratio","compression_ratio",
|
g_param_spec_float("compression_ratio","compression_ratio","compression_ratio",
|
||||||
0.0,200.0,11.0,G_PARAM_READWRITE)); // CHECKME
|
0.0,200.0,11.0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_QUALITY,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_QUALITY,
|
||||||
g_param_spec_enum("quality","quality","quality",
|
g_param_spec_enum("quality","quality","quality",
|
||||||
GST_TYPE_LAME_QUALITY,5,G_PARAM_READWRITE)); // CHECKME!
|
GST_TYPE_LAME_QUALITY,5,G_PARAM_READWRITE)); /* CHECKME! */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MODE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MODE,
|
||||||
g_param_spec_enum("mode","mode","mode",
|
g_param_spec_enum("mode","mode","mode",
|
||||||
GST_TYPE_LAME_MODE,0,G_PARAM_READWRITE)); // CHECKME!
|
GST_TYPE_LAME_MODE,0,G_PARAM_READWRITE)); /* CHECKME! */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FORCE_MS,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FORCE_MS,
|
||||||
g_param_spec_boolean("force_ms","force_ms","force_ms",
|
g_param_spec_boolean("force_ms","force_ms","force_ms",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREE_FORMAT,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREE_FORMAT,
|
||||||
g_param_spec_boolean("free_format","free_format","free_format",
|
g_param_spec_boolean("free_format","free_format","free_format",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_COPYRIGHT,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_COPYRIGHT,
|
||||||
g_param_spec_boolean("copyright","copyright","copyright",
|
g_param_spec_boolean("copyright","copyright","copyright",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ORIGINAL,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ORIGINAL,
|
||||||
g_param_spec_boolean("original","original","original",
|
g_param_spec_boolean("original","original","original",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ERROR_PROTECTION,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ERROR_PROTECTION,
|
||||||
g_param_spec_boolean("error_protection","error_protection","error_protection",
|
g_param_spec_boolean("error_protection","error_protection","error_protection",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_PADDING_TYPE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_PADDING_TYPE,
|
||||||
g_param_spec_enum("padding_type","padding_type","padding_type",
|
g_param_spec_enum("padding_type","padding_type","padding_type",
|
||||||
GST_TYPE_LAME_PADDING,0,G_PARAM_READWRITE)); // CHECKME!
|
GST_TYPE_LAME_PADDING,0,G_PARAM_READWRITE)); /* CHECKME! */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_EXTENSION,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_EXTENSION,
|
||||||
g_param_spec_boolean("extension","extension","extension",
|
g_param_spec_boolean("extension","extension","extension",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_STRICT_ISO,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_STRICT_ISO,
|
||||||
g_param_spec_boolean("strict_iso","strict_iso","strict_iso",
|
g_param_spec_boolean("strict_iso","strict_iso","strict_iso",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_DISABLE_RESERVOIR,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_DISABLE_RESERVOIR,
|
||||||
g_param_spec_boolean("disable_reservoir","disable_reservoir","disable_reservoir",
|
g_param_spec_boolean("disable_reservoir","disable_reservoir","disable_reservoir",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR,
|
||||||
g_param_spec_boolean("vbr","vbr","vbr",
|
g_param_spec_boolean("vbr","vbr","vbr",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_MEAN_BITRATE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_MEAN_BITRATE,
|
||||||
g_param_spec_int("vbr_mean_bitrate","vbr_mean_bitrate","vbr_mean_bitrate",
|
g_param_spec_int("vbr_mean_bitrate","vbr_mean_bitrate","vbr_mean_bitrate",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_MIN_BITRATE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_MIN_BITRATE,
|
||||||
g_param_spec_int("vbr_min_bitrate","vbr_min_bitrate","vbr_min_bitrate",
|
g_param_spec_int("vbr_min_bitrate","vbr_min_bitrate","vbr_min_bitrate",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_MAX_BITRATE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_MAX_BITRATE,
|
||||||
g_param_spec_int("vbr_max_bitrate","vbr_max_bitrate","vbr_max_bitrate",
|
g_param_spec_int("vbr_max_bitrate","vbr_max_bitrate","vbr_max_bitrate",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_HARD_MIN,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VBR_HARD_MIN,
|
||||||
g_param_spec_int("vbr_hard_min","vbr_hard_min","vbr_hard_min",
|
g_param_spec_int("vbr_hard_min","vbr_hard_min","vbr_hard_min",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOWPASS_FREQ,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOWPASS_FREQ,
|
||||||
g_param_spec_int("lowpass_freq","lowpass_freq","lowpass_freq",
|
g_param_spec_int("lowpass_freq","lowpass_freq","lowpass_freq",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOWPASS_WIDTH,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LOWPASS_WIDTH,
|
||||||
g_param_spec_int("lowpass_width","lowpass_width","lowpass_width",
|
g_param_spec_int("lowpass_width","lowpass_width","lowpass_width",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HIGHPASS_FREQ,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HIGHPASS_FREQ,
|
||||||
g_param_spec_int("highpass_freq","highpass_freq","highpass_freq",
|
g_param_spec_int("highpass_freq","highpass_freq","highpass_freq",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HIGHPASS_WIDTH,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HIGHPASS_WIDTH,
|
||||||
g_param_spec_int("highpass_width","highpass_width","highpass_width",
|
g_param_spec_int("highpass_width","highpass_width","highpass_width",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ATH_ONLY,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ATH_ONLY,
|
||||||
g_param_spec_boolean("ath_only","ath_only","ath_only",
|
g_param_spec_boolean("ath_only","ath_only","ath_only",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ATH_SHORT,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ATH_SHORT,
|
||||||
g_param_spec_boolean("ath_short","ath_short","ath_short",
|
g_param_spec_boolean("ath_short","ath_short","ath_short",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NO_ATH,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NO_ATH,
|
||||||
g_param_spec_boolean("no_ath","no_ath","no_ath",
|
g_param_spec_boolean("no_ath","no_ath","no_ath",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
/* gtk_object_add_arg_type ("GstLame::ath_type", G_TYPE_INT,
|
/* gtk_object_add_arg_type ("GstLame::ath_type", G_TYPE_INT,
|
||||||
GTK_ARG_READWRITE, ARG_ATH_TYPE); */
|
GTK_ARG_READWRITE, ARG_ATH_TYPE); */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ATH_LOWER,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ATH_LOWER,
|
||||||
g_param_spec_int("ath_lower","ath_lower","ath_lower",
|
g_param_spec_int("ath_lower","ath_lower","ath_lower",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CWLIMIT,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CWLIMIT,
|
||||||
g_param_spec_int("cwlimit","cwlimit","cwlimit",
|
g_param_spec_int("cwlimit","cwlimit","cwlimit",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ALLOW_DIFF_SHORT,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_ALLOW_DIFF_SHORT,
|
||||||
g_param_spec_boolean("allow_diff_short","allow_diff_short","allow_diff_short",
|
g_param_spec_boolean("allow_diff_short","allow_diff_short","allow_diff_short",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NO_SHORT_BLOCKS,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_NO_SHORT_BLOCKS,
|
||||||
g_param_spec_boolean("no_short_blocks","no_short_blocks","no_short_blocks",
|
g_param_spec_boolean("no_short_blocks","no_short_blocks","no_short_blocks",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_EMPHASIS,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_EMPHASIS,
|
||||||
g_param_spec_boolean("emphasis","emphasis","emphasis",
|
g_param_spec_boolean("emphasis","emphasis","emphasis",
|
||||||
TRUE,G_PARAM_READWRITE)); // CHECKME
|
TRUE,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
|
|
||||||
gobject_class->set_property = gst_lame_set_property;
|
gobject_class->set_property = gst_lame_set_property;
|
||||||
gobject_class->get_property = gst_lame_get_property;
|
gobject_class->get_property = gst_lame_get_property;
|
||||||
|
|
|
@ -4,6 +4,6 @@ plugin_LTLIBRARIES = libgstmad.la
|
||||||
|
|
||||||
libgstmad_la_SOURCES = gstmad.c
|
libgstmad_la_SOURCES = gstmad.c
|
||||||
libgstmad_la_CFLAGS = $(GST_CFLAGS)
|
libgstmad_la_CFLAGS = $(GST_CFLAGS)
|
||||||
libgstmad_la_LIBADD = $(GST_LIBS) $(MAD_LIBS)
|
libgstmad_la_LIBADD = $(MAD_LIBS)
|
||||||
libgstmad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstmad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,13 @@ endif
|
||||||
|
|
||||||
libgstmpeg2dec_la_SOURCES = gstmpeg2dec.c
|
libgstmpeg2dec_la_SOURCES = gstmpeg2dec.c
|
||||||
libgstmpeg2dec_la_CFLAGS = $(GST_CFLAGS) $(MPEG2DEC_CFLAGS) $(ARCHFLAGS) $(FOMIT_FRAME_POINTER) -ffast-math
|
libgstmpeg2dec_la_CFLAGS = $(GST_CFLAGS) $(MPEG2DEC_CFLAGS) $(ARCHFLAGS) $(FOMIT_FRAME_POINTER) -ffast-math
|
||||||
libgstmpeg2dec_la_LIBADD = $(GST_LIBS) $(MPEG2DEC_LIBS)
|
libgstmpeg2dec_la_LIBADD = $(MPEG2DEC_LIBS)
|
||||||
libgstmpeg2dec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstmpeg2dec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use the following if you use mpeg2dec from CVS
|
# Use the following if you use mpeg2dec from CVS
|
||||||
#
|
#
|
||||||
#libgstmpeg2dec_la_LIBADD = $(GST_LIBS) -lmpeg2 -lcpuaccel
|
#libgstmpeg2dec_la_LIBADD = -lmpeg2 -lcpuaccel
|
||||||
|
|
||||||
noinst_HEADERS = gstmpeg2dec.h
|
noinst_HEADERS = gstmpeg2dec.h
|
||||||
|
|
||||||
|
|
|
@ -552,7 +552,7 @@ gst_mpeg2dec_change_state (GstElement *element)
|
||||||
/* if we are not closed by an EOS event do so now, this cen send a few frames but
|
/* if we are not closed by an EOS event do so now, this cen send a few frames but
|
||||||
* we are prepared to not really send them (see above) */
|
* we are prepared to not really send them (see above) */
|
||||||
if (!mpeg2dec->closed) {
|
if (!mpeg2dec->closed) {
|
||||||
//mpeg2_close (mpeg2dec->decoder);
|
/*mpeg2_close (mpeg2dec->decoder); */
|
||||||
mpeg2dec->closed = TRUE;
|
mpeg2dec->closed = TRUE;
|
||||||
}
|
}
|
||||||
gst_mpeg2dec_vo_destroy (mpeg2dec);
|
gst_mpeg2dec_vo_destroy (mpeg2dec);
|
||||||
|
|
|
@ -4,7 +4,7 @@ plugin_LTLIBRARIES = libgstsid.la
|
||||||
|
|
||||||
libgstsid_la_SOURCES = gstsiddec.cc
|
libgstsid_la_SOURCES = gstsiddec.cc
|
||||||
libgstsid_la_CXXFLAGS = $(GST_CFLAGS) $(SIDPLAY_CFLAGS)
|
libgstsid_la_CXXFLAGS = $(GST_CFLAGS) $(SIDPLAY_CFLAGS)
|
||||||
libgstsid_la_LIBADD = $(GST_LIBS) $(SIDPLAY_LIBS)
|
libgstsid_la_LIBADD = $(SIDPLAY_LIBS)
|
||||||
libgstsid_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstsid_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
noinst_HEADERS = gstsiddec.h
|
noinst_HEADERS = gstsiddec.h
|
||||||
|
|
|
@ -7,6 +7,6 @@ libgstaudio_la_SOURCES = audio.c
|
||||||
libgstaudioincludedir = $(includedir)/gst/audio
|
libgstaudioincludedir = $(includedir)/gst/audio
|
||||||
libgstaudioinclude_HEADERS = audio.h
|
libgstaudioinclude_HEADERS = audio.h
|
||||||
|
|
||||||
libgstaudio_la_LIBADD = $(GST_LIBS)
|
libgstaudio_la_LIBADD =
|
||||||
libgstaudio_la_CFLAGS = $(GST_CFLAGS) -finline-functions -ffast-math
|
libgstaudio_la_CFLAGS = $(GST_CFLAGS) -finline-functions -ffast-math
|
||||||
libgstaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
|
@ -131,7 +131,7 @@ gst_audio_highest_sample_value (GstPad* pad)
|
||||||
GstCaps *caps = NULL;
|
GstCaps *caps = NULL;
|
||||||
|
|
||||||
caps = GST_PAD_CAPS (pad);
|
caps = GST_PAD_CAPS (pad);
|
||||||
// FIXME : Please change this to a better warning method !
|
/* FIXME : Please change this to a better warning method ! */
|
||||||
if (caps == NULL)
|
if (caps == NULL)
|
||||||
printf ("WARNING: gstaudio: could not get caps of pad !\n");
|
printf ("WARNING: gstaudio: could not get caps of pad !\n");
|
||||||
width = gst_caps_get_int (caps, "width");
|
width = gst_caps_get_int (caps, "width");
|
||||||
|
|
|
@ -27,6 +27,6 @@ ieeetest_LDFLAGS = $(GST_LIBS)
|
||||||
|
|
||||||
noinst_HEADERS = dct.h
|
noinst_HEADERS = dct.h
|
||||||
|
|
||||||
libgstidct_la_LIBADD = $(GST_LIBS)
|
libgstidct_la_LIBADD =
|
||||||
libgstidct_la_CFLAGS = $(GST_CFLAGS) -finline-functions -ffast-math
|
libgstidct_la_CFLAGS = $(GST_CFLAGS) -finline-functions -ffast-math
|
||||||
libgstidct_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstidct_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
|
@ -117,7 +117,7 @@ main(int argc, char **argv)
|
||||||
gst_trace_read_tsc(&tscstart);
|
gst_trace_read_tsc(&tscstart);
|
||||||
gst_idct_convert(idct, testout);
|
gst_idct_convert(idct, testout);
|
||||||
gst_trace_read_tsc(&tscstop);
|
gst_trace_read_tsc(&tscstop);
|
||||||
//printf("time %llu, %llu %lld\n", tscstart, tscstop, tscstop-tscstart);
|
/*printf("time %llu, %llu %lld\n", tscstart, tscstop, tscstop-tscstart); */
|
||||||
if (tscstop - tscstart < tscmin) tscmin = tscstop-tscstart;
|
if (tscstop - tscstart < tscmin) tscmin = tscstop-tscstart;
|
||||||
if (tscstop - tscstart > tscmax) tscmax = tscstop-tscstart;
|
if (tscstop - tscstart > tscmax) tscmax = tscstop-tscstart;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -13,7 +13,7 @@ endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libgstresample_la_SOURCES = dtos.c functable.c resample.c resample.h
|
libgstresample_la_SOURCES = dtos.c functable.c resample.c resample.h
|
||||||
libgstresample_la_LIBADD = $(GST_LIBS)
|
libgstresample_la_LIBADD =
|
||||||
libgstresample_la_CFLAGS = $(GST_CFLAGS) -ffast-math $(ARCHCFLAGS)
|
libgstresample_la_CFLAGS = $(GST_CFLAGS) -ffast-math $(ARCHCFLAGS)
|
||||||
libgstresample_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstresample_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -23,13 +23,13 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
//#include <ml.h>
|
/*#include <ml.h> */
|
||||||
#include <resample.h>
|
#include <resample.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define short_to_double_table
|
#define short_to_double_table
|
||||||
//#define short_to_double_altivec
|
/*#define short_to_double_altivec */
|
||||||
#define short_to_double_unroll
|
#define short_to_double_unroll
|
||||||
|
|
||||||
#ifdef short_to_double_table
|
#ifdef short_to_double_table
|
||||||
|
|
|
@ -124,12 +124,12 @@ double functable_eval(functable_t *t,double x)
|
||||||
w0 = (x - 2 * x2 + x3) * t->offset;
|
w0 = (x - 2 * x2 + x3) * t->offset;
|
||||||
w1 = (-x2 + x3) * t->offset;
|
w1 = (-x2 + x3) * t->offset;
|
||||||
|
|
||||||
//printf("i=%d x=%g f0=%g f1=%g w0=%g w1=%g\n",i,x,f0,f1,w0,w1);
|
/*printf("i=%d x=%g f0=%g f1=%g w0=%g w1=%g\n",i,x,f0,f1,w0,w1); */
|
||||||
|
|
||||||
w = t->fx[i] * f0 + t->fx[i + 1] * f1 +
|
w = t->fx[i] * f0 + t->fx[i + 1] * f1 +
|
||||||
t->fdx[i] * w0 + t->fdx[i + 1] * w1;
|
t->fdx[i] * w0 + t->fdx[i + 1] * w1;
|
||||||
|
|
||||||
//w = t->fx[i] * (1-x) + t->fx[i+1] * x;
|
/*w = t->fx[i] * (1-x) + t->fx[i+1] * x; */
|
||||||
|
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
@ -266,37 +266,37 @@ void functable_fir2_altivec(functable_t *t, float *r0, float *r1,
|
||||||
sum0 = 0;
|
sum0 = 0;
|
||||||
sum1 = 0;
|
sum1 = 0;
|
||||||
for(j=0;j<len;j++){
|
for(j=0;j<len;j++){
|
||||||
// t->fx, t->fdx needs to be multiplexed by n
|
/* t->fx, t->fdx needs to be multiplexed by n */
|
||||||
// we need 5 consecutive floats, which fit into 2 vecs
|
/* we need 5 consecutive floats, which fit into 2 vecs */
|
||||||
// load v0, t->fx[i]
|
/* load v0, t->fx[i] */
|
||||||
// load v1, t->fx[i+n]
|
/* load v1, t->fx[i+n] */
|
||||||
// v2 = v0 (not correct)
|
/* v2 = v0 (not correct) */
|
||||||
// v3 = (v0>>32) || (v1<<3*32) (not correct)
|
/* v3 = (v0>>32) || (v1<<3*32) (not correct) */
|
||||||
//
|
/* */
|
||||||
// load v4, t->dfx[i]
|
/* load v4, t->dfx[i] */
|
||||||
// load v5, t->dfx[i+n]
|
/* load v5, t->dfx[i+n] */
|
||||||
// v6 = v4 (not correct)
|
/* v6 = v4 (not correct) */
|
||||||
// v7 = (v4>>32) || (v5<<3*32) (not correct)
|
/* v7 = (v4>>32) || (v5<<3*32) (not correct) */
|
||||||
//
|
/* */
|
||||||
// v8 = splat(f0)
|
/* v8 = splat(f0) */
|
||||||
// v9 = splat(f1)
|
/* v9 = splat(f1) */
|
||||||
// v10 = splat(w0)
|
/* v10 = splat(w0) */
|
||||||
// v11 = splat(w1)
|
/* v11 = splat(w1) */
|
||||||
//
|
/* */
|
||||||
// v12 = v2 * v8
|
/* v12 = v2 * v8 */
|
||||||
// v12 += v3 * v9
|
/* v12 += v3 * v9 */
|
||||||
// v12 += v6 * v10
|
/* v12 += v6 * v10 */
|
||||||
// v12 += v7 * v11
|
/* v12 += v7 * v11 */
|
||||||
|
|
||||||
w = t->fx[i] * f0 + t->fx[i + 1] * f1 +
|
w = t->fx[i] * f0 + t->fx[i + 1] * f1 +
|
||||||
t->fdx[i] * w0 + t->fdx[i + 1] * w1;
|
t->fdx[i] * w0 + t->fdx[i + 1] * w1;
|
||||||
|
|
||||||
// v13 = data[j*2]
|
/* v13 = data[j*2] */
|
||||||
// v14 = data[j*2+4]
|
/* v14 = data[j*2+4] */
|
||||||
// v15 = deinterlace_high(v13,v14)
|
/* v15 = deinterlace_high(v13,v14) */
|
||||||
// v16 = deinterlace_low(v13,v14)
|
/* v16 = deinterlace_low(v13,v14) */
|
||||||
// (sum0) v17 += multsum(v13,v15)
|
/* (sum0) v17 += multsum(v13,v15) */
|
||||||
// (sum1) v18 += multsum(v14,v16)
|
/* (sum1) v18 += multsum(v14,v16) */
|
||||||
|
|
||||||
sum0 += data[j*2] * w;
|
sum0 += data[j*2] * w;
|
||||||
sum1 += data[j*2+1] * w;
|
sum1 += data[j*2+1] * w;
|
||||||
|
|
|
@ -243,7 +243,7 @@ void resample_bilinear(resample_t * r)
|
||||||
b = r->i_start;
|
b = r->i_start;
|
||||||
for (i = 0; i < r->i_samples; i++) {
|
for (i = 0; i < r->i_samples; i++) {
|
||||||
b += r->i_inc;
|
b += r->i_inc;
|
||||||
//printf("in %d\n",i_ptr[0]);
|
/*printf("in %d\n",i_ptr[0]); */
|
||||||
if(b>=2){
|
if(b>=2){
|
||||||
printf("not expecting b>=2\n");
|
printf("not expecting b>=2\n");
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ void resample_bilinear(resample_t * r)
|
||||||
acc1 += (1.0 - (b-r->i_inc)) * i_ptr[1];
|
acc1 += (1.0 - (b-r->i_inc)) * i_ptr[1];
|
||||||
|
|
||||||
o_ptr[0] = rint(acc0);
|
o_ptr[0] = rint(acc0);
|
||||||
//printf("out %d\n",o_ptr[0]);
|
/*printf("out %d\n",o_ptr[0]); */
|
||||||
o_ptr[1] = rint(acc1);
|
o_ptr[1] = rint(acc1);
|
||||||
o_ptr += 2;
|
o_ptr += 2;
|
||||||
o_count++;
|
o_count++;
|
||||||
|
@ -319,8 +319,8 @@ void resample_sinc_slow(resample_t * r)
|
||||||
c1 = 0;
|
c1 = 0;
|
||||||
for (j = 0; j < r->filter_length; j++) {
|
for (j = 0; j < r->filter_length; j++) {
|
||||||
weight = (x==0)?1:(sinx/x);
|
weight = (x==0)?1:(sinx/x);
|
||||||
//printf("j %d sin %g cos %g\n",j,sinx,cosx);
|
/*printf("j %d sin %g cos %g\n",j,sinx,cosx); */
|
||||||
//printf("j %d sin %g x %g sinc %g\n",j,sinx,x,weight);
|
/*printf("j %d sin %g x %g sinc %g\n",j,sinx,x,weight); */
|
||||||
c0 += weight * GETBUF((start + j), 0);
|
c0 += weight * GETBUF((start + j), 0);
|
||||||
c1 += weight * GETBUF((start + j), 1);
|
c1 += weight * GETBUF((start + j), 1);
|
||||||
t = cosx * cosd - sinx * sind;
|
t = cosx * cosd - sinx * sind;
|
||||||
|
@ -368,11 +368,11 @@ void resample_sinc(resample_t * r)
|
||||||
for (i = 0; i < r->o_samples; i++) {
|
for (i = 0; i < r->o_samples; i++) {
|
||||||
a = r->o_start + i * r->o_inc;
|
a = r->o_start + i * r->o_inc;
|
||||||
start = floor(a - r->halftaps);
|
start = floor(a - r->halftaps);
|
||||||
//printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1);
|
/*printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1); */
|
||||||
center = a;
|
center = a;
|
||||||
//x = M_PI * (start - center) * r->o_inc;
|
/*x = M_PI * (start - center) * r->o_inc; */
|
||||||
//d = M_PI * r->o_inc;
|
/*d = M_PI * r->o_inc; */
|
||||||
//x = (start - center) * r->o_inc;
|
/*x = (start - center) * r->o_inc; */
|
||||||
x0 = (start - center) * r->o_inc;
|
x0 = (start - center) * r->o_inc;
|
||||||
d = r->o_inc;
|
d = r->o_inc;
|
||||||
c0 = 0;
|
c0 = 0;
|
||||||
|
@ -439,20 +439,20 @@ static void resample_sinc_ft(resample_t * r)
|
||||||
double *ptr;
|
double *ptr;
|
||||||
signed short *o_ptr;
|
signed short *o_ptr;
|
||||||
int i;
|
int i;
|
||||||
//int j;
|
/*int j; */
|
||||||
double c0, c1;
|
double c0, c1;
|
||||||
//double a;
|
/*double a; */
|
||||||
double start_f, start_x;
|
double start_f, start_x;
|
||||||
int start;
|
int start;
|
||||||
double center;
|
double center;
|
||||||
//double weight;
|
/*double weight; */
|
||||||
double x, d;
|
double x, d;
|
||||||
double scale;
|
double scale;
|
||||||
int n = 4;
|
int n = 4;
|
||||||
|
|
||||||
scale = r->i_inc; // cutoff at 22050
|
scale = r->i_inc; /* cutoff at 22050 */
|
||||||
//scale = 1.0; // cutoff at 24000
|
/*scale = 1.0; // cutoff at 24000 */
|
||||||
//scale = r->i_inc * 0.5; // cutoff at 11025
|
/*scale = r->i_inc * 0.5; // cutoff at 11025 */
|
||||||
|
|
||||||
if(!ft){
|
if(!ft){
|
||||||
ft = malloc(sizeof(*ft));
|
ft = malloc(sizeof(*ft));
|
||||||
|
@ -472,7 +472,7 @@ static void resample_sinc_ft(resample_t * r)
|
||||||
|
|
||||||
functable_init(ft);
|
functable_init(ft);
|
||||||
|
|
||||||
//printf("len=%d offset=%g start=%g\n",ft->len,ft->offset,ft->start);
|
/*printf("len=%d offset=%g start=%g\n",ft->len,ft->offset,ft->start); */
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = r->buffer;
|
ptr = r->buffer;
|
||||||
|
@ -484,18 +484,18 @@ static void resample_sinc_ft(resample_t * r)
|
||||||
start_x -= start_f;
|
start_x -= start_f;
|
||||||
start = start_f;
|
start = start_f;
|
||||||
for (i = 0; i < r->o_samples; i++) {
|
for (i = 0; i < r->o_samples; i++) {
|
||||||
//start_f = floor(center - r->halftaps);
|
/*start_f = floor(center - r->halftaps); */
|
||||||
//printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1);
|
/*printf("%d: a=%g start=%d end=%d\n",i,a,start,start+r->filter_length-1); */
|
||||||
x = start_f - center;
|
x = start_f - center;
|
||||||
d = 1;
|
d = 1;
|
||||||
c0 = 0;
|
c0 = 0;
|
||||||
c1 = 0;
|
c1 = 0;
|
||||||
//#define slow
|
/*#define slow */
|
||||||
#ifdef slow
|
#ifdef slow
|
||||||
for (j = 0; j < r->filter_length; j++) {
|
for (j = 0; j < r->filter_length; j++) {
|
||||||
weight = functable_eval(ft,x)*scale;
|
weight = functable_eval(ft,x)*scale;
|
||||||
//weight = sinc(M_PI * scale * x)*scale*r->i_inc;
|
/*weight = sinc(M_PI * scale * x)*scale*r->i_inc; */
|
||||||
//weight *= window_func(x / r->halftaps);
|
/*weight *= window_func(x / r->halftaps); */
|
||||||
c0 += weight * ptr[(start + j + r->filter_length)*2 + 0];
|
c0 += weight * ptr[(start + j + r->filter_length)*2 + 0];
|
||||||
c1 += weight * ptr[(start + j + r->filter_length)*2 + 1];
|
c1 += weight * ptr[(start + j + r->filter_length)*2 + 1];
|
||||||
x += d;
|
x += d;
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
#define AMP 16000
|
#define AMP 16000
|
||||||
#define I_RATE 48000
|
#define I_RATE 48000
|
||||||
#define O_RATE 44100
|
#define O_RATE 44100
|
||||||
//#define O_RATE 24000
|
/*#define O_RATE 24000 */
|
||||||
|
|
||||||
//#define test_func(x) 1
|
/*#define test_func(x) 1 */
|
||||||
//#define test_func(x) sin(2*M_PI*(x)*10)
|
/*#define test_func(x) sin(2*M_PI*(x)*10) */
|
||||||
//#define test_func(x) sin(2*M_PI*(x)*(x)*1000)
|
/*#define test_func(x) sin(2*M_PI*(x)*(x)*1000) */
|
||||||
#define test_func(x) sin(2*M_PI*(x)*(x)*12000)
|
#define test_func(x) sin(2*M_PI*(x)*(x)*12000)
|
||||||
|
|
||||||
short i_buf[I_RATE*2*2];
|
short i_buf[I_RATE*2*2];
|
||||||
|
@ -53,7 +53,7 @@ struct timeval start_time;
|
||||||
void start_timer(void)
|
void start_timer(void)
|
||||||
{
|
{
|
||||||
gettimeofday(&start_time,NULL);
|
gettimeofday(&start_time,NULL);
|
||||||
//printf("start %ld.%06ld\n",start_time.tv_sec,start_time.tv_usec);
|
/*printf("start %ld.%06ld\n",start_time.tv_sec,start_time.tv_usec); */
|
||||||
}
|
}
|
||||||
|
|
||||||
void end_timer(void)
|
void end_timer(void)
|
||||||
|
@ -62,7 +62,7 @@ void end_timer(void)
|
||||||
double diff;
|
double diff;
|
||||||
|
|
||||||
gettimeofday(&end_time,NULL);
|
gettimeofday(&end_time,NULL);
|
||||||
//printf("end %ld.%06ld\n",end_time.tv_sec,end_time.tv_usec);
|
/*printf("end %ld.%06ld\n",end_time.tv_sec,end_time.tv_usec); */
|
||||||
diff = (end_time.tv_sec - start_time.tv_sec) +
|
diff = (end_time.tv_sec - start_time.tv_sec) +
|
||||||
1e-6*(end_time.tv_usec - start_time.tv_usec);
|
1e-6*(end_time.tv_usec - start_time.tv_usec);
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ void test_res1(void)
|
||||||
|
|
||||||
for(i=0;i<I_RATE;i++){
|
for(i=0;i<I_RATE;i++){
|
||||||
i_buf[i*2+0] = rint(AMP * test_func((double)i/I_RATE));
|
i_buf[i*2+0] = rint(AMP * test_func((double)i/I_RATE));
|
||||||
//i_buf[i*2+1] = rint(AMP * test_func((double)i/I_RATE));
|
/*i_buf[i*2+1] = rint(AMP * test_func((double)i/I_RATE)); */
|
||||||
i_buf[i*2+1] = (i<1000)?AMP:0;
|
i_buf[i*2+1] = (i<1000)?AMP:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,10 +90,10 @@ void test_res1(void)
|
||||||
|
|
||||||
r->i_rate = I_RATE;
|
r->i_rate = I_RATE;
|
||||||
r->o_rate = O_RATE;
|
r->o_rate = O_RATE;
|
||||||
//r->method = RESAMPLE_SINC_SLOW;
|
/*r->method = RESAMPLE_SINC_SLOW; */
|
||||||
r->method = RESAMPLE_SINC;
|
r->method = RESAMPLE_SINC;
|
||||||
r->channels = 2;
|
r->channels = 2;
|
||||||
//r->verbose = 1;
|
/*r->verbose = 1; */
|
||||||
r->filter_length = 64;
|
r->filter_length = 64;
|
||||||
r->get_buffer = get_buffer;
|
r->get_buffer = get_buffer;
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ void test_res1(void)
|
||||||
|
|
||||||
for(i=0;i<O_RATE;i++){
|
for(i=0;i<O_RATE;i++){
|
||||||
f = AMP*test_func((double)i/O_RATE);
|
f = AMP*test_func((double)i/O_RATE);
|
||||||
//f = rint(AMP*test_func((double)i/O_RATE));
|
/*f = rint(AMP*test_func((double)i/O_RATE)); */
|
||||||
fprintf(out,"%d %d %d %g %g\n",i,
|
fprintf(out,"%d %d %d %g %g\n",i,
|
||||||
o_buf[2*i+0],o_buf[2*i+1],
|
o_buf[2*i+0],o_buf[2*i+1],
|
||||||
f,o_buf[2*i+0]-f);
|
f,o_buf[2*i+0]-f);
|
||||||
|
@ -127,7 +127,7 @@ void test_res1(void)
|
||||||
n22k=0;
|
n22k=0;
|
||||||
for(i=0;i<O_RATE;i++){
|
for(i=0;i<O_RATE;i++){
|
||||||
f = AMP*test_func((double)i/O_RATE);
|
f = AMP*test_func((double)i/O_RATE);
|
||||||
//f = rint(AMP*test_func((double)i/O_RATE));
|
/*f = rint(AMP*test_func((double)i/O_RATE)); */
|
||||||
x = o_buf[2*i+0]-f;
|
x = o_buf[2*i+0]-f;
|
||||||
if(((0.5*i)/O_RATE*I_RATE)<10000){
|
if(((0.5*i)/O_RATE*I_RATE)<10000){
|
||||||
sum10k += x*x;
|
sum10k += x*x;
|
||||||
|
@ -219,8 +219,8 @@ double sinc_poly(double x)
|
||||||
- x2 * INV3FAC
|
- x2 * INV3FAC
|
||||||
+ x2 * x2 * INV5FAC
|
+ x2 * x2 * INV5FAC
|
||||||
- x2 * x2 * x2 * INV7FAC;
|
- x2 * x2 * x2 * INV7FAC;
|
||||||
//+ x2 * x2 * x2 * x2 * INV9FAC
|
/*+ x2 * x2 * x2 * x2 * INV9FAC */
|
||||||
//- x2 * x2 * x2 * x2 * x2 * INV11FAC;
|
/*- x2 * x2 * x2 * x2 * x2 * INV11FAC; */
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_res4(void)
|
void test_res4(void)
|
||||||
|
@ -297,10 +297,10 @@ void test_res7(void)
|
||||||
|
|
||||||
r->i_rate = I_RATE;
|
r->i_rate = I_RATE;
|
||||||
r->o_rate = O_RATE;
|
r->o_rate = O_RATE;
|
||||||
//r->method = RESAMPLE_SINC_SLOW;
|
/*r->method = RESAMPLE_SINC_SLOW; */
|
||||||
r->method = RESAMPLE_SINC;
|
r->method = RESAMPLE_SINC;
|
||||||
r->channels = 1;
|
r->channels = 1;
|
||||||
//r->verbose = 1;
|
/*r->verbose = 1; */
|
||||||
r->filter_length = 64;
|
r->filter_length = 64;
|
||||||
r->get_buffer = get_buffer;
|
r->get_buffer = get_buffer;
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ void test_res7(void)
|
||||||
|
|
||||||
for(i=0;i<O_RATE;i++){
|
for(i=0;i<O_RATE;i++){
|
||||||
f = AMP*test_func((double)i/O_RATE);
|
f = AMP*test_func((double)i/O_RATE);
|
||||||
//f = rint(AMP*test_func((double)i/O_RATE));
|
/*f = rint(AMP*test_func((double)i/O_RATE)); */
|
||||||
fprintf(out,"%d %d %d %g %g\n",i,
|
fprintf(out,"%d %d %d %g %g\n",i,
|
||||||
o_buf[i],0,
|
o_buf[i],0,
|
||||||
f,o_buf[i]-f);
|
f,o_buf[i]-f);
|
||||||
|
@ -334,7 +334,7 @@ void test_res7(void)
|
||||||
n22k=0;
|
n22k=0;
|
||||||
for(i=0;i<O_RATE;i++){
|
for(i=0;i<O_RATE;i++){
|
||||||
f = AMP*test_func((double)i/O_RATE);
|
f = AMP*test_func((double)i/O_RATE);
|
||||||
//f = rint(AMP*test_func((double)i/O_RATE));
|
/*f = rint(AMP*test_func((double)i/O_RATE)); */
|
||||||
x = o_buf[i]-f;
|
x = o_buf[i]-f;
|
||||||
if(((0.5*i)/O_RATE*I_RATE)<10000){
|
if(((0.5*i)/O_RATE*I_RATE)<10000){
|
||||||
sum10k += x*x;
|
sum10k += x*x;
|
||||||
|
|
|
@ -7,6 +7,6 @@ libgstriff_la_SOURCES = riffparse.c riffencode.c riffutil.c
|
||||||
libgstriffincludedir = $(includedir)/gst/riff
|
libgstriffincludedir = $(includedir)/gst/riff
|
||||||
libgstriffinclude_HEADERS = riff.h
|
libgstriffinclude_HEADERS = riff.h
|
||||||
|
|
||||||
libgstriff_la_LIBADD = $(GST_LIBS)
|
libgstriff_la_LIBADD =
|
||||||
libgstriff_la_CFLAGS = $(GST_CFLAGS) -funroll-all-loops -finline-functions -ffast-math
|
libgstriff_la_CFLAGS = $(GST_CFLAGS) -funroll-all-loops -finline-functions -ffast-math
|
||||||
libgstriff_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstriff_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <riff.h>
|
#include <riff.h>
|
||||||
|
|
||||||
//#define debug(format,args...) g_print(format,##args)
|
/*#define debug(format,args...) g_print(format,##args) */
|
||||||
#define debug(format,args...)
|
#define debug(format,args...)
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,33 +69,33 @@ gint gst_riff_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off) {
|
||||||
GST_BUFFER_DATA(buf) = riff->dataleft;
|
GST_BUFFER_DATA(buf) = riff->dataleft;
|
||||||
GST_BUFFER_SIZE(buf) = newsize;
|
GST_BUFFER_SIZE(buf) = newsize;
|
||||||
off -= riff->dataleft_size;
|
off -= riff->dataleft_size;
|
||||||
//last -= riff->dataleft_size;
|
/*last -= riff->dataleft_size; */
|
||||||
riff->dataleft = NULL;
|
riff->dataleft = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (off == 0) {
|
if (off == 0) {
|
||||||
guint32 *words = (guin32 *)GST_BUFFER_DATA(buf);
|
guint32 *words = (guin32 *)GST_BUFFER_DATA(buf);
|
||||||
|
|
||||||
// don't even try to parse the head if it's not there FIXME
|
/* don't even try to parse the head if it's not there FIXME */
|
||||||
if (last < 12) {
|
if (last < 12) {
|
||||||
riff->state = GST_RIFF_ENOTRIFF;
|
riff->state = GST_RIFF_ENOTRIFF;
|
||||||
return riff->state;
|
return riff->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
//g_print("testing is 0x%08lx '%s'\n",words[0],gst_riff_id_to_fourcc(words[0]));
|
/*g_print("testing is 0x%08lx '%s'\n",words[0],gst_riff_id_to_fourcc(words[0])); */
|
||||||
/* verify this is a valid RIFF file, first of all */
|
/* verify this is a valid RIFF file, first of all */
|
||||||
if (GUINT32_FROM_LE (words[0]) != GST_RIFF_TAG_RIFF) {
|
if (GUINT32_FROM_LE (words[0]) != GST_RIFF_TAG_RIFF) {
|
||||||
riff->state = GST_RIFF_ENOTRIFF;
|
riff->state = GST_RIFF_ENOTRIFF;
|
||||||
return riff->state;
|
return riff->state;
|
||||||
}
|
}
|
||||||
riff->form = GUINT32_FROM_LE (words[2]);
|
riff->form = GUINT32_FROM_LE (words[2]);
|
||||||
//g_print("form is 0x%08lx '%s'\n",words[2],gst_riff_id_to_fourcc(words[2]));
|
/*g_print("form is 0x%08lx '%s'\n",words[2],gst_riff_id_to_fourcc(words[2])); */
|
||||||
riff->nextlikely = 12; /* skip 'RIFF', length, and form */
|
riff->nextlikely = 12; /* skip 'RIFF', length, and form */
|
||||||
// all OK here
|
/* all OK here */
|
||||||
riff->incomplete_chunk = NULL;
|
riff->incomplete_chunk = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we have an incomplete chunk from the previous buffer
|
/* if we have an incomplete chunk from the previous buffer */
|
||||||
if (riff->incomplete_chunk) {
|
if (riff->incomplete_chunk) {
|
||||||
guint leftover;
|
guint leftover;
|
||||||
debug("have incomplete chunk %08x filled\n", riff->incomplete_chunk_size);
|
debug("have incomplete chunk %08x filled\n", riff->incomplete_chunk_size);
|
||||||
|
@ -135,14 +135,14 @@ gint gst_riff_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off) {
|
||||||
while ((riff->nextlikely+12) <= last) {
|
while ((riff->nextlikely+12) <= last) {
|
||||||
guin32 *words = (guin32 *)((guchar *)GST_BUFFER_DATA(buf) + riff->nextlikely - off );
|
guin32 *words = (guin32 *)((guchar *)GST_BUFFER_DATA(buf) + riff->nextlikely - off );
|
||||||
|
|
||||||
// loop over all of the chunks to check which one is finished
|
/* loop over all of the chunks to check which one is finished */
|
||||||
while (riff->chunks) {
|
while (riff->chunks) {
|
||||||
chunk = g_list_nth_data(riff->chunks, 0);
|
chunk = g_list_nth_data(riff->chunks, 0);
|
||||||
|
|
||||||
debug("next 0x%08x offset 0x%08lx size 0x%08x\n",riff->nextlikely, chunk->offset, chunk->size);
|
debug("next 0x%08x offset 0x%08lx size 0x%08x\n",riff->nextlikely, chunk->offset, chunk->size);
|
||||||
if (riff->nextlikely >= chunk->offset+chunk->size) {
|
if (riff->nextlikely >= chunk->offset+chunk->size) {
|
||||||
//g_print("found END LIST\n");
|
/*g_print("found END LIST\n"); */
|
||||||
// we have the end of the chunk on the stack, remove it
|
/* we have the end of the chunk on the stack, remove it */
|
||||||
riff->chunks = g_list_remove(riff->chunks, chunk);
|
riff->chunks = g_list_remove(riff->chunks, chunk);
|
||||||
}
|
}
|
||||||
else break;
|
else break;
|
||||||
|
@ -157,17 +157,17 @@ gint gst_riff_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off) {
|
||||||
chunk->id = GUINT32_FROM_LE (words[0]));
|
chunk->id = GUINT32_FROM_LE (words[0]));
|
||||||
chunk->size = GUINT32_FROM_LE (words[1]);
|
chunk->size = GUINT32_FROM_LE (words[1]);
|
||||||
chunk->data = (gchar *)(words+2);
|
chunk->data = (gchar *)(words+2);
|
||||||
// we need word alignment
|
/* we need word alignment */
|
||||||
//if (chunk->size & 0x01) chunk->size++;
|
/*if (chunk->size & 0x01) chunk->size++; */
|
||||||
chunk->form = GUINT32_FROM_LE (words[2]); /* fill in the form, might not be valid */
|
chunk->form = GUINT32_FROM_LE (words[2]); /* fill in the form, might not be valid */
|
||||||
|
|
||||||
|
|
||||||
if (chunk->id == GST_RIFF_TAG_LIST) {
|
if (chunk->id == GST_RIFF_TAG_LIST) {
|
||||||
//g_print("found LIST %s\n", gst_riff_id_to_fourcc(chunk->form));
|
/*g_print("found LIST %s\n", gst_riff_id_to_fourcc(chunk->form)); */
|
||||||
riff->nextlikely += 12;
|
riff->nextlikely += 12;
|
||||||
// we push the list chunk on our 'stack'
|
/* we push the list chunk on our 'stack' */
|
||||||
riff->chunks = g_list_prepend(riff->chunks,chunk);
|
riff->chunks = g_list_prepend(riff->chunks,chunk);
|
||||||
// send the buffer to the listener if we have received a function
|
/* send the buffer to the listener if we have received a function */
|
||||||
if (riff->new_tag_found) {
|
if (riff->new_tag_found) {
|
||||||
riff->new_tag_found(chunk, riff->callback_data);
|
riff->new_tag_found(chunk, riff->callback_data);
|
||||||
}
|
}
|
||||||
|
@ -178,25 +178,25 @@ gint gst_riff_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off) {
|
||||||
gst_riff_id_to_fourcc(GUINT32_FROM_LE (words[0])), GUINT32_FROM_LE (words[1]));
|
gst_riff_id_to_fourcc(GUINT32_FROM_LE (words[0])), GUINT32_FROM_LE (words[1]));
|
||||||
|
|
||||||
riff->nextlikely += 8 + chunk->size; /* doesn't include hdr */
|
riff->nextlikely += 8 + chunk->size; /* doesn't include hdr */
|
||||||
// if this buffer is incomplete
|
/* if this buffer is incomplete */
|
||||||
if (riff->nextlikely > last) {
|
if (riff->nextlikely > last) {
|
||||||
guint left = size - (riff->nextlikely - chunk->size - off);
|
guint left = size - (riff->nextlikely - chunk->size - off);
|
||||||
|
|
||||||
//g_print("make incomplete buffer %08x\n", left);
|
/*g_print("make incomplete buffer %08x\n", left); */
|
||||||
chunk->data = g_malloc(chunk->size);
|
chunk->data = g_malloc(chunk->size);
|
||||||
memcpy(chunk->data, (gchar *)(words+2), left);
|
memcpy(chunk->data, (gchar *)(words+2), left);
|
||||||
riff->incomplete_chunk = chunk;
|
riff->incomplete_chunk = chunk;
|
||||||
riff->incomplete_chunk_size = left;
|
riff->incomplete_chunk_size = left;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// send the buffer to the listener if we have received a function
|
/* send the buffer to the listener if we have received a function */
|
||||||
if (riff->new_tag_found) {
|
if (riff->new_tag_found) {
|
||||||
riff->new_tag_found(chunk, riff->callback_data);
|
riff->new_tag_found(chunk, riff->callback_data);
|
||||||
}
|
}
|
||||||
g_free(chunk);
|
g_free(chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
//riff->chunks = g_list_prepend(riff->chunks,chunk);
|
/*riff->chunks = g_list_prepend(riff->chunks,chunk); */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
//#define DEBUG_ENABLED
|
/*#define DEBUG_ENABLED */
|
||||||
#include "riff.h"
|
#include "riff.h"
|
||||||
|
|
||||||
#define GST_RIFF_ENCODER_BUF_SIZE 1024
|
#define GST_RIFF_ENCODER_BUF_SIZE 1024
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
//#define DEBUG_ENABLED
|
/*#define DEBUG_ENABLED */
|
||||||
#include <riff.h>
|
#include <riff.h>
|
||||||
|
|
||||||
GstRiff*
|
GstRiff*
|
||||||
|
@ -71,33 +71,33 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
GST_BUFFER_DATA(buf) = riff->dataleft;
|
GST_BUFFER_DATA(buf) = riff->dataleft;
|
||||||
size = GST_BUFFER_SIZE(buf) = newsize;
|
size = GST_BUFFER_SIZE(buf) = newsize;
|
||||||
off -= riff->dataleft_size;
|
off -= riff->dataleft_size;
|
||||||
//last -= riff->dataleft_size;
|
/*last -= riff->dataleft_size; */
|
||||||
riff->dataleft = NULL;
|
riff->dataleft = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (off == 0) {
|
if (off == 0) {
|
||||||
guint32 *words = (guint32 *)GST_BUFFER_DATA(buf);
|
guint32 *words = (guint32 *)GST_BUFFER_DATA(buf);
|
||||||
|
|
||||||
// don't even try to parse the head if it's not there FIXME
|
/* don't even try to parse the head if it's not there FIXME */
|
||||||
if (last < 12) {
|
if (last < 12) {
|
||||||
riff->state = GST_RIFF_ENOTRIFF;
|
riff->state = GST_RIFF_ENOTRIFF;
|
||||||
return riff->state;
|
return riff->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
//g_print("testing is 0x%08lx '%s'\n",words[0],gst_riff_id_to_fourcc(words[0]));
|
/*g_print("testing is 0x%08lx '%s'\n",words[0],gst_riff_id_to_fourcc(words[0])); */
|
||||||
/* verify this is a valid RIFF file, first of all */
|
/* verify this is a valid RIFF file, first of all */
|
||||||
if (GUINT32_FROM_LE (words[0]) != GST_RIFF_TAG_RIFF) {
|
if (GUINT32_FROM_LE (words[0]) != GST_RIFF_TAG_RIFF) {
|
||||||
riff->state = GST_RIFF_ENOTRIFF;
|
riff->state = GST_RIFF_ENOTRIFF;
|
||||||
return riff->state;
|
return riff->state;
|
||||||
}
|
}
|
||||||
riff->form = GUINT32_FROM_LE (words[2]);
|
riff->form = GUINT32_FROM_LE (words[2]);
|
||||||
//g_print("form is 0x%08lx '%s'\n",words[2],gst_riff_id_to_fourcc(words[2]));
|
/*g_print("form is 0x%08lx '%s'\n",words[2],gst_riff_id_to_fourcc(words[2])); */
|
||||||
riff->nextlikely = 12; /* skip 'RIFF', length, and form */
|
riff->nextlikely = 12; /* skip 'RIFF', length, and form */
|
||||||
// all OK here
|
/* all OK here */
|
||||||
riff->incomplete_chunk = NULL;
|
riff->incomplete_chunk = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we have an incomplete chunk from the previous buffer
|
/* if we have an incomplete chunk from the previous buffer */
|
||||||
if (riff->incomplete_chunk) {
|
if (riff->incomplete_chunk) {
|
||||||
guint leftover;
|
guint leftover;
|
||||||
GST_DEBUG (0,"gst_riff_parser: have incomplete chunk %08x filled\n", riff->incomplete_chunk_size);
|
GST_DEBUG (0,"gst_riff_parser: have incomplete chunk %08x filled\n", riff->incomplete_chunk_size);
|
||||||
|
@ -130,7 +130,7 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
while ((riff->nextlikely+12) <= last) {
|
while ((riff->nextlikely+12) <= last) {
|
||||||
guint32 *words = (guint32 *)((guchar *)GST_BUFFER_DATA(buf) + riff->nextlikely - off );
|
guint32 *words = (guint32 *)((guchar *)GST_BUFFER_DATA(buf) + riff->nextlikely - off );
|
||||||
|
|
||||||
// loop over all of the chunks to check which one is finished
|
/* loop over all of the chunks to check which one is finished */
|
||||||
while (riff->chunks) {
|
while (riff->chunks) {
|
||||||
chunk = g_list_nth_data(riff->chunks, 0);
|
chunk = g_list_nth_data(riff->chunks, 0);
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
chunk->offset, chunk->size);
|
chunk->offset, chunk->size);
|
||||||
if (riff->nextlikely >= chunk->offset+chunk->size) {
|
if (riff->nextlikely >= chunk->offset+chunk->size) {
|
||||||
GST_DEBUG (0,"gst_riff_parser: found END LIST\n");
|
GST_DEBUG (0,"gst_riff_parser: found END LIST\n");
|
||||||
// we have the end of the chunk on the stack, remove it
|
/* we have the end of the chunk on the stack, remove it */
|
||||||
riff->chunks = g_list_remove(riff->chunks, chunk);
|
riff->chunks = g_list_remove(riff->chunks, chunk);
|
||||||
}
|
}
|
||||||
else break;
|
else break;
|
||||||
|
@ -153,17 +153,17 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
chunk->id = GUINT32_FROM_LE (words[0]);
|
chunk->id = GUINT32_FROM_LE (words[0]);
|
||||||
chunk->size = GUINT32_FROM_LE (words[1]);
|
chunk->size = GUINT32_FROM_LE (words[1]);
|
||||||
chunk->data = (gchar *)(words+2);
|
chunk->data = (gchar *)(words+2);
|
||||||
// we need word alignment
|
/* we need word alignment */
|
||||||
//if (chunk->size & 0x01) chunk->size++;
|
/*if (chunk->size & 0x01) chunk->size++; */
|
||||||
chunk->form = GUINT32_FROM_LE (words[2]); /* fill in the form, might not be valid */
|
chunk->form = GUINT32_FROM_LE (words[2]); /* fill in the form, might not be valid */
|
||||||
|
|
||||||
|
|
||||||
if (chunk->id == GST_RIFF_TAG_LIST) {
|
if (chunk->id == GST_RIFF_TAG_LIST) {
|
||||||
GST_DEBUG (0,"found LIST %s\n", gst_riff_id_to_fourcc(chunk->form));
|
GST_DEBUG (0,"found LIST %s\n", gst_riff_id_to_fourcc(chunk->form));
|
||||||
riff->nextlikely += 12;
|
riff->nextlikely += 12;
|
||||||
// we push the list chunk on our 'stack'
|
/* we push the list chunk on our 'stack' */
|
||||||
riff->chunks = g_list_prepend(riff->chunks,chunk);
|
riff->chunks = g_list_prepend(riff->chunks,chunk);
|
||||||
// send the buffer to the listener if we have received a function
|
/* send the buffer to the listener if we have received a function */
|
||||||
if (riff->new_tag_found) {
|
if (riff->new_tag_found) {
|
||||||
riff->new_tag_found(chunk, riff->callback_data);
|
riff->new_tag_found(chunk, riff->callback_data);
|
||||||
}
|
}
|
||||||
|
@ -175,7 +175,7 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
gst_riff_id_to_fourcc(GUINT32_FROM_LE (words[0])), GUINT32_FROM_LE (words[1]));
|
gst_riff_id_to_fourcc(GUINT32_FROM_LE (words[0])), GUINT32_FROM_LE (words[1]));
|
||||||
|
|
||||||
riff->nextlikely += 8 + chunk->size; /* doesn't include hdr */
|
riff->nextlikely += 8 + chunk->size; /* doesn't include hdr */
|
||||||
// if this buffer is incomplete
|
/* if this buffer is incomplete */
|
||||||
if (riff->nextlikely > last) {
|
if (riff->nextlikely > last) {
|
||||||
guint left = size - (riff->nextlikely - chunk->size - off);
|
guint left = size - (riff->nextlikely - chunk->size - off);
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
riff->incomplete_chunk_size = left;
|
riff->incomplete_chunk_size = left;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// send the buffer to the listener if we have received a function
|
/* send the buffer to the listener if we have received a function */
|
||||||
if (riff->new_tag_found) {
|
if (riff->new_tag_found) {
|
||||||
riff->new_tag_found(chunk, riff->callback_data);
|
riff->new_tag_found(chunk, riff->callback_data);
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,7 @@ gst_riff_parser_next_buffer (GstRiff *riff, GstBuffer *buf, gulong off)
|
||||||
}
|
}
|
||||||
if (riff->nextlikely & 0x01) riff->nextlikely++;
|
if (riff->nextlikely & 0x01) riff->nextlikely++;
|
||||||
|
|
||||||
//riff->chunks = g_list_prepend(riff->chunks,chunk);
|
/*riff->chunks = g_list_prepend(riff->chunks,chunk); */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((riff->nextlikely+12) > last && !riff->incomplete_chunk) {
|
if ((riff->nextlikely+12) > last && !riff->incomplete_chunk) {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <riff.h>
|
#include <riff.h>
|
||||||
|
|
||||||
//#define debug(format,args...) g_print(format,##args)
|
/*#define debug(format,args...) g_print(format,##args) */
|
||||||
#define debug(format,args...)
|
#define debug(format,args...)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ libgstac3parse_la_SOURCES = gstac3parse.c
|
||||||
noinst_HEADERS = gstac3parse.h
|
noinst_HEADERS = gstac3parse.h
|
||||||
|
|
||||||
libgstac3parse_la_CFLAGS = -O3 $(FOMIT_FRAME_POINTER) -funroll-all-loops -finline-functions -ffast-math $(GST_CFLAGS)
|
libgstac3parse_la_CFLAGS = -O3 $(FOMIT_FRAME_POINTER) -funroll-all-loops -finline-functions -ffast-math $(GST_CFLAGS)
|
||||||
libgstac3parse_la_LIBADD = $(GST_LIBS)
|
libgstac3parse_la_LIBADD =
|
||||||
libgstac3parse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstac3parse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
EXTRA_DIST = README
|
EXTRA_DIST = README
|
||||||
|
|
|
@ -6,12 +6,12 @@ plugin_LTLIBRARIES = libgstmpegaudioparse.la libgstmp3types.la
|
||||||
libgstmpegaudioparse_la_SOURCES = gstmpegaudioparse.c
|
libgstmpegaudioparse_la_SOURCES = gstmpegaudioparse.c
|
||||||
# FIXME is this useful?
|
# FIXME is this useful?
|
||||||
libgstmpegaudioparse_la_CFLAGS = -O3 $(FOMIT_FRAME_POINTER) -ffast-math -finline-functions $(GST_CFLAGS)
|
libgstmpegaudioparse_la_CFLAGS = -O3 $(FOMIT_FRAME_POINTER) -ffast-math -finline-functions $(GST_CFLAGS)
|
||||||
libgstmpegaudioparse_la_LIBADD = $(GST_LIBS)
|
libgstmpegaudioparse_la_LIBADD =
|
||||||
libgstmpegaudioparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstmpegaudioparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
libgstmp3types_la_SOURCES = gstmp3types.c
|
libgstmp3types_la_SOURCES = gstmp3types.c
|
||||||
libgstmp3types_la_CFLAGS = -O3 $(FOMIT_FRAME_POINTER) -ffast-math -finline-functions $(GST_CFLAGS)
|
libgstmp3types_la_CFLAGS = -O3 $(FOMIT_FRAME_POINTER) -ffast-math -finline-functions $(GST_CFLAGS)
|
||||||
libgstmp3types_la_LIBADD = $(GST_LIBS)
|
libgstmp3types_la_LIBADD =
|
||||||
libgstmp3types_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstmp3types_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
noinst_HEADERS = gstmpegaudioparse.h
|
noinst_HEADERS = gstmpegaudioparse.h
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define DEBUG_ENABLED
|
/*#define DEBUG_ENABLED */
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <string.h> /* memcmp */
|
#include <string.h> /* memcmp */
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define GST_DEBUG_ENABLED
|
/*#define GST_DEBUG_ENABLED */
|
||||||
#include <gstmpegaudioparse.h>
|
#include <gstmpegaudioparse.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ static void gst_mp3parse_set_property (GObject *object, guint prop_id, const GV
|
||||||
static void gst_mp3parse_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
|
static void gst_mp3parse_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
//static guint gst_mp3parse_signals[LAST_SIGNAL] = { 0 };
|
/*static guint gst_mp3parse_signals[LAST_SIGNAL] = { 0 }; */
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gst_mp3parse_get_type(void) {
|
gst_mp3parse_get_type(void) {
|
||||||
|
@ -127,10 +127,10 @@ gst_mp3parse_class_init (GstMPEGAudioParseClass *klass)
|
||||||
|
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SKIP,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SKIP,
|
||||||
g_param_spec_int("skip","skip","skip",
|
g_param_spec_int("skip","skip","skip",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READWRITE)); /* CHECKME */
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BIT_RATE,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_BIT_RATE,
|
||||||
g_param_spec_int("bit_rate","bit_rate","bit_rate",
|
g_param_spec_int("bit_rate","bit_rate","bit_rate",
|
||||||
G_MININT,G_MAXINT,0,G_PARAM_READABLE)); // CHECKME
|
G_MININT,G_MAXINT,0,G_PARAM_READABLE)); /* CHECKME */
|
||||||
|
|
||||||
parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
|
parent_class = g_type_class_ref(GST_TYPE_ELEMENT);
|
||||||
|
|
||||||
|
@ -144,15 +144,15 @@ gst_mp3parse_init (GstMPEGAudioParse *mp3parse)
|
||||||
mp3parse->sinkpad = gst_pad_new_from_template(sink_temp, "sink");
|
mp3parse->sinkpad = gst_pad_new_from_template(sink_temp, "sink");
|
||||||
gst_element_add_pad(GST_ELEMENT(mp3parse),mp3parse->sinkpad);
|
gst_element_add_pad(GST_ELEMENT(mp3parse),mp3parse->sinkpad);
|
||||||
|
|
||||||
#if 1 // set this to one to use the old chaining code
|
#if 1 /* set this to one to use the old chaining code */
|
||||||
gst_pad_set_chain_function(mp3parse->sinkpad,gst_mp3parse_chain);
|
gst_pad_set_chain_function(mp3parse->sinkpad,gst_mp3parse_chain);
|
||||||
#else // else you get the new loop-based code, which isn't complete yet
|
#else /* else you get the new loop-based code, which isn't complete yet */
|
||||||
gst_element_set_loop_function (GST_ELEMENT(mp3parse),gst_mp3parse_loop);
|
gst_element_set_loop_function (GST_ELEMENT(mp3parse),gst_mp3parse_loop);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mp3parse->srcpad = gst_pad_new_from_template(src_temp, "src");
|
mp3parse->srcpad = gst_pad_new_from_template(src_temp, "src");
|
||||||
gst_element_add_pad(GST_ELEMENT(mp3parse),mp3parse->srcpad);
|
gst_element_add_pad(GST_ELEMENT(mp3parse),mp3parse->srcpad);
|
||||||
//gst_pad_set_type_id(mp3parse->srcpad, mp3frametype);
|
/*gst_pad_set_type_id(mp3parse->srcpad, mp3frametype); */
|
||||||
|
|
||||||
mp3parse->partialbuf = NULL;
|
mp3parse->partialbuf = NULL;
|
||||||
mp3parse->skip = 0;
|
mp3parse->skip = 0;
|
||||||
|
@ -190,31 +190,31 @@ gst_mp3parse_loop (GstElement *element)
|
||||||
gint bpf;
|
gint bpf;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// get a new buffer
|
/* get a new buffer */
|
||||||
inbuf = gst_pad_pull (parse->sinkpad);
|
inbuf = gst_pad_pull (parse->sinkpad);
|
||||||
size = GST_BUFFER_SIZE (inbuf);
|
size = GST_BUFFER_SIZE (inbuf);
|
||||||
data = GST_BUFFER_DATA (inbuf);
|
data = GST_BUFFER_DATA (inbuf);
|
||||||
offset = 0;
|
offset = 0;
|
||||||
fprintf(stderr, "have buffer of %d bytes\n",size);
|
fprintf(stderr, "have buffer of %d bytes\n",size);
|
||||||
|
|
||||||
// loop through it and find all the frames
|
/* loop through it and find all the frames */
|
||||||
while (offset < (size - 4)) {
|
while (offset < (size - 4)) {
|
||||||
start = gst_mp3parse_next_header (data,size,offset);
|
start = gst_mp3parse_next_header (data,size,offset);
|
||||||
fprintf(stderr, "skipped %d bytes searching for the next header\n",start-offset);
|
fprintf(stderr, "skipped %d bytes searching for the next header\n",start-offset);
|
||||||
header = GULONG_FROM_BE(*((guint32 *)(data+start)));
|
header = GULONG_FROM_BE(*((guint32 *)(data+start)));
|
||||||
fprintf(stderr, "header is 0x%08x\n",header);
|
fprintf(stderr, "header is 0x%08x\n",header);
|
||||||
|
|
||||||
// figure out how big the frame is supposed to be
|
/* figure out how big the frame is supposed to be */
|
||||||
bpf = bpf_from_header (parse, header);
|
bpf = bpf_from_header (parse, header);
|
||||||
|
|
||||||
// see if there are enough bytes in this buffer for the whole frame
|
/* see if there are enough bytes in this buffer for the whole frame */
|
||||||
if ((start + bpf) <= size) {
|
if ((start + bpf) <= size) {
|
||||||
outbuf = gst_buffer_create_sub (inbuf,start,bpf);
|
outbuf = gst_buffer_create_sub (inbuf,start,bpf);
|
||||||
fprintf(stderr, "sending buffer of %d bytes\n",bpf);
|
fprintf(stderr, "sending buffer of %d bytes\n",bpf);
|
||||||
gst_pad_push (parse->srcpad, outbuf);
|
gst_pad_push (parse->srcpad, outbuf);
|
||||||
offset = start + bpf;
|
offset = start + bpf;
|
||||||
|
|
||||||
// if not, we have to deal with it somehow
|
/* if not, we have to deal with it somehow */
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"don't have enough data for this frame\n");
|
fprintf(stderr,"don't have enough data for this frame\n");
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ gst_mp3parse_chain (GstPad *pad, GstBuffer *buf)
|
||||||
g_return_if_fail(pad != NULL);
|
g_return_if_fail(pad != NULL);
|
||||||
g_return_if_fail(GST_IS_PAD(pad));
|
g_return_if_fail(GST_IS_PAD(pad));
|
||||||
g_return_if_fail(buf != NULL);
|
g_return_if_fail(buf != NULL);
|
||||||
// g_return_if_fail(GST_IS_BUFFER(buf));
|
/* g_return_if_fail(GST_IS_BUFFER(buf)); */
|
||||||
|
|
||||||
mp3parse = GST_MP3PARSE (gst_pad_get_parent (pad));
|
mp3parse = GST_MP3PARSE (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
@ -255,11 +255,11 @@ gst_mp3parse_chain (GstPad *pad, GstBuffer *buf)
|
||||||
mp3parse->in_flush = TRUE;
|
mp3parse->in_flush = TRUE;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// if we have something left from the previous frame
|
/* if we have something left from the previous frame */
|
||||||
if (mp3parse->partialbuf) {
|
if (mp3parse->partialbuf) {
|
||||||
|
|
||||||
mp3parse->partialbuf = gst_buffer_append(mp3parse->partialbuf, buf);
|
mp3parse->partialbuf = gst_buffer_append(mp3parse->partialbuf, buf);
|
||||||
// and the one we received..
|
/* and the one we received.. */
|
||||||
gst_buffer_unref(buf);
|
gst_buffer_unref(buf);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -269,22 +269,22 @@ gst_mp3parse_chain (GstPad *pad, GstBuffer *buf)
|
||||||
size = GST_BUFFER_SIZE(mp3parse->partialbuf);
|
size = GST_BUFFER_SIZE(mp3parse->partialbuf);
|
||||||
data = GST_BUFFER_DATA(mp3parse->partialbuf);
|
data = GST_BUFFER_DATA(mp3parse->partialbuf);
|
||||||
|
|
||||||
// while we still have bytes left -4 for the header
|
/* while we still have bytes left -4 for the header */
|
||||||
while (offset < size-4) {
|
while (offset < size-4) {
|
||||||
int skipped = 0;
|
int skipped = 0;
|
||||||
|
|
||||||
GST_DEBUG (0,"mp3parse: offset %ld, size %ld \n",offset, size);
|
GST_DEBUG (0,"mp3parse: offset %ld, size %ld \n",offset, size);
|
||||||
|
|
||||||
// search for a possible start byte
|
/* search for a possible start byte */
|
||||||
for (;((data[offset] != 0xff) && (offset < size));offset++) skipped++;
|
for (;((data[offset] != 0xff) && (offset < size));offset++) skipped++;
|
||||||
if (skipped && !mp3parse->in_flush) {
|
if (skipped && !mp3parse->in_flush) {
|
||||||
GST_DEBUG (0,"mp3parse: **** now at %ld skipped %d bytes\n",offset,skipped);
|
GST_DEBUG (0,"mp3parse: **** now at %ld skipped %d bytes\n",offset,skipped);
|
||||||
}
|
}
|
||||||
// construct the header word
|
/* construct the header word */
|
||||||
header = GULONG_FROM_BE(*((gulong *)(data+offset)));
|
header = GULONG_FROM_BE(*((gulong *)(data+offset)));
|
||||||
// if it's a valid header, go ahead and send off the frame
|
/* if it's a valid header, go ahead and send off the frame */
|
||||||
if (head_check(header)) {
|
if (head_check(header)) {
|
||||||
// calculate the bpf of the frame
|
/* calculate the bpf of the frame */
|
||||||
bpf = bpf_from_header(mp3parse, header);
|
bpf = bpf_from_header(mp3parse, header);
|
||||||
|
|
||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
|
@ -302,22 +302,22 @@ gst_mp3parse_chain (GstPad *pad, GstBuffer *buf)
|
||||||
if ( mp3parse->in_flush ) {
|
if ( mp3parse->in_flush ) {
|
||||||
unsigned long header2;
|
unsigned long header2;
|
||||||
|
|
||||||
if ((size-offset)<(bpf+4)) { if (mp3parse->in_flush) break; } // wait until we have the the entire current frame as well as the next frame header
|
if ((size-offset)<(bpf+4)) { if (mp3parse->in_flush) break; } /* wait until we have the the entire current frame as well as the next frame header */
|
||||||
|
|
||||||
header2 = GULONG_FROM_BE(*((gulong *)(data+offset+bpf)));
|
header2 = GULONG_FROM_BE(*((gulong *)(data+offset+bpf)));
|
||||||
GST_DEBUG(0,"mp3parse: header=%08lX, header2=%08lX, bpf=%d\n", header, header2, bpf );
|
GST_DEBUG(0,"mp3parse: header=%08lX, header2=%08lX, bpf=%d\n", header, header2, bpf );
|
||||||
|
|
||||||
#define HDRMASK ~( (0xF<<12)/*bitrate*/ | (1<<9)/*padding*/ | (3<<4)/*mode extension*/ ) // mask the bits which are allowed to differ between frames
|
#define HDRMASK ~( (0xF<<12)/*bitrate*/ | (1<<9)/*padding*/ | (3<<4)/*mode extension*/ ) /* mask the bits which are allowed to differ between frames */
|
||||||
|
|
||||||
if ( (header2&HDRMASK) != (header&HDRMASK) ) { // require 2 matching headers in a row
|
if ( (header2&HDRMASK) != (header&HDRMASK) ) { /* require 2 matching headers in a row */
|
||||||
GST_DEBUG(0,"mp3parse: next header doesn't match (header=%08lX, header2=%08lX, bpf=%d)\n", header, header2, bpf );
|
GST_DEBUG(0,"mp3parse: next header doesn't match (header=%08lX, header2=%08lX, bpf=%d)\n", header, header2, bpf );
|
||||||
offset++; // This frame is invalid. Start looking for a valid frame at the next position in the stream
|
offset++; /* This frame is invalid. Start looking for a valid frame at the next position in the stream */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we don't have the whole frame...
|
/* if we don't have the whole frame... */
|
||||||
if ((size - offset) < bpf) {
|
if ((size - offset) < bpf) {
|
||||||
GST_DEBUG (0,"mp3parse: partial buffer needed %ld < %d \n",(size-offset), bpf);
|
GST_DEBUG (0,"mp3parse: partial buffer needed %ld < %d \n",(size-offset), bpf);
|
||||||
break;
|
break;
|
||||||
|
@ -346,8 +346,8 @@ gst_mp3parse_chain (GstPad *pad, GstBuffer *buf)
|
||||||
if (!mp3parse->in_flush) GST_DEBUG (0,"mp3parse: *** wrong header, skipping byte (FIXME?)\n");
|
if (!mp3parse->in_flush) GST_DEBUG (0,"mp3parse: *** wrong header, skipping byte (FIXME?)\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if we have processed this block and there are still
|
/* if we have processed this block and there are still */
|
||||||
// bytes left not in a partial block, copy them over.
|
/* bytes left not in a partial block, copy them over. */
|
||||||
if (size-offset > 0) {
|
if (size-offset > 0) {
|
||||||
glong remainder = (size - offset);
|
glong remainder = (size - offset);
|
||||||
GST_DEBUG (0,"mp3parse: partial buffer needed %ld for trailing bytes\n",remainder);
|
GST_DEBUG (0,"mp3parse: partial buffer needed %ld for trailing bytes\n",remainder);
|
||||||
|
@ -381,7 +381,7 @@ bpf_from_header (GstMPEGAudioParse *parse, unsigned long header)
|
||||||
int layer_index,layer,lsf,samplerate_index,padding;
|
int layer_index,layer,lsf,samplerate_index,padding;
|
||||||
long bpf;
|
long bpf;
|
||||||
|
|
||||||
//mpegver = (header >> 19) & 0x3; // don't need this for bpf
|
/*mpegver = (header >> 19) & 0x3; // don't need this for bpf */
|
||||||
layer_index = (header >> 17) & 0x3;
|
layer_index = (header >> 17) & 0x3;
|
||||||
layer = 4 - layer_index;
|
layer = 4 - layer_index;
|
||||||
lsf = (header & (1 << 20)) ? ((header & (1 << 19)) ? 0 : 1) : 1;
|
lsf = (header & (1 << 20)) ? ((header & (1 << 19)) ? 0 : 1) : 1;
|
||||||
|
@ -399,8 +399,8 @@ bpf_from_header (GstMPEGAudioParse *parse, unsigned long header)
|
||||||
bpf += padding;
|
bpf += padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
//g_print("%08x: layer %d lsf %d bitrate %d samplerate_index %d padding %d - bpf %d\n",
|
/*g_print("%08x: layer %d lsf %d bitrate %d samplerate_index %d padding %d - bpf %d\n", */
|
||||||
//header,layer,lsf,bitrate,samplerate_index,padding,bpf);
|
/*header,layer,lsf,bitrate,samplerate_index,padding,bpf); */
|
||||||
|
|
||||||
return bpf;
|
return bpf;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ struct _GstMPEGAudioParse {
|
||||||
|
|
||||||
GstPad *sinkpad,*srcpad;
|
GstPad *sinkpad,*srcpad;
|
||||||
|
|
||||||
GstBuffer *partialbuf; // previous buffer (if carryover)
|
GstBuffer *partialbuf; /* previous buffer (if carryover) */
|
||||||
guint skip; /* number of frames to skip */
|
guint skip; /* number of frames to skip */
|
||||||
guint bit_rate;
|
guint bit_rate;
|
||||||
gboolean in_flush;
|
gboolean in_flush;
|
||||||
|
|
|
@ -4,7 +4,7 @@ plugin_LTLIBRARIES = libgstmpegstream.la
|
||||||
|
|
||||||
libgstmpegstream_la_SOURCES = gstmpegstream.c gstmpegparse.c gstmpegdemux.c gstmpegpacketize.c gstrfc2250enc.c
|
libgstmpegstream_la_SOURCES = gstmpegstream.c gstmpegparse.c gstmpegdemux.c gstmpegpacketize.c gstrfc2250enc.c
|
||||||
libgstmpegstream_la_CFLAGS = $(GST_CFLAGS) -O3 $(FOMIT_FRAME_POINTER) -ffast-math
|
libgstmpegstream_la_CFLAGS = $(GST_CFLAGS) -O3 $(FOMIT_FRAME_POINTER) -ffast-math
|
||||||
libgstmpegstream_la_LIBADD = $(GST_LIBS)
|
libgstmpegstream_la_LIBADD =
|
||||||
libgstmpegstream_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstmpegstream_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
noinst_HEADERS = gstmpegparse.h gstmpegdemux.h gstmpegpacketize.h gstrfc2250enc.h
|
noinst_HEADERS = gstmpegparse.h gstmpegdemux.h gstmpegpacketize.h gstrfc2250enc.h
|
||||||
|
|
|
@ -7,6 +7,6 @@ libgstsynaesthesia_la_SOURCES = gstsynaesthesia.c synaescope.c
|
||||||
noinst_HEADERS = synaescope.h
|
noinst_HEADERS = synaescope.h
|
||||||
|
|
||||||
libgstsynaesthesia_la_CFLAGS = -O2 -ffast-math $(GST_CFLAGS)
|
libgstsynaesthesia_la_CFLAGS = -O2 -ffast-math $(GST_CFLAGS)
|
||||||
libgstsynaesthesia_la_LIBADD = $(GST_LIBS)
|
libgstsynaesthesia_la_LIBADD =
|
||||||
libgstsynaesthesia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstsynaesthesia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,11 @@ struct _GstSynaesthesia {
|
||||||
GstPad *sinkpad,*srcpad;
|
GstPad *sinkpad,*srcpad;
|
||||||
GstBufferPool *peerpool;
|
GstBufferPool *peerpool;
|
||||||
|
|
||||||
// the timestamp of the next frame
|
/* the timestamp of the next frame */
|
||||||
guint64 next_time;
|
guint64 next_time;
|
||||||
gint16 datain[2][512];
|
gint16 datain[2][512];
|
||||||
|
|
||||||
// video state
|
/* video state */
|
||||||
gint fps;
|
gint fps;
|
||||||
gint width;
|
gint width;
|
||||||
gint height;
|
gint height;
|
||||||
|
@ -198,11 +198,11 @@ gst_synaesthesia_init (GstSynaesthesia *synaesthesia)
|
||||||
synaesthesia->next_time = 0;
|
synaesthesia->next_time = 0;
|
||||||
synaesthesia->peerpool = NULL;
|
synaesthesia->peerpool = NULL;
|
||||||
|
|
||||||
// reset the initial video state
|
/* reset the initial video state */
|
||||||
synaesthesia->first_buffer = TRUE;
|
synaesthesia->first_buffer = TRUE;
|
||||||
synaesthesia->width = 320;
|
synaesthesia->width = 320;
|
||||||
synaesthesia->height = 200;
|
synaesthesia->height = 200;
|
||||||
synaesthesia->fps = 25; // desired frame rate
|
synaesthesia->fps = 25; /* desired frame rate */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,25 +140,25 @@ static void synaescope_coreGo(void) {
|
||||||
( (x1+x2) * (x1-x2) + (y1+y2) * (y1-y2) )/(aa+bb) * 256 );
|
( (x1+x2) * (x1-x2) + (y1+y2) * (y1-y2) )/(aa+bb) * 256 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Asger Alstrupt's optimized 32 bit fade
|
/* Asger Alstrupt's optimized 32 bit fade */
|
||||||
// (alstrup@diku.dk)
|
/* (alstrup@diku.dk) */
|
||||||
ptr = (unsigned long*)output;
|
ptr = (unsigned long*)output;
|
||||||
end = (unsigned long*)(output + syn_width * syn_height * 2);
|
end = (unsigned long*)(output + syn_width * syn_height * 2);
|
||||||
do {
|
do {
|
||||||
//Bytewize version was: *(ptr++) -= *ptr+(*ptr>>1)>>4;
|
/*Bytewize version was: *(ptr++) -= *ptr+(*ptr>>1)>>4; */
|
||||||
if (*ptr)
|
if (*ptr)
|
||||||
|
|
||||||
if (*ptr & 0xf0f0f0f0)
|
if (*ptr & 0xf0f0f0f0)
|
||||||
*ptr = *ptr - ((*ptr & 0xf0f0f0f0) >> 4) - ((*ptr & 0xe0e0e0e0) >> 5);
|
*ptr = *ptr - ((*ptr & 0xf0f0f0f0) >> 4) - ((*ptr & 0xe0e0e0e0) >> 5);
|
||||||
else {
|
else {
|
||||||
*ptr = (*ptr * 14 >> 4) & 0x0f0f0f0f;
|
*ptr = (*ptr * 14 >> 4) & 0x0f0f0f0f;
|
||||||
//Should be 29/32 to be consistent. Who cares. This is totally
|
/*Should be 29/32 to be consistent. Who cares. This is totally */
|
||||||
// hacked anyway.
|
/* hacked anyway. */
|
||||||
//unsigned char *subptr = (unsigned char*)(ptr++);
|
/*unsigned char *subptr = (unsigned char*)(ptr++); */
|
||||||
//subptr[0] = (int)subptr[0] * 29 / 32;
|
/*subptr[0] = (int)subptr[0] * 29 / 32; */
|
||||||
//subptr[1] = (int)subptr[0] * 29 / 32;
|
/*subptr[1] = (int)subptr[0] * 29 / 32; */
|
||||||
//subptr[2] = (int)subptr[0] * 29 / 32;
|
/*subptr[2] = (int)subptr[0] * 29 / 32; */
|
||||||
//subptr[3] = (int)subptr[0] * 29 / 32;
|
/*subptr[3] = (int)subptr[0] * 29 / 32; */
|
||||||
}
|
}
|
||||||
ptr++;
|
ptr++;
|
||||||
} while(ptr < end);
|
} while(ptr < end);
|
||||||
|
@ -173,10 +173,10 @@ static void synaescope_coreGo(void) {
|
||||||
|
|
||||||
brtot = 0;
|
brtot = 0;
|
||||||
for(i=1;i<FFT_BUFFER_SIZE/2;i++) {
|
for(i=1;i<FFT_BUFFER_SIZE/2;i++) {
|
||||||
//int h = (int)( corr_r[i]*280 / (corr_l[i]+corr_r[i]+0.0001)+20 );
|
/*int h = (int)( corr_r[i]*280 / (corr_l[i]+corr_r[i]+0.0001)+20 ); */
|
||||||
if (corr_l[i] > 0 || corr_r[i] > 0) {
|
if (corr_l[i] > 0 || corr_r[i] > 0) {
|
||||||
int h = (int)( corr_r[i] * syn_width / (corr_l[i]+corr_r[i]) );
|
int h = (int)( corr_r[i] * syn_width / (corr_l[i]+corr_r[i]) );
|
||||||
// int h = (int)( syn_width - 1 );
|
/* int h = (int)( syn_width - 1 ); */
|
||||||
int br1, br2, br = (int)(
|
int br1, br2, br = (int)(
|
||||||
(corr_l[i]+corr_r[i])*i*brightFactor2 );
|
(corr_l[i]+corr_r[i])*i*brightFactor2 );
|
||||||
int px = h,
|
int px = h,
|
||||||
|
@ -186,7 +186,7 @@ static void synaescope_coreGo(void) {
|
||||||
br2 = br*(128-clarity[i])>>8;
|
br2 = br*(128-clarity[i])>>8;
|
||||||
if (br1 < 0) br1 = 0; else if (br1 > 255) br1 = 255;
|
if (br1 < 0) br1 = 0; else if (br1 > 255) br1 = 255;
|
||||||
if (br2 < 0) br2 = 0; else if (br2 > 255) br2 = 255;
|
if (br2 < 0) br2 = 0; else if (br2 > 255) br2 = 255;
|
||||||
//unsigned char *p = output+ h*2+(164-((i<<8)>>FFT_BUFFER_SIZE_LOG))*(syn_width*2);
|
/*unsigned char *p = output+ h*2+(164-((i<<8)>>FFT_BUFFER_SIZE_LOG))*(syn_width*2); */
|
||||||
|
|
||||||
if (px < 30 || py < 30 || px > syn_width-30 || py > syn_height-30) {
|
if (px < 30 || py < 30 || px > syn_width-30 || py > syn_height-30) {
|
||||||
addPixel(output, px,py,br1,br2);
|
addPixel(output, px,py,br1,br2);
|
||||||
|
@ -289,7 +289,7 @@ static void synaescope16(void *data)
|
||||||
colEq[i] = color.pixel;
|
colEq[i] = color.pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create render image
|
/* Create render image */
|
||||||
if (image) {
|
if (image) {
|
||||||
gdk_image_destroy(image);
|
gdk_image_destroy(image);
|
||||||
image = NULL;
|
image = NULL;
|
||||||
|
@ -342,7 +342,7 @@ static void synaescope8(void *data)
|
||||||
colEq[i * 4 + 3] = color.pixel;
|
colEq[i * 4 + 3] = color.pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create render image
|
/* Create render image */
|
||||||
if (image) {
|
if (image) {
|
||||||
gdk_image_destroy(image);
|
gdk_image_destroy(image);
|
||||||
image = NULL;
|
image = NULL;
|
||||||
|
@ -409,13 +409,13 @@ static void init_synaescope()
|
||||||
|
|
||||||
for(i = 0; i <= FFT_BUFFER_SIZE / 2 + 1; i++) {
|
for(i = 0; i <= FFT_BUFFER_SIZE / 2 + 1; i++) {
|
||||||
double mult = (double)128 / ((FFT_BUFFER_SIZE * 16384) ^ 2);
|
double mult = (double)128 / ((FFT_BUFFER_SIZE * 16384) ^ 2);
|
||||||
// Result now guaranteed (well, almost) to be in range 0..128
|
/* Result now guaranteed (well, almost) to be in range 0..128 */
|
||||||
|
|
||||||
// Low values represent more frequencies, and thus get more
|
/* Low values represent more frequencies, and thus get more */
|
||||||
// intensity - this helps correct for that.
|
/* intensity - this helps correct for that. */
|
||||||
mult *= log(i + 1) / log(2);
|
mult *= log(i + 1) / log(2);
|
||||||
|
|
||||||
mult *= 3; // Adhoc parameter, looks about right for me.
|
mult *= 3; /* Adhoc parameter, looks about right for me. */
|
||||||
|
|
||||||
fftmult[i] = mult;
|
fftmult[i] = mult;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue