|
vdr-plugin-softhddevice-drm-gles 1.4.0
|
cSoftHdAudio - Audio class More...
#include <audio.h>

Public Member Functions | |
| cSoftHdAudio (cSoftHdDevice *) | |
| cSoftHdAudio constructor More... | |
| virtual | ~cSoftHdAudio (void) |
| cSoftHdAudio denstructor More... | |
| void | LazyInit (void) |
| Initialize audio output module. More... | |
| void | Exit (void) |
| Cleanup audio output module. More... | |
| int | Setup (AVCodecContext *, int, int, int) |
| Setup alsa. More... | |
| void | SetPaused (bool) |
| Set audio playback paused state. More... | |
| bool | IsPaused (void) |
| void | Filter (AVFrame *, AVCodecContext *) |
| Send audio frame to filter and enqueue it. More... | |
| void | Enqueue (uint16_t *, int, AVFrame *) |
| Send audio data to ringbuffer. More... | |
| bool | IsBufferFull (void) |
| void | FlushBuffers (void) |
| Flush audio buffers. More... | |
| int | GetUsedBytes (void) |
| Get used bytes in audio ringbuffer. More... | |
| int | GetFreeBytes (void) |
| Get free bytes in audio ringbuffer. More... | |
| int64_t | GetHardwareOutputPtsMs (void) |
| Get the hardware output PTS in milliseconds. More... | |
| int64_t | GetHardwareOutputPtsTimebaseUnits (void) |
| Get the hardware output PTS in timebase units. More... | |
| int | GetPassthrough (void) const |
| bool | HasPts (void) |
| int64_t | GetInputPtsMs (void) |
| int64_t | GetOutputPtsMs (void) |
| Get the output PTS of the ringbuffer. More... | |
| void | SetEq (int[18], int) |
| Set equalizer bands. More... | |
| void | SetVolume (int) |
| Set mixer volume (0-1000) More... | |
| void | SetDownmix (int downMix) |
| void | SetSoftvol (bool softVolume) |
| void | SetNormalize (bool, int) |
| Set normalize volume parameters. More... | |
| void | SetCompression (bool, int) |
| Set volume compression parameters. More... | |
| void | SetStereoDescent (int) |
| Set stereo loudness descent. More... | |
| void | SetPassthrough (int) |
| Set audio passthrough mask. More... | |
| void | SetAutoAES (bool appendAes) |
| void | SetTimebase (AVRational *timebase) |
| void | FlushAlsaBuffers (void) |
| Flush alsa buffers. More... | |
| bool | CyclicCall (void) |
| Cyclic audio playback call. More... | |
| void | DropSamplesOlderThanPtsMs (int64_t) |
| Drop samples older than the given PTS. More... | |
| void | ProcessEvents (void) |
| Process queued events and forward to event receiver. More... | |
Private Member Functions | |
| AVFrame * | FilterGetFrame (void) |
| Get frame from filter sink. More... | |
| int | CheckForFilterReady (AVCodecContext *) |
| Check if the filter has changed and is ready, init the filter if needed. More... | |
| void | Normalize (uint16_t *, int) |
| Normalize audio. More... | |
| void | Compress (uint16_t *, int) |
| Compress audio. More... | |
| void | SoftAmplify (int16_t *, int) |
| Software amplifier. More... | |
| int | InitFilter (AVCodecContext *) |
| Init filter. More... | |
| void | EnqueueFrame (AVFrame *) |
| Place samples in audio output queue. More... | |
| void | XrunRecovery (void) |
| xrun recovery More... | |
| char * | OpenAlsaDevice (const char *, int) |
| Open alsa device. More... | |
| char * | FindAlsaDevice (const char *, const char *, int) |
| Find alsa device giving some search hints. More... | |
| int | AlsaSetup (int channels, int sample_rate, int passthrough) |
| Setup alsa audio for requested format. More... | |
| void | AlsaInitPCMDevice (void) |
| Search for an alsa pcm device and open it. More... | |
| void | AlsaInitMixer (void) |
| Initialize alsa mixer. More... | |
| void | AlsaSetVolume (int) |
| Set alsa mixer volume (0-1000) More... | |
| void | AlsaInit (void) |
| Initialize alsa audio output module. More... | |
| void | AlsaExit (void) |
| Cleanup alsa audio output module. More... | |
| int64_t | PtsToMs (int64_t pts) |
| int64_t | MsToPts (int64_t ptsMs) |
| int | MsToFrames (int milliseconds) |
| int | FramesToMs (int frames) |
| int64_t | GetOutputPtsMsInternal (void) |
Private Attributes | |
| cSoftHdDevice * | m_pDevice |
| pointer to device More... | |
| cSoftHdConfig * | m_pConfig |
| pointer to config More... | |
| IEventReceiver * | m_pEventReceiver |
| pointer to event receiver More... | |
| cAudioThread * | m_pAudioThread = nullptr |
| pointer to audio thread More... | |
| bool | m_initialized = false |
| class initialized More... | |
| const int | m_bytesPerSample = 2 |
| number of bytes per sample More... | |
| unsigned int | m_hwSampleRate |
| hardware sample rate in Hz More... | |
| unsigned int | m_hwNumChannels |
| number of hardware channels More... | |
| AVRational * | m_pTimebase |
| pointer to AVCodecContext pkts_timebase More... | |
| std::mutex | m_mutex |
| mutex for thread safety More... | |
| std::mutex | m_pauseMutex |
| mutex for a safe thread pausing More... | |
| std::vector< Event > | m_eventQueue |
| event queue for incoming events More... | |
| int | m_downmix |
| set stereo downmix More... | |
| int64_t | m_inputPts |
| pts clock (last pts in ringbuffer) More... | |
| std::atomic< bool > | m_paused = true |
| audio is paused More... | |
| bool | m_softVolume |
| flag to use soft volume More... | |
| int | m_passthrough |
| passthrough mask More... | |
| const char * | m_pPCMDevice |
| PCM device name. More... | |
| const char * | m_pPassthroughDevice |
| passthrough device name More... | |
| bool | m_appendAES |
| flag ato utomatic append AES More... | |
| bool | m_normalize |
| flag to use volume normalize More... | |
| const int | m_normalizeSamples = 4096 |
| number of normalize samples More... | |
| int | m_normalizeCounter |
| normalize sample counter More... | |
| uint32_t | m_normalizeAverage [NORMALIZE_MAX_INDEX] |
| average of n last normalize sample blocks More... | |
| int | m_normalizeIndex |
| index into normalize average table More... | |
| int | m_normalizeReady |
| index normalize counter More... | |
| int | m_normalizeFactor |
| current normalize factor More... | |
| const int | m_normalizeMinFactor = 100 |
| min. normalize factor More... | |
| int | m_normalizeMaxFactor |
| max. normalize factor More... | |
| bool | m_compression |
| flag to use compress volume More... | |
| int | m_compressionFactor |
| current compression factor More... | |
| int | m_compressionMaxFactor |
| max. compression factor More... | |
| int | m_amplifier |
| software volume amplify factor More... | |
| int | m_stereoDescent |
| volume descent for stereo More... | |
| int | m_volume |
| current volume (0 .. 1000) More... | |
| int | m_useEqualizer |
| flag to use equalizer More... | |
| float | m_equalizerBand [18] |
| equalizer band More... | |
| const char * | m_pMixerDevice |
| mixer device name (not used) More... | |
| const char * | m_pMixerChannel |
| mixer channel name More... | |
| int | m_filterChanged = 0 |
| filter has changed More... | |
| int | m_filterReady = 0 |
| filter is ready More... | |
| AVFilterGraph * | m_pFilterGraph |
| AVFilterContext * | m_pBuffersrcCtx |
| AVFilterContext * | m_pBuffersinkCtx |
| cSoftHdRingbuffer | m_pRingbuffer {RINGBUFFER_SIZE} |
| sample ring buffer More... | |
| snd_pcm_t * | m_pAlsaPCMHandle |
| alsa pcm handle More... | |
| snd_mixer_t * | m_pAlsaMixer |
| alsa mixer handle More... | |
| snd_mixer_elem_t * | m_pAlsaMixerElem |
| alsa mixer element More... | |
| int | m_alsaRatio |
| internal -> mixer ratio * 1000 More... | |
| bool | m_alsaUseMmap |
| use mmap More... | |
| bool | m_alsaCanPause |
| hw supports pause More... | |
Static Private Attributes | |
| static constexpr int | AUDIO_MIN_BUFFER_FREE = 3072 * 8 * 8 |
| Minimum free space in audio buffer 8 packets for 8 channels. More... | |
| static constexpr unsigned | RINGBUFFER_SIZE = 3 * 5 * 7 * 8 * 2 * 1000 |
| default ring buffer size ~2s 8ch 16bit (3 * 5 * 7 * 8) More... | |
cSoftHdAudio - Audio class
| cSoftHdAudio::cSoftHdAudio | ( | cSoftHdDevice * | device | ) |
cSoftHdAudio constructor
Definition at line 66 of file audio.cpp.
References AV_NOPTS_VALUE, cSoftHdDevice::Config(), cSoftHdConfig::ConfigAudioAutoAES, cSoftHdConfig::ConfigAudioCompression, cSoftHdConfig::ConfigAudioDownmix, cSoftHdConfig::ConfigAudioEq, cSoftHdConfig::ConfigAudioEqBand, cSoftHdConfig::ConfigAudioMaxCompression, cSoftHdConfig::ConfigAudioMaxNormalize, cSoftHdConfig::ConfigAudioMixerChannel, cSoftHdConfig::ConfigAudioNormalize, cSoftHdConfig::ConfigAudioPassthroughDevice, cSoftHdConfig::ConfigAudioPassthroughMask, cSoftHdConfig::ConfigAudioPassthroughState, cSoftHdConfig::ConfigAudioPCMDevice, cSoftHdConfig::ConfigAudioSoftvol, cSoftHdConfig::ConfigAudioStereoDescent, m_alsaCanPause, m_appendAES, m_compressionFactor, m_downmix, m_hwNumChannels, m_hwSampleRate, m_inputPts, m_pAlsaMixer, m_pAlsaMixerElem, m_passthrough, m_pConfig, m_pDevice, m_pEventReceiver, m_pFilterGraph, m_pMixerChannel, m_pMixerDevice, m_pPassthroughDevice, m_pPCMDevice, m_softVolume, SetCompression(), SetEq(), SetNormalize(), and SetStereoDescent().
|
virtual |
cSoftHdAudio denstructor
|
private |
Cleanup alsa audio output module.
Definition at line 1569 of file audio.cpp.
References m_pAlsaMixer, m_pAlsaMixerElem, and m_pAlsaPCMHandle.
Referenced by Exit().
|
private |
Initialize alsa audio output module.
Definition at line 1553 of file audio.cpp.
References AlsaInitMixer(), AlsaInitPCMDevice(), and AlsaNoopCallback().
Referenced by LazyInit().
|
private |
Initialize alsa mixer.
Definition at line 1367 of file audio.cpp.
References L_SOUND, LOGDEBUG2, LOGERROR, m_alsaRatio, m_pAlsaMixer, m_pAlsaMixerElem, m_pMixerChannel, and m_pMixerDevice.
Referenced by AlsaInit().
|
private |
Search for an alsa pcm device and open it.
Definition at line 1295 of file audio.cpp.
References FindAlsaDevice(), L_SOUND, LOGDEBUG2, LOGERROR, LOGFATAL, LOGINFO, LOGWARNING, m_pAlsaPCMHandle, m_passthrough, m_pPassthroughDevice, m_pPCMDevice, and OpenAlsaDevice().
Referenced by AlsaInit().
|
private |
Setup alsa audio for requested format.
| channels | Channels requested |
| sample_rate | SampleRate requested |
| passthrough | use pass-through (AC-3, ...) device |
| 0 | everything ok |
| 1 | didn't support hw channels, downmix set -> retest |
| -1 | something gone wrong |
Definition at line 1444 of file audio.cpp.
References FlushAlsaBuffers(), L_SOUND, LOGDEBUG2, LOGERROR, LOGINFO, LOGWARNING, m_alsaCanPause, m_alsaUseMmap, m_downmix, m_hwNumChannels, m_hwSampleRate, m_pAlsaPCMHandle, m_pAudioThread, cAudioThread::Stop(), and XrunRecovery().
Referenced by InitFilter(), and Setup().
|
private |
Set alsa mixer volume (0-1000)
| volume | volume (0 .. 1000) |
Definition at line 1421 of file audio.cpp.
References m_alsaRatio, m_pAlsaMixer, and m_pAlsaMixerElem.
Referenced by SetVolume().
|
private |
Check if the filter has changed and is ready, init the filter if needed.
| ctx | AVCodec audio decoding context |
| 1 | error, init failed |
| 0 | filter initiated |
Definition at line 738 of file audio.cpp.
References InitFilter(), L_SOUND, LOGDEBUG2, m_filterChanged, m_filterReady, and m_pFilterGraph.
Referenced by Filter().
|
private |
Compress audio.
| samples | sample buffer |
| count | number of bytes in sample buffer |
Definition at line 262 of file audio.cpp.
References L_SOUND, LOGDEBUG2, m_bytesPerSample, m_compressionFactor, and m_compressionMaxFactor.
Referenced by EnqueueFrame().
| bool cSoftHdAudio::CyclicCall | ( | void | ) |
Cyclic audio playback call.
Handles audio output to ALSA, writing samples from the ring buffer to the hardware when space is available.
Definition at line 1118 of file audio.cpp.
References AUDIO, cSoftHdRingbuffer::GetReadPointer(), LOGERROR, LOGWARNING, m_alsaUseMmap, m_eventQueue, m_mutex, m_pAlsaPCMHandle, m_passthrough, m_paused, m_pauseMutex, m_pRingbuffer, m_softVolume, m_volume, cSoftHdRingbuffer::ReadAdvance(), and SoftAmplify().
Referenced by cAudioThread::Action().
| void cSoftHdAudio::DropSamplesOlderThanPtsMs | ( | int64_t | ptsMs | ) |
Drop samples older than the given PTS.
Removes audio samples from the ringbuffer that have a presentation timestamp older than the specified ptsMs.
| ptsMs | presentation timestamp in milliseconds - samples older than this will be dropped |
Definition at line 599 of file audio.cpp.
References GetOutputPtsMsInternal(), HasPts(), L_AV_SYNC, LOGDEBUG2, m_mutex, m_pAlsaPCMHandle, m_pRingbuffer, MsToFrames(), cSoftHdRingbuffer::ReadAdvance(), Timestamp2String(), and cSoftHdRingbuffer::UsedBytes().
Referenced by cVideoRender::DisplayFrame(), and cSoftHdDevice::OnEventReceived().
| void cSoftHdAudio::Enqueue | ( | uint16_t * | buffer, |
| int | count, | ||
| AVFrame * | frame | ||
| ) |
Send audio data to ringbuffer.
| buffer | data buffer |
| count | number of bytes in data buffer |
| frame | decoded frame (used to get frame parameters) |
Definition at line 657 of file audio.cpp.
References AV_NOPTS_VALUE, LOGERROR, m_inputPts, m_mutex, m_pRingbuffer, and cSoftHdRingbuffer::Write().
Referenced by cAudioDecoder::DecodePassthrough(), and EnqueueFrame().
|
private |
Place samples in audio output queue.
| frame | audio frame |
Definition at line 627 of file audio.cpp.
References Compress(), Enqueue(), m_bytesPerSample, m_compression, m_normalize, Normalize(), and ReorderAudioFrame().
Referenced by Filter().
| void cSoftHdAudio::Exit | ( | void | ) |
Cleanup audio output module.
Definition at line 1036 of file audio.cpp.
References AlsaExit(), L_SOUND, LOGDEBUG2, m_initialized, m_pAudioThread, m_pFilterGraph, and cAudioThread::Stop().
Referenced by cSoftHdDevice::OnEnteringState().
| void cSoftHdAudio::Filter | ( | AVFrame * | inframe, |
| AVCodecContext * | ctx | ||
| ) |
Send audio frame to filter and enqueue it.
| inframe | incoming audio frame to be filtered |
| ctx | AVCodec audio decoding context |
| 1 | error, send again |
| 0 | running |
Definition at line 771 of file audio.cpp.
References CheckForFilterReady(), EnqueueFrame(), FilterGetFrame(), L_SOUND, LOGDEBUG2, LOGERROR, m_filterChanged, and m_pBuffersrcCtx.
Referenced by cAudioDecoder::Decode().
|
private |
Get frame from filter sink.
Definition at line 705 of file audio.cpp.
References LOGERROR, and m_pBuffersinkCtx.
Referenced by Filter().
|
private |
Find alsa device giving some search hints.
| devname | interface identification (e.g. "pcm") |
| hint | string to compare with device name hints |
| passthrough | set, if we want a passthrough device |
Definition at line 1259 of file audio.cpp.
References LOGWARNING, and OpenAlsaDevice().
Referenced by AlsaInitPCMDevice().
| void cSoftHdAudio::FlushAlsaBuffers | ( | void | ) |
Flush alsa buffers.
Definition at line 1075 of file audio.cpp.
References L_SOUND, LOGDEBUG2, LOGERROR, m_compressionFactor, m_compressionMaxFactor, m_normalizeAverage, m_normalizeCounter, m_normalizeFactor, m_normalizeReady, m_pAlsaPCMHandle, and NORMALIZE_MAX_INDEX.
Referenced by AlsaSetup(), and FlushBuffers().
| void cSoftHdAudio::FlushBuffers | ( | void | ) |
Flush audio buffers.
Stop alsa player if running, otherwise flush the alsa buffers and force a filter init
Definition at line 815 of file audio.cpp.
References AV_NOPTS_VALUE, FlushAlsaBuffers(), L_SOUND, LOGDEBUG2, m_filterChanged, m_initialized, m_inputPts, m_mutex, m_pRingbuffer, and cSoftHdRingbuffer::Reset().
Referenced by cSoftHdDevice::ClearAudio().
|
inlineprivate |
Definition at line 184 of file audio.h.
References m_hwSampleRate.
Referenced by GetHardwareOutputPtsMs(), and GetOutputPtsMsInternal().
| int cSoftHdAudio::GetFreeBytes | ( | void | ) |
Get free bytes in audio ringbuffer.
Definition at line 835 of file audio.cpp.
References cSoftHdRingbuffer::FreeBytes(), m_mutex, and m_pRingbuffer.
| int64_t cSoftHdAudio::GetHardwareOutputPtsMs | ( | void | ) |
Get the hardware output PTS in milliseconds.
Calculates the presentation timestamp of audio currently being output by the hardware by accounting for ALSA/kernel buffer delays. This represents the PTS of the audio that is actually being played right now.
Definition at line 884 of file audio.cpp.
References AV_NOPTS_VALUE, FramesToMs(), GetOutputPtsMsInternal(), L_SOUND, LOGDEBUG2, m_hwSampleRate, m_inputPts, m_mutex, and m_pAlsaPCMHandle.
Referenced by cSoftHdPlayer::Action(), cVideoRender::DisplayFrame(), GetHardwareOutputPtsTimebaseUnits(), and cSoftHdPlayer::Player().
| int64_t cSoftHdAudio::GetHardwareOutputPtsTimebaseUnits | ( | void | ) |
Get the hardware output PTS in timebase units.
Definition at line 908 of file audio.cpp.
References AV_NOPTS_VALUE, GetHardwareOutputPtsMs(), and MsToPts().
Referenced by cSoftHdDevice::GetSTC().
|
inline |
Definition at line 66 of file audio.h.
References m_inputPts, and PtsToMs().
Referenced by cSoftHdDevice::IsBufferingThresholdReached().
| int64_t cSoftHdAudio::GetOutputPtsMs | ( | void | ) |
Get the output PTS of the ringbuffer.
Calculates the presentation timestamp of the next audio sample that will be output from the ringbuffer. This is the input PTS minus the duration of audio currently buffered in the ringbuffer.
Note: This does not account for ALSA/kernel buffer delays. For the actual hardware output PTS, use GetHardwareOutputPtsMs() instead.
Definition at line 863 of file audio.cpp.
References GetOutputPtsMsInternal(), and m_mutex.
Referenced by cSoftHdDevice::GetFirstAudioPtsMsToPlay(), cSoftHdDevice::GetFirstVideoPtsMsToPlay(), cSoftHdDevice::IsBufferingThresholdReached(), and cSoftHdDevice::OnEventReceived().
|
private |
Definition at line 870 of file audio.cpp.
References FramesToMs(), m_inputPts, m_pAlsaPCMHandle, m_pRingbuffer, PtsToMs(), and cSoftHdRingbuffer::UsedBytes().
Referenced by DropSamplesOlderThanPtsMs(), GetHardwareOutputPtsMs(), and GetOutputPtsMs().
|
inline |
Definition at line 64 of file audio.h.
References m_passthrough.
Referenced by cAudioDecoder::cAudioDecoder().
| int cSoftHdAudio::GetUsedBytes | ( | void | ) |
Get used bytes in audio ringbuffer.
Definition at line 845 of file audio.cpp.
References m_pRingbuffer, and cSoftHdRingbuffer::UsedBytes().
Referenced by cVideoRender::LogDroppedDuped().
|
inline |
Definition at line 65 of file audio.h.
References AV_NOPTS_VALUE, and m_inputPts.
Referenced by DropSamplesOlderThanPtsMs(), cSoftHdDevice::IsBufferingThresholdReached(), and cSoftHdDevice::OnEventReceived().
|
private |
Init filter.
| 0 | everything ok |
| 1 | didn't support channels, downmix set -> scrap this frame, test next |
| -1 | something gone wrong |
Definition at line 424 of file audio.cpp.
References AlsaSetup(), L_SOUND, LOGDEBUG2, LOGERROR, LOGWARNING, m_downmix, m_equalizerBand, m_filterChanged, m_filterReady, m_hwNumChannels, m_hwSampleRate, m_pBuffersinkCtx, m_pBuffersrcCtx, m_pFilterGraph, m_pTimebase, and m_useEqualizer.
Referenced by CheckForFilterReady().
|
inline |
Definition at line 57 of file audio.h.
References AUDIO_MIN_BUFFER_FREE, cSoftHdRingbuffer::FreeBytes(), and m_pRingbuffer.
Referenced by cSoftHdDevice::PlayAudio(), cSoftHdDevice::PlayAudioPkts(), and cSoftHdDevice::Poll().
|
inline |
Definition at line 54 of file audio.h.
References m_paused.
Referenced by cVideoRender::DisplayFrame().
| void cSoftHdAudio::LazyInit | ( | void | ) |
Initialize audio output module.
Definition at line 1025 of file audio.cpp.
References AlsaInit(), and m_initialized.
Referenced by cSoftHdDevice::OnEventReceived(), cSoftHdDevice::PlayAudioPkts(), and cSoftHdDevice::PlayVideoPkts().
|
inlineprivate |
Definition at line 183 of file audio.h.
References m_hwSampleRate.
Referenced by DropSamplesOlderThanPtsMs().
|
inlineprivate |
Definition at line 182 of file audio.h.
References m_pTimebase.
Referenced by GetHardwareOutputPtsTimebaseUnits().
|
private |
Normalize audio.
| samples | sample buffer |
| count | number of bytes in sample buffer |
Definition at line 181 of file audio.cpp.
References L_SOUND, LOGDEBUG2, m_bytesPerSample, m_normalizeAverage, m_normalizeCounter, m_normalizeFactor, m_normalizeIndex, m_normalizeMaxFactor, m_normalizeMinFactor, m_normalizeReady, m_normalizeSamples, and NORMALIZE_MAX_INDEX.
Referenced by EnqueueFrame().
|
private |
Open alsa device.
| device | alsa device |
| passthrough | set, if this is a passthrough device |
Definition at line 1207 of file audio.cpp.
References L_SOUND, LOGDEBUG2, LOGWARNING, m_appendAES, and m_pAlsaPCMHandle.
Referenced by AlsaInitPCMDevice(), and FindAlsaDevice().
| void cSoftHdAudio::ProcessEvents | ( | void | ) |
Process queued events and forward to event receiver.
Definition at line 1585 of file audio.cpp.
References m_eventQueue, m_pEventReceiver, and IEventReceiver::OnEventReceived().
Referenced by cAudioThread::Action().
|
inlineprivate |
Definition at line 181 of file audio.h.
References m_pTimebase.
Referenced by GetInputPtsMs(), and GetOutputPtsMsInternal().
|
inline |
Definition at line 77 of file audio.h.
References m_appendAES.
Referenced by cMenuSetupSoft::Store().
| void cSoftHdAudio::SetCompression | ( | bool | enable, |
| int | maxfac | ||
| ) |
Set volume compression parameters.
| enable | true, turn on compression |
| maxfac | max. factor of compression / 1000 |
Definition at line 987 of file audio.cpp.
References m_compression, m_compressionFactor, and m_compressionMaxFactor.
Referenced by cSoftHdAudio(), and cMenuSetupSoft::Store().
|
inline |
| void cSoftHdAudio::SetEq | ( | int | band[18], |
| int | onoff | ||
| ) |
Set equalizer bands.
| band | setting frequenz bands |
| onoff | set using equalizer |
Definition at line 348 of file audio.cpp.
References m_equalizerBand, m_filterChanged, and m_useEqualizer.
Referenced by cSoftHdAudio(), and cMenuSetupSoft::Store().
| void cSoftHdAudio::SetNormalize | ( | bool | enable, |
| int | maxfac | ||
| ) |
Set normalize volume parameters.
| enable | true, turn on normalize |
| maxfac | max. factor of normalize / 1000 |
Definition at line 975 of file audio.cpp.
References m_normalize, and m_normalizeMaxFactor.
Referenced by cSoftHdAudio(), and cMenuSetupSoft::Store().
| void cSoftHdAudio::SetPassthrough | ( | int | mask | ) |
Set audio passthrough mask.
| mask | passthrough mask (as a bitmask) |
Definition at line 1016 of file audio.cpp.
References m_passthrough.
Referenced by cSoftHdDevice::SetPassthrough().
| void cSoftHdAudio::SetPaused | ( | bool | pause | ) |
Set audio playback paused state.
| pause | true to pause, false to resume |
Definition at line 944 of file audio.cpp.
References L_SOUND, LOGDEBUG2, LOGERROR, m_alsaCanPause, m_pAlsaPCMHandle, m_paused, and m_pauseMutex.
Referenced by cSoftHdDevice::Clear(), cVideoRender::DisplayFrame(), cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 72 of file audio.h.
References m_softVolume.
Referenced by cMenuSetupSoft::Store().
| void cSoftHdAudio::SetStereoDescent | ( | int | delta | ) |
Set stereo loudness descent.
| delta | value (/1000) to reduce stereo volume |
Definition at line 1005 of file audio.cpp.
References m_stereoDescent, m_volume, and SetVolume().
Referenced by cSoftHdAudio(), and cMenuSetupSoft::Store().
|
inline |
Definition at line 78 of file audio.h.
References m_pTimebase.
Referenced by cAudioDecoder::DecodePassthrough().
| int cSoftHdAudio::Setup | ( | AVCodecContext * | ctx, |
| int | samplerate, | ||
| int | channels, | ||
| int | passthrough | ||
| ) |
Setup alsa.
only used for passthrough atm, setting up PCM goes via Filter()
| AudioCtx | AVCodec audio decoding context |
| samplerate | stream samplerate |
| channels | stream nb of channels |
| passthrough | passthrough enabled |
| 0 | everything ok |
| err | something gone wrong |
Definition at line 682 of file audio.cpp.
References AlsaSetup(), LOGERROR, m_downmix, m_hwNumChannels, m_hwSampleRate, and m_pTimebase.
Referenced by cAudioDecoder::UpdateFormat().
| void cSoftHdAudio::SetVolume | ( | int | volume | ) |
Set mixer volume (0-1000)
| volume | volume (0 .. 1000) |
Definition at line 921 of file audio.cpp.
References AlsaSetVolume(), m_amplifier, m_hwNumChannels, m_passthrough, m_softVolume, m_stereoDescent, and m_volume.
Referenced by SetStereoDescent(), and cSoftHdDevice::SetVolumeDevice().
|
private |
Software amplifier.
| samples | sample buffer |
| count | number of bytes in sample buffer |
Definition at line 319 of file audio.cpp.
References m_amplifier, m_bytesPerSample, and m_volume.
Referenced by CyclicCall().
|
private |
xrun recovery
Definition at line 1059 of file audio.cpp.
References LOGERROR, and m_pAlsaPCMHandle.
Referenced by AlsaSetup().
|
staticconstexprprivate |
Minimum free space in audio buffer 8 packets for 8 channels.
Definition at line 86 of file audio.h.
Referenced by IsBufferFull().
|
private |
hw supports pause
Definition at line 170 of file audio.h.
Referenced by AlsaSetup(), cSoftHdAudio(), and SetPaused().
|
private |
internal -> mixer ratio * 1000
Definition at line 168 of file audio.h.
Referenced by AlsaInitMixer(), and AlsaSetVolume().
|
private |
|
private |
software volume amplify factor
Definition at line 132 of file audio.h.
Referenced by SetVolume(), and SoftAmplify().
|
private |
flag ato utomatic append AES
Definition at line 113 of file audio.h.
Referenced by cSoftHdAudio(), OpenAlsaDevice(), and SetAutoAES().
|
private |
number of bytes per sample
Definition at line 96 of file audio.h.
Referenced by Compress(), EnqueueFrame(), Normalize(), and SoftAmplify().
|
private |
flag to use compress volume
Definition at line 127 of file audio.h.
Referenced by EnqueueFrame(), and SetCompression().
|
private |
current compression factor
Definition at line 128 of file audio.h.
Referenced by Compress(), cSoftHdAudio(), FlushAlsaBuffers(), and SetCompression().
|
private |
max. compression factor
Definition at line 129 of file audio.h.
Referenced by Compress(), FlushAlsaBuffers(), and SetCompression().
|
private |
set stereo downmix
Definition at line 104 of file audio.h.
Referenced by AlsaSetup(), cSoftHdAudio(), InitFilter(), SetDownmix(), and Setup().
|
private |
|
private |
event queue for incoming events
Definition at line 102 of file audio.h.
Referenced by CyclicCall(), and ProcessEvents().
|
private |
filter has changed
Definition at line 145 of file audio.h.
Referenced by CheckForFilterReady(), Filter(), FlushBuffers(), InitFilter(), and SetEq().
|
private |
filter is ready
Definition at line 146 of file audio.h.
Referenced by CheckForFilterReady(), and InitFilter().
|
private |
number of hardware channels
Definition at line 98 of file audio.h.
Referenced by AlsaSetup(), cSoftHdAudio(), InitFilter(), Setup(), and SetVolume().
|
private |
hardware sample rate in Hz
Definition at line 97 of file audio.h.
Referenced by AlsaSetup(), cSoftHdAudio(), FramesToMs(), GetHardwareOutputPtsMs(), InitFilter(), MsToFrames(), and Setup().
|
private |
class initialized
Definition at line 95 of file audio.h.
Referenced by Exit(), FlushBuffers(), and LazyInit().
|
private |
pts clock (last pts in ringbuffer)
Definition at line 106 of file audio.h.
Referenced by cSoftHdAudio(), Enqueue(), FlushBuffers(), GetHardwareOutputPtsMs(), GetInputPtsMs(), GetOutputPtsMsInternal(), and HasPts().
|
private |
mutex for thread safety
Definition at line 100 of file audio.h.
Referenced by CyclicCall(), DropSamplesOlderThanPtsMs(), Enqueue(), FlushBuffers(), GetFreeBytes(), GetHardwareOutputPtsMs(), and GetOutputPtsMs().
|
private |
flag to use volume normalize
Definition at line 116 of file audio.h.
Referenced by EnqueueFrame(), and SetNormalize().
|
private |
average of n last normalize sample blocks
Definition at line 119 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
normalize sample counter
Definition at line 118 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
current normalize factor
Definition at line 122 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
index into normalize average table
Definition at line 120 of file audio.h.
Referenced by Normalize().
|
private |
max. normalize factor
Definition at line 124 of file audio.h.
Referenced by Normalize(), and SetNormalize().
|
private |
|
private |
index normalize counter
Definition at line 121 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
|
private |
alsa mixer handle
Definition at line 166 of file audio.h.
Referenced by AlsaExit(), AlsaInitMixer(), AlsaSetVolume(), and cSoftHdAudio().
|
private |
alsa mixer element
Definition at line 167 of file audio.h.
Referenced by AlsaExit(), AlsaInitMixer(), AlsaSetVolume(), and cSoftHdAudio().
|
private |
alsa pcm handle
Definition at line 165 of file audio.h.
Referenced by AlsaExit(), AlsaInitPCMDevice(), AlsaSetup(), CyclicCall(), DropSamplesOlderThanPtsMs(), FlushAlsaBuffers(), GetHardwareOutputPtsMs(), GetOutputPtsMsInternal(), OpenAlsaDevice(), SetPaused(), and XrunRecovery().
|
private |
passthrough mask
Definition at line 110 of file audio.h.
Referenced by AlsaInitPCMDevice(), cSoftHdAudio(), CyclicCall(), GetPassthrough(), SetPassthrough(), and SetVolume().
|
private |
pointer to audio thread
Definition at line 92 of file audio.h.
Referenced by AlsaSetup(), and Exit().
|
private |
audio is paused
Definition at line 107 of file audio.h.
Referenced by CyclicCall(), IsPaused(), and SetPaused().
|
private |
mutex for a safe thread pausing
Definition at line 101 of file audio.h.
Referenced by CyclicCall(), and SetPaused().
|
private |
Definition at line 149 of file audio.h.
Referenced by FilterGetFrame(), and InitFilter().
|
private |
Definition at line 148 of file audio.h.
Referenced by Filter(), and InitFilter().
|
private |
|
private |
|
private |
pointer to event receiver
Definition at line 89 of file audio.h.
Referenced by cSoftHdAudio(), and ProcessEvents().
|
private |
Definition at line 147 of file audio.h.
Referenced by CheckForFilterReady(), cSoftHdAudio(), Exit(), and InitFilter().
|
private |
mixer channel name
Definition at line 142 of file audio.h.
Referenced by AlsaInitMixer(), and cSoftHdAudio().
|
private |
mixer device name (not used)
Definition at line 141 of file audio.h.
Referenced by AlsaInitMixer(), and cSoftHdAudio().
|
private |
passthrough device name
Definition at line 112 of file audio.h.
Referenced by AlsaInitPCMDevice(), and cSoftHdAudio().
|
private |
PCM device name.
Definition at line 111 of file audio.h.
Referenced by AlsaInitPCMDevice(), and cSoftHdAudio().
|
private |
sample ring buffer
Definition at line 155 of file audio.h.
Referenced by CyclicCall(), DropSamplesOlderThanPtsMs(), Enqueue(), FlushBuffers(), GetFreeBytes(), GetOutputPtsMsInternal(), GetUsedBytes(), and IsBufferFull().
|
private |
pointer to AVCodecContext pkts_timebase
Definition at line 99 of file audio.h.
Referenced by InitFilter(), MsToPts(), PtsToMs(), SetTimebase(), and Setup().
|
private |
flag to use soft volume
Definition at line 109 of file audio.h.
Referenced by cSoftHdAudio(), CyclicCall(), SetSoftvol(), and SetVolume().
|
private |
volume descent for stereo
Definition at line 133 of file audio.h.
Referenced by SetStereoDescent(), and SetVolume().
|
private |
flag to use equalizer
Definition at line 137 of file audio.h.
Referenced by InitFilter(), and SetEq().
|
private |
current volume (0 .. 1000)
Definition at line 134 of file audio.h.
Referenced by CyclicCall(), SetStereoDescent(), SetVolume(), and SoftAmplify().
|
staticconstexprprivate |