- dparams api changes
Original commit message from CVS: - dparams api changes - use a bufferpool - reinstate freq and volume as element properties
This commit is contained in:
parent
c5dbaef236
commit
434bc836ce
@ -68,7 +68,9 @@ int main(int argc,char *argv[]) {
|
|||||||
gst_bin_add(GST_BIN(thread),sinesrc);
|
gst_bin_add(GST_BIN(thread),sinesrc);
|
||||||
gst_bin_add(GST_BIN(thread),osssink);
|
gst_bin_add(GST_BIN(thread),osssink);
|
||||||
gst_element_connect(sinesrc,osssink);
|
gst_element_connect(sinesrc,osssink);
|
||||||
g_object_set(G_OBJECT(osssink),"fragment",0x00180008,NULL);
|
/* this breaks with current alsa oss compat lib
|
||||||
|
g_object_set(G_OBJECT(osssink),"fragment",0x00180008,NULL);*/
|
||||||
|
|
||||||
g_object_set(G_OBJECT(sinesrc),"buffersize",64,NULL);
|
g_object_set(G_OBJECT(sinesrc),"buffersize",64,NULL);
|
||||||
|
|
||||||
dpman = gst_dpman_get_manager (sinesrc);
|
dpman = gst_dpman_get_manager (sinesrc);
|
||||||
|
@ -85,7 +85,7 @@ static void gst_sinesrc_get_property (GObject *object, guint prop_id,
|
|||||||
/*static void gst_sinesrc_close_audio(GstSineSrc *src); */
|
/*static void gst_sinesrc_close_audio(GstSineSrc *src); */
|
||||||
/*static gboolean gst_sinesrc_open_audio(GstSineSrc *src); */
|
/*static gboolean gst_sinesrc_open_audio(GstSineSrc *src); */
|
||||||
|
|
||||||
static void gst_sinesrc_update_freq(GValue *value, gpointer data);
|
static void gst_sinesrc_update_freq(const GValue *value, gpointer data);
|
||||||
static void gst_sinesrc_populate_sinetable (GstSineSrc *src);
|
static void gst_sinesrc_populate_sinetable (GstSineSrc *src);
|
||||||
static inline void gst_sinesrc_update_table_inc (GstSineSrc *src);
|
static inline void gst_sinesrc_update_table_inc (GstSineSrc *src);
|
||||||
static void gst_sinesrc_force_caps (GstSineSrc *src);
|
static void gst_sinesrc_force_caps (GstSineSrc *src);
|
||||||
@ -143,7 +143,7 @@ gst_sinesrc_class_init (GstSineSrcClass *klass)
|
|||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQ,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQ,
|
||||||
g_param_spec_float("freq","freq","freq",
|
g_param_spec_float("freq","freq","freq",
|
||||||
0.0, 20000.0, 440.0, G_PARAM_READWRITE));
|
0.0, 20000.0, 440.0, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQ,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VOLUME,
|
||||||
g_param_spec_float("volume","volume","volume",
|
g_param_spec_float("volume","volume","volume",
|
||||||
0.0, 1.0, 0.8, G_PARAM_READWRITE));
|
0.0, 1.0, 0.8, G_PARAM_READWRITE));
|
||||||
|
|
||||||
@ -172,6 +172,7 @@ gst_sinesrc_init (GstSineSrc *src)
|
|||||||
src->table_size = 1024;
|
src->table_size = 1024;
|
||||||
src->buffer_size=1024;
|
src->buffer_size=1024;
|
||||||
src->timestamp=0LL;
|
src->timestamp=0LL;
|
||||||
|
src->bufpool=NULL;
|
||||||
|
|
||||||
src->seq = 0;
|
src->seq = 0;
|
||||||
|
|
||||||
@ -181,8 +182,7 @@ gst_sinesrc_init (GstSineSrc *src)
|
|||||||
src->dpman,
|
src->dpman,
|
||||||
g_param_spec_float("freq","Frequency (Hz)","Frequency of the tone",
|
g_param_spec_float("freq","Frequency (Hz)","Frequency of the tone",
|
||||||
10.0, 10000.0, 350.0, G_PARAM_READWRITE),
|
10.0, 10000.0, 350.0, G_PARAM_READWRITE),
|
||||||
TRUE,
|
"hertz",
|
||||||
FALSE,
|
|
||||||
gst_sinesrc_update_freq,
|
gst_sinesrc_update_freq,
|
||||||
src
|
src
|
||||||
);
|
);
|
||||||
@ -191,8 +191,7 @@ gst_sinesrc_init (GstSineSrc *src)
|
|||||||
src->dpman,
|
src->dpman,
|
||||||
g_param_spec_float("volume","Volume","Volume of the tone",
|
g_param_spec_float("volume","Volume","Volume of the tone",
|
||||||
0.0, 1.0, 0.8, G_PARAM_READWRITE),
|
0.0, 1.0, 0.8, G_PARAM_READWRITE),
|
||||||
FALSE,
|
"scalar",
|
||||||
FALSE,
|
|
||||||
&(src->volume)
|
&(src->volume)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -215,16 +214,20 @@ gst_sinesrc_get(GstPad *pad)
|
|||||||
g_return_val_if_fail (pad != NULL, NULL);
|
g_return_val_if_fail (pad != NULL, NULL);
|
||||||
src = GST_SINESRC(gst_pad_get_parent (pad));
|
src = GST_SINESRC(gst_pad_get_parent (pad));
|
||||||
|
|
||||||
buf = gst_buffer_new();
|
if (src->bufpool == NULL) {
|
||||||
g_return_val_if_fail (buf, NULL);
|
src->bufpool = gst_buffer_pool_get_default (2 * src->buffer_size, 8);
|
||||||
samples = g_new(gint16, src->buffer_size);
|
}
|
||||||
|
|
||||||
|
buf = (GstBuffer *) gst_buffer_new_from_pool (src->bufpool, 0, 0);
|
||||||
|
GST_BUFFER_TIMESTAMP(buf) = src->timestamp;
|
||||||
|
|
||||||
|
samples = (gint16*)GST_BUFFER_DATA(buf);
|
||||||
GST_BUFFER_DATA(buf) = (gpointer) samples;
|
GST_BUFFER_DATA(buf) = (gpointer) samples;
|
||||||
GST_BUFFER_SIZE(buf) = 2 * src->buffer_size;
|
|
||||||
|
|
||||||
frame_countdown = GST_DPMAN_PREPROCESS(src->dpman, src->buffer_size, src->timestamp);
|
frame_countdown = GST_DPMAN_PREPROCESS(src->dpman, src->buffer_size, src->timestamp);
|
||||||
|
|
||||||
src->timestamp += (gint64)src->buffer_size * 1000000000LL / (gint64)src->samplerate;
|
src->timestamp += src->buffer_size * 10^9 / src->samplerate;
|
||||||
|
|
||||||
while(GST_DPMAN_PROCESS_COUNTDOWN(src->dpman, frame_countdown, i)) {
|
while(GST_DPMAN_PROCESS_COUNTDOWN(src->dpman, frame_countdown, i)) {
|
||||||
|
|
||||||
src->table_lookup = (gint)(src->table_pos);
|
src->table_lookup = (gint)(src->table_pos);
|
||||||
@ -255,6 +258,7 @@ gst_sinesrc_get(GstPad *pad)
|
|||||||
)* src->volume * 32767.0;
|
)* src->volume * 32767.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (src->newcaps) {
|
if (src->newcaps) {
|
||||||
gst_sinesrc_force_caps(src);
|
gst_sinesrc_force_caps(src);
|
||||||
}
|
}
|
||||||
@ -290,7 +294,7 @@ gst_sinesrc_set_property (GObject *object, guint prop_id, const GValue *value, G
|
|||||||
break;
|
break;
|
||||||
case ARG_FREQ:
|
case ARG_FREQ:
|
||||||
gst_dpman_bypass_dparam(src->dpman, "freq");
|
gst_dpman_bypass_dparam(src->dpman, "freq");
|
||||||
src->freq = g_value_get_float (value);
|
gst_sinesrc_update_freq(value, src);
|
||||||
break;
|
break;
|
||||||
case ARG_VOLUME:
|
case ARG_VOLUME:
|
||||||
gst_dpman_bypass_dparam(src->dpman, "volume");
|
gst_dpman_bypass_dparam(src->dpman, "volume");
|
||||||
@ -374,7 +378,7 @@ gst_sinesrc_populate_sinetable (GstSineSrc *src)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_sinesrc_update_freq(GValue *value, gpointer data)
|
gst_sinesrc_update_freq(const GValue *value, gpointer data)
|
||||||
{
|
{
|
||||||
GstSineSrc *src = (GstSineSrc*)data;
|
GstSineSrc *src = (GstSineSrc*)data;
|
||||||
g_return_if_fail(GST_IS_SINESRC(src));
|
g_return_if_fail(GST_IS_SINESRC(src));
|
||||||
|
@ -78,6 +78,7 @@ struct _GstSineSrc {
|
|||||||
gulong seq;
|
gulong seq;
|
||||||
|
|
||||||
gint64 timestamp;
|
gint64 timestamp;
|
||||||
|
GstBufferPool *bufpool;
|
||||||
|
|
||||||
gboolean newcaps;
|
gboolean newcaps;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user