Chapter 12. DVB Audio Device

Table of Contents

Audio Data Types
audio_stream_source_t
audio_play_state_t
audio_channel_select_t
struct audio_status
struct audio_mixer
audio encodings
struct audio_karaoke
audio attributes
Audio Function Calls
open()
close()
write()
AUDIO_STOP
AUDIO_PLAY
AUDIO_PAUSE
AUDIO_SELECT_SOURCE
AUDIO_SET_MUTE
AUDIO_SET_AV_SYNC
AUDIO_SET_BYPASS_MODE
AUDIO_CHANNEL_SELECT
AUDIO_GET_STATUS
AUDIO_GET_CAPABILITIES
AUDIO_CLEAR_BUFFER
AUDIO_SET_ID
AUDIO_SET_MIXER
AUDIO_SET_STREAMTYPE
AUDIO_SET_EXT_ID
AUDIO_SET_ATTRIBUTES
AUDIO_SET_KARAOKE

The DVB audio device controls the MPEG2 audio decoder of the DVB hardware. It can be accessed through /dev/dvb/adapter0/audio0. Data types and and ioctl definitions can be accessed by including linux/dvb/video.h in your application.

Please note that some DVB cards don’t have their own MPEG decoder, which results in the omission of the audio and video device.

Audio Data Types

This section describes the structures, data types and defines used when talking to the audio device.

audio_stream_source_t

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.

 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.

audio_play_state_t

The following values can be returned by the AUDIO_GET_STATUS call representing the state of audio playback.

 typedef enum {
	 AUDIO_STOPPED,
	 AUDIO_PLAYING,
	 AUDIO_PAUSED
 } audio_play_state_t;

audio_channel_select_t

The audio channel selected via AUDIO_CHANNEL_SELECT is determined by the following values.

 typedef enum {
	 AUDIO_STEREO,
	 AUDIO_MONO_LEFT,
	 AUDIO_MONO_RIGHT,
 } audio_channel_select_t;

struct audio_status

The AUDIO_GET_STATUS call returns the following structure informing about various states of the playback operation.

 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_status_t;

struct audio_mixer

The following structure is used by the AUDIO_SET_MIXER call to set the audio volume.

 typedef struct audio_mixer {
	 unsigned int volume_left;
	 unsigned int volume_right;
 } audio_mixer_t;

audio encodings

A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the following bits set according to the hardwares capabilities.

 #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

struct audio_karaoke

The ioctl AUDIO_SET_KARAOKE uses the following format:

 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.

audio attributes

The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES:

 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) ⋆/