vdr-plugin-softhddevice-drm-gles 1.6.7
alsadevice.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGLP-3.0-or-later
2
20#ifndef __ALSADEVICE_H
21#define __ALSADEVICE_H
22
23#include <atomic>
24#include <string>
25#include <vector>
26
27#include <alsa/asoundlib.h>
28
29class cSoftHdConfig;
30
37public:
39
40 bool Init(void);
41 void Exit(void);
42 int Setup(int, int, bool, int);
43 int Write(const void *, int);
44 void FlushBuffers(bool);
45 bool HandleError(int);
46 void SetVolume(int);
47
48 int WaitUntilReady(void);
49 bool CheckWrittenFrames(int, int);
50 int GetHwDelayFrames(void);
52 std::vector<std::string> GetChannelLayoutAsArray(void);
53
54 // getters and setters
56 int GetDownmix(void) { return m_downmix; };
57 int GetHwNumChannels(void) { return m_hwNumChannels; };
58 int GetHwSampleRate(void) { return m_hwSampleRate; };
59 bool IsRunning(void) { return ((m_pPCMHandle != nullptr) && m_hwSampleRate); };
62 int GetPassthroughMask(void) const { return m_passthroughMask; };
65
66 // calculation helpers
69 int64_t PtsToMs(int64_t pts, double timebase) { return pts * timebase * 1000; };
70 int64_t MsToPts(int64_t ptsMs, double timebase) { return ptsMs / timebase / 1000; };
72 int FramesToMs(int frames) { return (int64_t)frames * 1000 / m_hwSampleRate; };
74 double FramesToMsDouble(int frames) { return (double)frames * 1000 / m_hwSampleRate; };
75
76private:
77 const char *m_pPCMDevice;
79
80 // mixer
81 const char *m_pMixerDevice = nullptr;
82 const char *m_pMixerChannel;
83 snd_mixer_t *m_pMixer = nullptr;
85
87 int m_ratio;
90 std::atomic<bool> m_passthroughActive = false;
91 unsigned int m_hwSampleRate = 0;
92 unsigned int m_hwNumChannels = 0;
94 bool m_useMmap;
95
97 char *OpenDevice(const char *);
98 char *FindDevice(const char *, const char *);
99 bool InitDevice(void);
100 void InitMixer(void);
101};
102
103#endif
Alsa Interface.
Definition alsadevice.h:36
snd_mixer_elem_t * m_pMixerElem
alsa mixer element
Definition alsadevice.h:84
double FramesToMsDouble(int frames)
Definition alsadevice.h:74
void SetPassthroughMask(int mask)
Definition alsadevice.h:61
bool m_appendAES
flag to automatic append AES
Definition alsadevice.h:88
const char * m_pMixerChannel
mixer channel name
Definition alsadevice.h:82
snd_pcm_uframes_t m_bufferSizeFrames
alsa buffer size in frames
Definition alsadevice.h:86
int GetBufferSizeFrames(void)
Definition alsadevice.h:55
size_t FramesToBytes(int frames)
Definition alsadevice.h:67
void InitMixer(void)
Initialize the ALSA mixer.
int GetPassthroughMask(void) const
Definition alsadevice.h:62
void SetAutoAES(bool appendAes)
Definition alsadevice.h:63
bool ShouldAppendAES(void)
Definition alsadevice.h:96
int GetHwSampleRate(void)
Definition alsadevice.h:58
int m_passthroughMask
passthrough mask
Definition alsadevice.h:89
int GetHwNumChannels(void)
Definition alsadevice.h:57
bool HandleError(int)
Handle an alsa error.
int64_t FramesToPts(int frames, double timebase)
Definition alsadevice.h:73
unsigned int m_hwSampleRate
hardware sample rate in Hz
Definition alsadevice.h:91
int m_ratio
internal -> mixer ratio * 1000
Definition alsadevice.h:87
const char * m_pPCMDevice
Alsa PCM device name.
Definition alsadevice.h:77
int Write(const void *, int)
Write data to the output device.
snd_pcm_t * m_pPCMHandle
alsa pcm handle
Definition alsadevice.h:78
bool IsPassthroughActive(void)
Definition alsadevice.h:60
void Exit(void)
Cleanup the ALSA audio output module.
char * FindDevice(const char *, const char *)
Find alsa device giving some search hints.
int GetAvailableBufferFrames(bool)
Get the number of frames that could be written to the device.
int GetHwDelayFrames(void)
Return the current hardware audio delay in frames.
int WaitUntilReady(void)
Wait until data can be written or read to/from the device (Timeout is 150ms currently)
const char * m_pMixerDevice
mixer device name (not used)
Definition alsadevice.h:81
int GetDownmix(void)
Definition alsadevice.h:56
int Setup(int, int, bool, int)
Setup ALSA audio for requested format.
int BytesToFrames(size_t bytes)
Definition alsadevice.h:68
char * OpenDevice(const char *)
Open an ALSA device.
bool m_useMmap
use mmap
Definition alsadevice.h:94
void SetVolume(int)
Set alsa mixer volume (0-1000)
int m_downmix
set stereo downmix
Definition alsadevice.h:93
int64_t MsToPts(int64_t ptsMs, double timebase)
Definition alsadevice.h:70
bool IsRunning(void)
Definition alsadevice.h:59
void FlushBuffers(bool)
Flush ALSA buffers internally.
int64_t PtsToMs(int64_t pts, double timebase)
Definition alsadevice.h:69
void SetDownmix(int downMix)
Definition alsadevice.h:64
bool InitDevice(void)
Search for an alsa pcm device and open it.
int MsToFrames(int milliseconds)
Definition alsadevice.h:71
std::atomic< bool > m_passthroughActive
set, if passthrough is active
Definition alsadevice.h:90
snd_mixer_t * m_pMixer
alsa mixer handle
Definition alsadevice.h:83
bool Init(void)
Initialize the ALSA audio output module.
unsigned int m_hwNumChannels
number of hardware channels
Definition alsadevice.h:92
bool CheckWrittenFrames(int, int)
Check, if all frames have been written.
int FramesToMs(int frames)
Definition alsadevice.h:72
Plugin Configuration.
Definition config.h:49
std::vector< std::string > GetChannelLayoutAsArray(void)
Put ALSA channel layout in a dynamic array of strings.