| .. -*- coding: utf-8; mode: rst -*- |
| |
| .. _audio_data_types: |
| |
| **************** |
| Audio Data Types |
| **************** |
| |
| This section describes the structures, data types and defines used when |
| talking to the audio device. |
| |
| .. c:type:: audio_stream_source |
| |
| The audio stream source is set through the AUDIO_SELECT_SOURCE call |
| and can take the following values, depending on whether we are replaying |
| from an internal (demux) or external (user write) source. |
| |
| |
| .. code-block:: c |
| |
| typedef enum { |
| AUDIO_SOURCE_DEMUX, |
| AUDIO_SOURCE_MEMORY |
| } audio_stream_source_t; |
| |
| AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the |
| frontend or the DVR device) as the source of the video stream. If |
| AUDIO_SOURCE_MEMORY is selected the stream comes from the application |
| through the ``write()`` system call. |
| |
| |
| .. c:type:: audio_play_state |
| |
| The following values can be returned by the AUDIO_GET_STATUS call |
| representing the state of audio playback. |
| |
| |
| .. code-block:: c |
| |
| typedef enum { |
| AUDIO_STOPPED, |
| AUDIO_PLAYING, |
| AUDIO_PAUSED |
| } audio_play_state_t; |
| |
| |
| .. c:type:: audio_channel_select |
| |
| The audio channel selected via AUDIO_CHANNEL_SELECT is determined by |
| the following values. |
| |
| |
| .. code-block:: c |
| |
| typedef enum { |
| AUDIO_STEREO, |
| AUDIO_MONO_LEFT, |
| AUDIO_MONO_RIGHT, |
| AUDIO_MONO, |
| AUDIO_STEREO_SWAPPED |
| } audio_channel_select_t; |
| |
| |
| .. c:type:: audio_status |
| |
| The AUDIO_GET_STATUS call returns the following structure informing |
| about various states of the playback operation. |
| |
| |
| .. code-block:: c |
| |
| typedef struct audio_status { |
| boolean AV_sync_state; |
| boolean mute_state; |
| audio_play_state_t play_state; |
| audio_stream_source_t stream_source; |
| audio_channel_select_t channel_select; |
| boolean bypass_mode; |
| audio_mixer_t mixer_state; |
| } audio_status_t; |
| |
| |
| .. c:type:: audio_mixer |
| |
| The following structure is used by the AUDIO_SET_MIXER call to set the |
| audio volume. |
| |
| |
| .. code-block:: c |
| |
| typedef struct audio_mixer { |
| unsigned int volume_left; |
| unsigned int volume_right; |
| } audio_mixer_t; |
| |
| |
| .. _audio_encodings: |
| |
| audio encodings |
| =============== |
| |
| A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the |
| following bits set according to the hardwares capabilities. |
| |
| |
| .. code-block:: c |
| |
| #define AUDIO_CAP_DTS 1 |
| #define AUDIO_CAP_LPCM 2 |
| #define AUDIO_CAP_MP1 4 |
| #define AUDIO_CAP_MP2 8 |
| #define AUDIO_CAP_MP3 16 |
| #define AUDIO_CAP_AAC 32 |
| #define AUDIO_CAP_OGG 64 |
| #define AUDIO_CAP_SDDS 128 |
| #define AUDIO_CAP_AC3 256 |
| |
| .. c:type:: audio_karaoke |
| |
| The ioctl AUDIO_SET_KARAOKE uses the following format: |
| |
| |
| .. code-block:: c |
| |
| typedef |
| struct audio_karaoke { |
| int vocal1; |
| int vocal2; |
| int melody; |
| } audio_karaoke_t; |
| |
| If Vocal1 or Vocal2 are non-zero, they get mixed into left and right t |
| at 70% each. If both, Vocal1 and Vocal2 are non-zero, Vocal1 gets mixed |
| into the left channel and Vocal2 into the right channel at 100% each. Ff |
| Melody is non-zero, the melody channel gets mixed into left and right. |
| |
| |
| .. c:type:: audio_attributes |
| |
| The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES: |
| |
| |
| .. code-block:: c |
| |
| typedef uint16_t audio_attributes_t; |
| /* bits: descr. */ |
| /* 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */ |
| /* 12 multichannel extension */ |
| /* 11-10 audio type (0=not spec, 1=language included) */ |
| /* 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) */ |
| /* 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, */ |
| /* 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */ |
| /* 2- 0 number of audio channels (n+1 channels) */ |