AudioRingBuffer

This object is the base class for audio ringbuffers used by the base audio source and sink classes.

The ringbuffer abstracts a circular buffer of data. One reader and one writer can operate on the data from different threads in a lockfree manner. The base class is sufficiently flexible to be used as an abstraction for DMA based ringbuffers as well as a pure software implementations.

Members

Functions

acquire
bool acquire(gstaudio.audio_ring_buffer_spec.AudioRingBufferSpec spec)

Allocate the resources for the ringbuffer. This function fills in the data pointer of the ring buffer with a valid #GstBuffer to which samples can be written.

activate
bool activate(bool active)

Activate buf to start or stop pulling data.

advance
void advance(uint advance)

Subclasses should call this function to notify the fact that advance segments are now processed by the device.

clear
void clear(int segment)

Clear the given segment of the buffer with silence samples. This function is used by subclasses.

clearAll
void clearAll()

Clear all samples from the ringbuffer.

closeDevice
bool closeDevice()

Close the audio device associated with the ring buffer. The ring buffer should already have been released via gstaudio.audio_ring_buffer.AudioRingBuffer.release.

commit
uint commit(ulong sample, ubyte[] data, int outSamples, int accum)

Commit in_samples samples pointed to by data to the ringbuffer buf.

convert
bool convert(gst.types.Format srcFmt, long srcVal, gst.types.Format destFmt, long destVal)

Convert src_val in src_fmt to the equivalent value in dest_fmt. The result will be put in dest_val.

delay
uint delay()

Get the number of samples queued in the audio device. This is usually less than the segment size but can be bigger when the implementation uses another internal buffer between the audio device.

deviceIsOpen
bool deviceIsOpen()

Checks the status of the device associated with the ring buffer.

isAcquired
bool isAcquired()

Check if the ringbuffer is acquired and ready to use.

isActive
bool isActive()

Check if buf is activated.

isFlushing
bool isFlushing()

Check if buf is flushing.

mayStart
void mayStart(bool allowed)

Tell the ringbuffer that it is allowed to start playback when the ringbuffer is filled with samples.

openDevice
bool openDevice()

Open the audio device associated with the ring buffer. Does not perform any setup on the device. You must open the device before acquiring the ring buffer.

pause
bool pause()

Pause processing samples from the ringbuffer.

prepareRead
bool prepareRead(int segment, ubyte[] readptr)

Returns a pointer to memory where the data from segment segment can be found. This function is mostly used by subclasses.

read
uint read(ulong sample, ubyte[] data, gst.types.ClockTime timestamp)

Read len samples from the ringbuffer into the memory pointed to by data. The first sample should be read from position sample in the ringbuffer.

release
bool release()

Free the resources of the ringbuffer.

samplesDone
ulong samplesDone()

Get the number of samples that were processed by the ringbuffer since it was last started. This does not include the number of samples not yet processed (see gstaudio.audio_ring_buffer.AudioRingBuffer.delay).

setCallback
void setCallback(gstaudio.types.AudioRingBufferCallback cb)

Sets the given callback function on the buffer. This function will be called every time a segment has been written to a device.

setErrored
void setErrored()

Mark the ringbuffer as errored after it has started.

setFlushing
void setFlushing(bool flushing)

Set the ringbuffer to flushing mode or normal mode.

setSample
void setSample(ulong sample)

Make sure that the next sample written to the device is accounted for as being the sample sample written to the device. This value will be used in reporting the current sample position of the ringbuffer.

setTimestamp
void setTimestamp(int readseg, gst.types.ClockTime timestamp)
start
bool start()

Start processing samples from the ringbuffer.

stop
bool stop()

Stop processing samples from the ringbuffer.

Static functions

debugSpecBuff
void debugSpecBuff(gstaudio.audio_ring_buffer_spec.AudioRingBufferSpec spec)

Print debug info about the buffer sized in spec to the debug log.

debugSpecCaps
void debugSpecCaps(gstaudio.audio_ring_buffer_spec.AudioRingBufferSpec spec)

Print debug info about the parsed caps in spec to the debug log.

parseCaps
bool parseCaps(gstaudio.audio_ring_buffer_spec.AudioRingBufferSpec spec, gst.caps.Caps caps)

Parse caps into spec.

Inherited Members

From ObjectGst

checkUniqueness
bool checkUniqueness(gst.object.ObjectGst[] list, string name)

Checks to see if there is any object named name in list. This function does not do any locking of any kind. You might want to protect the provided list with the lock of the owner of the list. This function will lock each #GstObject in the list to compare the name, so be careful when passing a list with a locked object.

defaultDeepNotify
void defaultDeepNotify(gobject.object.ObjectG object, gst.object.ObjectGst orig, gobject.param_spec.ParamSpec pspec, string[] excludedProps)

A default deep_notify signal callback for an object. The user data should contain a pointer to an array of strings that should be excluded from the notify. The default handler will print the new value of the property using g_print.

replace
bool replace(gst.object.ObjectGst oldobj, gst.object.ObjectGst newobj)

Atomically modifies a pointer to point to a new object. The reference count of oldobj is decreased and the reference count of newobj is increased.

addControlBinding
bool addControlBinding(gst.control_binding.ControlBinding binding)

Attach the #GstControlBinding to the object. If there already was a #GstControlBinding for this property it will be replaced.

defaultError
void defaultError(glib.error.ErrorG error, string debug_)

A default error function that uses glib.global.printerr to display the error message and the optional debug string..

getControlBinding
gst.control_binding.ControlBinding getControlBinding(string propertyName)

Gets the corresponding #GstControlBinding for the property. This should be unreferenced again after use.

getControlRate
gst.types.ClockTime getControlRate()

Obtain the control-rate for this object. Audio processing #GstElement objects will use this rate to sub-divide their processing loop and call gst.object.ObjectGst.syncValues in between. The length of the processing segment should be up to control-rate nanoseconds.

getGValueArray
bool getGValueArray(string propertyName, gst.types.ClockTime timestamp, gst.types.ClockTime interval, gobject.value.Value[] values)

Gets a number of #GValues for the given controlled property starting at the requested time. The array values need to hold enough space for n_values of #GValue.

getName
string getName()

Returns a copy of the name of object. Caller should glib.global.gfree the return value after usage. For a nameless object, this returns null, which you can safely glib.global.gfree as well.

getParent
gst.object.ObjectGst getParent()

Returns the parent of object. This function increases the refcount of the parent object so you should gst.object.ObjectGst.unref it after usage.

getPathString
string getPathString()

Generates a string describing the path of object in the object hierarchy. Only useful (or used) for debugging.

getValue
gobject.value.Value getValue(string propertyName, gst.types.ClockTime timestamp)

Gets the value for the given controlled property at the requested time.

hasActiveControlBindings
bool hasActiveControlBindings()

Check if the object has active controlled properties.

hasAncestor
bool hasAncestor(gst.object.ObjectGst ancestor)

Check if object has an ancestor ancestor somewhere up in the hierarchy. One can e.g. check if a #GstElement is inside a #GstPipeline.

hasAsAncestor
bool hasAsAncestor(gst.object.ObjectGst ancestor)

Check if object has an ancestor ancestor somewhere up in the hierarchy. One can e.g. check if a #GstElement is inside a #GstPipeline.

hasAsParent
bool hasAsParent(gst.object.ObjectGst parent)

Check if parent is the parent of object. E.g. a #GstElement can check if it owns a given #GstPad.

removeControlBinding
bool removeControlBinding(gst.control_binding.ControlBinding binding)

Removes the corresponding #GstControlBinding. If it was the last ref of the binding, it will be disposed.

setControlBindingDisabled
void setControlBindingDisabled(string propertyName, bool disabled)

This function is used to disable the control bindings on a property for some time, i.e. gst.object.ObjectGst.syncValues will do nothing for the property.

setControlBindingsDisabled
void setControlBindingsDisabled(bool disabled)

This function is used to disable all controlled properties of the object for some time, i.e. gst.object.ObjectGst.syncValues will do nothing.

setControlRate
void setControlRate(gst.types.ClockTime controlRate)

Change the control-rate for this object. Audio processing #GstElement objects will use this rate to sub-divide their processing loop and call gst.object.ObjectGst.syncValues in between. The length of the processing segment should be up to control-rate nanoseconds.

setName
bool setName(string name)

Sets the name of object, or gives object a guaranteed unique name (if name is null). This function makes a copy of the provided name, so the caller retains ownership of the name it sent.

setParent
bool setParent(gst.object.ObjectGst parent)

Sets the parent of object to parent. The object's reference count will be incremented, and any floating reference will be removed (see gst.object.ObjectGst.refSink).

suggestNextSync
gst.types.ClockTime suggestNextSync()

Returns a suggestion for timestamps where buffers should be split to get best controller results.

syncValues
bool syncValues(gst.types.ClockTime timestamp)

Sets the properties of the object, according to the #GstControlSources that (maybe) handle them and for the given timestamp.

unparent
void unparent()

Clear the parent of object, removing the associated reference. This function decreases the refcount of object.

connectDeepNotify
ulong connectDeepNotify(string detail, T callback, Flag!"After" after)

Connect to DeepNotify signal.