diff options
-rw-r--r-- | docs/plugins/gst_plugins_cache.json | 14 | ||||
-rw-r--r-- | gst/audiobuffersplit/gstaudiobuffersplit.c | 30 | ||||
-rw-r--r-- | gst/audiobuffersplit/gstaudiobuffersplit.h | 1 |
3 files changed, 45 insertions, 0 deletions
diff --git a/docs/plugins/gst_plugins_cache.json b/docs/plugins/gst_plugins_cache.json index 82491a194..0b952c8a8 100644 --- a/docs/plugins/gst_plugins_cache.json +++ b/docs/plugins/gst_plugins_cache.json @@ -1054,6 +1054,20 @@ "type": "GstFraction", "writable": true }, + "output-buffer-size": { + "blurb": "Output block size in bytes, takes precedence over buffer duration when set to non zero", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "0", + "mutable": "ready", + "readable": true, + "type": "guint", + "writable": true + }, "strict-buffer-size": { "blurb": "Discard the last samples at EOS or discont if they are too small to fill a buffer", "conditionally-available": false, 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, diff --git a/gst/audiobuffersplit/gstaudiobuffersplit.h b/gst/audiobuffersplit/gstaudiobuffersplit.h index d902cbd09..31fda864a 100644 --- a/gst/audiobuffersplit/gstaudiobuffersplit.h +++ b/gst/audiobuffersplit/gstaudiobuffersplit.h @@ -45,6 +45,7 @@ struct _GstAudioBufferSplit { /* Properties */ gint output_buffer_duration_n; gint output_buffer_duration_d; + guint output_buffer_size; /* State */ GstSegment in_segment, out_segment; |