diff --git a/gst/elements/gstsinesrc.c b/gst/elements/gstsinesrc.c index e2ce9d7ef6..23bad6be39 100644 --- a/gst/elements/gstsinesrc.c +++ b/gst/elements/gstsinesrc.c @@ -168,6 +168,7 @@ gst_sinesrc_init (GstSineSrc *src) src->table_pos = 0.0; src->table_size = 1024; src->buffer_size=1024; + src->timestamp=0LL; src->seq = 0; @@ -224,7 +225,9 @@ gst_sinesrc_get(GstPad *pad) GST_BUFFER_SIZE(buf) = 2 * src->buffer_size; dpman = GST_ELEMENT_DPARAM_MANAGER(GST_ELEMENT(src)); - frame_countdown = GST_DPMAN_PREPROCESS(dpman, src->buffer_size, 0LL); + frame_countdown = GST_DPMAN_PREPROCESS(dpman, src->buffer_size, src->timestamp); + + src->timestamp += (gint64)src->buffer_size * 1000000000LL / (gint64)src->samplerate; // GST_DEBUG(GST_CAT_PARAMS, "vol_scale = %f\n", src->vol_scale); while(GST_DPMAN_PROCESS_COUNTDOWN(dpman, frame_countdown, i)) { @@ -369,7 +372,7 @@ gst_sinesrc_update_volume(GValue *value, gpointer data) src->volume = g_value_get_float(value); src->vol_scale = 32767.0 * src->volume; - GST_DEBUG(GST_CAT_PARAMS, "volume %f\n", src->volume); + //GST_DEBUG(GST_CAT_PARAMS, "volume %f\n", src->volume); } @@ -382,7 +385,7 @@ gst_sinesrc_update_freq(GValue *value, gpointer data) src->freq = g_value_get_float(value); src->table_inc = src->table_size * src->freq / src->samplerate; - GST_DEBUG(GST_CAT_PARAMS, "freq %f\n", src->freq); + //GST_DEBUG(GST_CAT_PARAMS, "freq %f\n", src->freq); } static inline void diff --git a/gst/elements/gstsinesrc.h b/gst/elements/gstsinesrc.h index 58e03fd72b..cd9c044e5d 100644 --- a/gst/elements/gstsinesrc.h +++ b/gst/elements/gstsinesrc.h @@ -76,6 +76,8 @@ struct _GstSineSrc { gint buffer_size; gulong seq; + + gint64 timestamp; gboolean newcaps; diff --git a/plugins/elements/gstsinesrc.c b/plugins/elements/gstsinesrc.c index e2ce9d7ef6..23bad6be39 100644 --- a/plugins/elements/gstsinesrc.c +++ b/plugins/elements/gstsinesrc.c @@ -168,6 +168,7 @@ gst_sinesrc_init (GstSineSrc *src) src->table_pos = 0.0; src->table_size = 1024; src->buffer_size=1024; + src->timestamp=0LL; src->seq = 0; @@ -224,7 +225,9 @@ gst_sinesrc_get(GstPad *pad) GST_BUFFER_SIZE(buf) = 2 * src->buffer_size; dpman = GST_ELEMENT_DPARAM_MANAGER(GST_ELEMENT(src)); - frame_countdown = GST_DPMAN_PREPROCESS(dpman, src->buffer_size, 0LL); + frame_countdown = GST_DPMAN_PREPROCESS(dpman, src->buffer_size, src->timestamp); + + src->timestamp += (gint64)src->buffer_size * 1000000000LL / (gint64)src->samplerate; // GST_DEBUG(GST_CAT_PARAMS, "vol_scale = %f\n", src->vol_scale); while(GST_DPMAN_PROCESS_COUNTDOWN(dpman, frame_countdown, i)) { @@ -369,7 +372,7 @@ gst_sinesrc_update_volume(GValue *value, gpointer data) src->volume = g_value_get_float(value); src->vol_scale = 32767.0 * src->volume; - GST_DEBUG(GST_CAT_PARAMS, "volume %f\n", src->volume); + //GST_DEBUG(GST_CAT_PARAMS, "volume %f\n", src->volume); } @@ -382,7 +385,7 @@ gst_sinesrc_update_freq(GValue *value, gpointer data) src->freq = g_value_get_float(value); src->table_inc = src->table_size * src->freq / src->samplerate; - GST_DEBUG(GST_CAT_PARAMS, "freq %f\n", src->freq); + //GST_DEBUG(GST_CAT_PARAMS, "freq %f\n", src->freq); } static inline void diff --git a/plugins/elements/gstsinesrc.h b/plugins/elements/gstsinesrc.h index 58e03fd72b..cd9c044e5d 100644 --- a/plugins/elements/gstsinesrc.h +++ b/plugins/elements/gstsinesrc.h @@ -76,6 +76,8 @@ struct _GstSineSrc { gint buffer_size; gulong seq; + + gint64 timestamp; gboolean newcaps;