diff options
Diffstat (limited to 'gst/audiobuffersplit/gstaudiobuffersplit.c')
-rw-r--r-- | gst/audiobuffersplit/gstaudiobuffersplit.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.c b/gst/audiobuffersplit/gstaudiobuffersplit.c index f5ec18085..e717b5ba5 100644 --- a/gst/audiobuffersplit/gstaudiobuffersplit.c +++ b/gst/audiobuffersplit/gstaudiobuffersplit.c @@ -45,6 +45,7 @@ enum { PROP_0, PROP_OUTPUT_BUFFER_DURATION, + PROP_OUTPUT_BUFFER_SIZE, PROP_ALIGNMENT_THRESHOLD, PROP_DISCONT_WAIT, PROP_STRICT_BUFFER_SIZE, @@ -98,6 +99,22 @@ gst_audio_buffer_split_class_init (GstAudioBufferSplitClass * klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_READY)); + /** + * GstAudioBufferSplit:output-buffer-size + * + * Allow specifying a buffer size for splitting. Zero by default. + * Takes precedence over output-buffer-duration when set to a + * non zero value else will not be in effect. + * + * Since: 1.20 + */ + g_object_class_install_property (gobject_class, PROP_OUTPUT_BUFFER_SIZE, + g_param_spec_uint ("output-buffer-size", "Output buffer size", + "Output block size in bytes, takes precedence over " + "buffer duration when set to non zero", 0, G_MAXINT, 0, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_ALIGNMENT_THRESHOLD, g_param_spec_uint64 ("alignment-threshold", "Alignment Threshold", "Timestamp alignment threshold in nanoseconds", 0, @@ -171,6 +188,7 @@ gst_audio_buffer_split_init (GstAudioBufferSplit * self) self->output_buffer_duration_d = DEFAULT_OUTPUT_BUFFER_DURATION_D; self->strict_buffer_size = DEFAULT_STRICT_BUFFER_SIZE; self->gapless = DEFAULT_GAPLESS; + self->output_buffer_size = 0; self->adapter = gst_adapter_new (); @@ -211,6 +229,11 @@ gst_audio_buffer_split_update_samples_per_buffer (GstAudioBufferSplit * self) goto out; } + if (self->output_buffer_size) { + self->output_buffer_duration_n = GST_AUDIO_INFO_BPF (&self->info); + self->output_buffer_duration_d = self->output_buffer_size; + } + self->samples_per_buffer = (((guint64) GST_AUDIO_INFO_RATE (&self->info)) * self->output_buffer_duration_n) / self->output_buffer_duration_d; @@ -248,6 +271,10 @@ gst_audio_buffer_split_set_property (GObject * object, guint property_id, gst_value_get_fraction_denominator (value); gst_audio_buffer_split_update_samples_per_buffer (self); break; + case PROP_OUTPUT_BUFFER_SIZE: + self->output_buffer_size = g_value_get_uint (value); + gst_audio_buffer_split_update_samples_per_buffer (self); + break; case PROP_ALIGNMENT_THRESHOLD: GST_OBJECT_LOCK (self); gst_audio_stream_align_set_alignment_threshold (self->stream_align, @@ -286,6 +313,9 @@ gst_audio_buffer_split_get_property (GObject * object, guint property_id, gst_value_set_fraction (value, self->output_buffer_duration_n, self->output_buffer_duration_d); break; + case PROP_OUTPUT_BUFFER_SIZE: + g_value_set_uint (value, self->output_buffer_size); + break; case PROP_ALIGNMENT_THRESHOLD: GST_OBJECT_LOCK (self); g_value_set_uint64 (value, |