## gstbaseaudiosink gstbaseaudiosink — Base class for audio sinks |

## Synopsis

    #include <gst/audio/gstbaseaudiosink.h>

    struct              GstBaseAudioSink;
    struct              GstBaseAudioSinkClass;
    enum                GstBaseAudioSinkSlaveMethod;
    #define             GST_BASE_AUDIO_SINK_CLOCK           (obj)
    #define             GST_BASE_AUDIO_SINK_PAD             (obj)
    GstRingBuffer *     gst_base_audio_sink_create_ringbuffer
                                                            (GstBaseAudioSink *sink);
    void                gst_base_audio_sink_set_provide_clock
                                                            (GstBaseAudioSink *sink,
                                                             gboolean provide);
    gboolean            gst_base_audio_sink_get_provide_clock
                                                            (GstBaseAudioSink *sink);
    void                gst_base_audio_sink_set_slave_method
                                                            (GstBaseAudioSink *sink,
                                                             GstBaseAudioSinkSlaveMethod method);
    GstBaseAudioSinkSlaveMethod gst_base_audio_sink_get_slave_method
                                                            (GstBaseAudioSink *sink);
    gint64              gst_base_audio_sink_get_drift_tolerance
                                                            (GstBaseAudioSink *sink);
    void                gst_base_audio_sink_set_drift_tolerance
                                                            (GstBaseAudioSink *sink,
                                                             gint64 drift_tolerance);

## Object Hierarchy

      GObject
       +----GstObject
             +----GstElement
                   +----GstBaseSink
                         +----GstBaseAudioSink
                               +----GstAudioSink

## Properties

      "alignment-threshold"      guint64               : Read / Write
      "buffer-time"              gint64                : Read / Write
      "can-activate-pull"        gboolean              : Read / Write
      "discont-wait"             guint64               : Read / Write
      "drift-tolerance"          gint64                : Read / Write
      "latency-time"             gint64                : Read / Write
      "provide-clock"            gboolean              : Read / Write
      "slave-method"             GstBaseAudioSinkSlaveMethod  : Read / Write

## Description

This is the base class for audio sinks. Subclasses need to implement the ::create_ringbuffer vmethod. This base class will then take care of writing samples to the ringbuffer, synchronisation, clipping and flushing.

Last reviewed on 2006-09-27 (0.10.12)

## Details

### struct GstBaseAudioSink

    struct GstBaseAudioSink;

Opaque GstBaseAudioSink.

### struct GstBaseAudioSinkClass

    struct GstBaseAudioSinkClass {
      GstBaseSinkClass parent_class;

      /* subclass ringbuffer allocation */
      GstRingBuffer* (*create_ringbuffer)  (GstBaseAudioSink *sink);

      /* subclass payloader */
      GstBuffer*     (*payload)            (GstBaseAudioSink *sink,
                                            GstBuffer        *buffer);
    };

GstBaseAudioSink class. Override the vmethod to implement functionality.

GstBaseSinkClass `parent_class`; | the parent class.
`create_ringbuffer` () | create and return a GstRingBuffer to write to.
`payload` () | payload data in a format suitable to write to the sink. If no payloading is required, returns a reffed copy of the original buffer, else returns the payloaded buffer with all other metadata copied. (Since: 0.10.36)

### enum GstBaseAudioSinkSlaveMethod

    typedef enum {
      GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE,
      GST_BASE_AUDIO_SINK_SLAVE_SKEW,
      GST_BASE_AUDIO_SINK_SLAVE_NONE
    } GstBaseAudioSinkSlaveMethod;

Different possible clock slaving algorithms used when the internal audio clock is not selected as the pipeline master clock.

`GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE` | Resample to match the master clock
`GST_BASE_AUDIO_SINK_SLAVE_SKEW` | Adjust playout pointer when master clock drifts too much.
`GST_BASE_AUDIO_SINK_SLAVE_NONE` | No adjustment is done.

### GST_BASE_AUDIO_SINK_CLOCK()

    #define GST_BASE_AUDIO_SINK_CLOCK(obj)   (GST_BASE_AUDIO_SINK (obj)->clock)

Get the GstClock of `obj`.

`obj` : | a GstBaseAudioSink

### GST_BASE_AUDIO_SINK_PAD()

    #define GST_BASE_AUDIO_SINK_PAD(obj)     (GST_BASE_SINK (obj)->sinkpad)

Get the sink GstPad of `obj`.

`obj` : | a GstBaseAudioSink

### gst_base_audio_sink_create_ringbuffer ()

    GstRingBuffer *     gst_base_audio_sink_create_ringbuffer
                                                            (GstBaseAudioSink *sink);

Create and return the GstRingBuffer for `sink`. This function will call the ::create_ringbuffer vmethod and will set `sink` as the parent of the returned buffer (see `gst_object_set_parent()`).

`sink` : | a GstBaseAudioSink.
Returns : | The new ringbuffer of `sink`.

### gst_base_audio_sink_set_provide_clock ()

    void                gst_base_audio_sink_set_provide_clock
                                                            (GstBaseAudioSink *sink,
                                                             gboolean provide);

Controls whether `sink` will provide a clock or not. If `provide` is `TRUE`, `gst_element_provide_clock()` will return a clock that reflects the datarate of `sink`. If `provide` is `FALSE`, `gst_element_provide_clock()` will return NULL.

`sink` : | a GstBaseAudioSink
`provide` : | new state

Since 0.10.16

### gst_base_audio_sink_get_provide_clock ()

    gboolean            gst_base_audio_sink_get_provide_clock
                                                            (GstBaseAudioSink *sink);

Queries whether `sink` will provide a clock or not. See also gst_base_audio_sink_set_provide_clock.

`sink` : | a GstBaseAudioSink
Returns : | `TRUE` if `sink` will provide a clock.

Since 0.10.16

### gst_base_audio_sink_set_slave_method ()

    void                gst_base_audio_sink_set_slave_method
                                                            (GstBaseAudioSink *sink,
                                                             GstBaseAudioSinkSlaveMethod method);

Controls how clock slaving will be performed in `sink`.

`sink` : | a GstBaseAudioSink
`method` : | the new slave method

Since 0.10.16

### gst_base_audio_sink_get_slave_method ()

    GstBaseAudioSinkSlaveMethod gst_base_audio_sink_get_slave_method
                                                            (GstBaseAudioSink *sink);

Get the current slave method used by `sink`.

`sink` : | a GstBaseAudioSink
Returns : | The current slave method used by `sink`.

Since 0.10.16

### gst_base_audio_sink_get_drift_tolerance ()

    gint64              gst_base_audio_sink_get_drift_tolerance
                                                            (GstBaseAudioSink *sink);

Get the current drift tolerance, in microseconds, used by `sink`.

`sink` : | a GstBaseAudioSink
Returns : | The current drift tolerance used by `sink`.

Since 0.10.31

### gst_base_audio_sink_set_drift_tolerance ()

    void                gst_base_audio_sink_set_drift_tolerance
                                                            (GstBaseAudioSink *sink,
                                                             gint64 drift_tolerance);

Controls the sink's drift tolerance.

`sink` : | a GstBaseAudioSink
`drift_tolerance` : | the new drift tolerance in microseconds

Since 0.10.31

## Property Details

### The `"alignment-threshold"` property

      "alignment-threshold"      guint64               : Read / Write

Timestamp alignment threshold in nanoseconds.

Allowed values: [1,18446744073709551614]

Default value: 40000000

### The `"buffer-time"` property

      "buffer-time"              gint64                : Read / Write

Size of audio buffer in microseconds.

Allowed values: >= 1

Default value: 200000

### The `"can-activate-pull"` property

      "can-activate-pull"        gboolean              : Read / Write

Allow pull-based scheduling.

Default value: FALSE

### The `"discont-wait"` property

      "discont-wait"             guint64               : Read / Write

A window of time in nanoseconds to wait before creating a discontinuity as a result of breaching the drift-tolerance.

Allowed values: <= 18446744073709551614

Default value: 1000000000

Since 0.10.36

### The `"drift-tolerance"` property

      "drift-tolerance"          gint64                : Read / Write

Controls the amount of time in microseconds that clocks are allowed to drift before resynchronisation happens.

Allowed values: >= 1

Default value: 40000

Since 0.10.26

### The `"latency-time"` property

      "latency-time"             gint64                : Read / Write

Audio latency in microseconds.

Allowed values: >= 1

Default value: 10000

### The `"provide-clock"` property

      "provide-clock"            gboolean              : Read / Write

Provide a clock to be used as the global pipeline clock.

Default value: TRUE

### The `"slave-method"` property

      "slave-method"             GstBaseAudioSinkSlaveMethod  : Read / Write

Algorithm to use to match the rate of the masterclock.

Default value: GST_BASE_AUDIO_SINK_SLAVE_SKEW

## See Also

GstAudioSink, GstRingBuffer.