|
vdr-plugin-softhddevice-drm-gles 1.5.9-20e15de
|
cSoftHdAudio - Audio class More...
#include <audio.h>
Public Member Functions | |
| cSoftHdAudio (cSoftHdDevice *) | |
| cSoftHdAudio constructor | |
| void | LazyInit (void) |
| Initialize audio output module. | |
| void | Exit (void) |
| Cleanup audio output module. | |
| int | Setup (AVCodecContext *, int, int, int) |
| Setup alsa. | |
| void | SetPaused (bool) |
| Set audio playback paused state. | |
| bool | IsPaused (void) |
| void | Filter (AVFrame *, AVCodecContext *) |
| Send audio frame to filter and enqueue it. | |
| void | Enqueue (uint16_t *, int, AVFrame *) |
| Send audio data to ringbuffer. | |
| bool | IsBufferFull (void) |
| void | FlushBuffers (void) |
| Flush audio buffers. | |
| int | GetUsedBytes (void) |
| Get used bytes in audio ringbuffer. | |
| int | GetFreeBytes (void) |
| Get free bytes in audio ringbuffer. | |
| int64_t | GetHardwareOutputPtsMs (void) |
| Get the hardware output PTS in milliseconds. | |
| int64_t | GetHardwareOutputPtsTimebaseUnits (void) |
| Get the hardware output PTS in timebase units. | |
| int | GetPassthrough (void) const |
| bool | HasPts (void) |
| int64_t | GetInputPtsMs (void) |
| int64_t | GetOutputPtsMs (void) |
| Get the output PTS of the ringbuffer. | |
| void | SetEq (int[18], int) |
| Set equalizer bands. | |
| void | SetVolume (int) |
| Set mixer volume (0-1000) | |
| void | SetDownmix (int downMix) |
| void | SetSoftvol (bool softVolume) |
| void | SetNormalize (bool, int) |
| Set normalize volume parameters. | |
| void | SetCompression (bool, int) |
| Set volume compression parameters. | |
| void | SetStereoDescent (int) |
| Set stereo loudness descent. | |
| void | SetPassthrough (int) |
| Set audio passthrough mask. | |
| void | SetAutoAES (bool appendAes) |
| void | SetTimebase (AVRational *timebase) |
| void | FlushAlsaBuffers (void) |
| Flush alsa buffers. | |
| bool | CyclicCall (void) |
| Cyclic audio playback call. | |
| void | DropSamplesOlderThanPtsMs (int64_t) |
| Drop samples older than the given PTS. | |
| void | ProcessEvents (void) |
| Process queued events and forward to event receiver. | |
| void | ClockDriftCompensation (void) |
| Calculate clock drift compensation. | |
Private Member Functions | |
| AVFrame * | FilterGetFrame (void) |
| Get frame from filter sink. | |
| int | CheckForFilterReady (AVCodecContext *) |
| Check if the filter has changed and is ready, init the filter if needed. | |
| void | Normalize (uint16_t *, int) |
| Normalize audio. | |
| void | Compress (uint16_t *, int) |
| Compress audio. | |
| void | SoftAmplify (int16_t *, int) |
| Software amplifier. | |
| int | InitFilter (AVCodecContext *) |
| Init filter. | |
| void | EnqueueFrame (AVFrame *) |
| Place samples in audio output queue. | |
| void | HandleError (int) |
| handle error | |
| char * | OpenAlsaDevice (const char *, int) |
| Open alsa device. | |
| char * | FindAlsaDevice (const char *, const char *, int) |
| Find alsa device giving some search hints. | |
| int | AlsaSetup (int channels, int sample_rate, int passthrough) |
| Setup alsa audio for requested format. | |
| void | AlsaInitPCMDevice (void) |
| Search for an alsa pcm device and open it. | |
| void | AlsaInitMixer (void) |
| Initialize alsa mixer. | |
| void | AlsaSetVolume (int) |
| Set alsa mixer volume (0-1000) | |
| void | AlsaInit (void) |
| Initialize alsa audio output module. | |
| void | AlsaExit (void) |
| Cleanup alsa audio output module. | |
| int64_t | PtsToMs (int64_t pts) |
| int64_t | MsToPts (int64_t ptsMs) |
| int | MsToFrames (int milliseconds) |
| int | FramesToMs (int frames) |
| double | FramesToMsDouble (int frames) |
| int64_t | GetOutputPtsMsInternal (void) |
Private Attributes | |
| cSoftHdDevice * | m_pDevice |
| pointer to device | |
| cSoftHdConfig * | m_pConfig |
| pointer to config | |
| IEventReceiver * | m_pEventReceiver |
| pointer to event receiver | |
| cBufferFillLevelLowPassFilter | m_fillLevel |
| low pass filter for the buffer fill level | |
| cPidController | m_pidController {3, 0.005, 0, 1000} |
| PID controller for clock drift compensation with tuning values coming from educated guesses. | |
| std::chrono::steady_clock::time_point | m_lastPidInvocation |
| last time the PID controller was invoked | |
| int | m_alsaBufferSizeFrames = 0 |
| alsa buffer size in frames | |
| int | m_packetCounter = 0 |
| packet counter for logging | |
| cAudioThread * | m_pAudioThread = nullptr |
| pointer to audio thread | |
| bool | m_initialized = false |
| class initialized | |
| const int | m_bytesPerSample = 2 |
| number of bytes per sample | |
| unsigned int | m_hwSampleRate = 0 |
| hardware sample rate in Hz | |
| unsigned int | m_hwNumChannels = 0 |
| number of hardware channels | |
| AVRational * | m_pTimebase |
| pointer to AVCodecContext pkts_timebase | |
| std::mutex | m_mutex |
| mutex for thread safety | |
| std::mutex | m_pauseMutex |
| mutex for a safe thread pausing | |
| std::vector< Event > | m_eventQueue |
| event queue for incoming events | |
| std::atomic< double > | m_pitchPpm = 0 |
| pitch adjustment in ppm. Positive values are faster | |
| int | m_pitchAdjustFrameCounter = 0 |
| counter for pitch adjustment frames | |
| int | m_downmix |
| set stereo downmix | |
| int64_t | m_inputPts = AV_NOPTS_VALUE |
| pts clock (last pts in ringbuffer) | |
| std::atomic< bool > | m_paused = true |
| audio is paused | |
| bool | m_softVolume |
| flag to use soft volume | |
| int | m_passthrough |
| passthrough mask | |
| const char * | m_pPCMDevice |
| PCM device name. | |
| const char * | m_pPassthroughDevice |
| passthrough device name | |
| bool | m_appendAES |
| flag ato utomatic append AES | |
| bool | m_normalize |
| flag to use volume normalize | |
| const int | m_normalizeSamples = 4096 |
| number of normalize samples | |
| int | m_normalizeCounter |
| normalize sample counter | |
| uint32_t | m_normalizeAverage [NORMALIZE_MAX_INDEX] |
| average of n last normalize sample blocks | |
| int | m_normalizeIndex |
| index into normalize average table | |
| int | m_normalizeReady |
| index normalize counter | |
| int | m_normalizeFactor |
| current normalize factor | |
| const int | m_normalizeMinFactor = 100 |
| min. normalize factor | |
| int | m_normalizeMaxFactor |
| max. normalize factor | |
| bool | m_compression |
| flag to use compress volume | |
| int | m_compressionFactor = 0 |
| current compression factor | |
| int | m_compressionMaxFactor |
| max. compression factor | |
| int | m_amplifier |
| software volume amplify factor | |
| int | m_stereoDescent |
| volume descent for stereo | |
| int | m_volume |
| current volume (0 .. 1000) | |
| int | m_useEqualizer |
| flag to use equalizer | |
| float | m_equalizerBand [18] |
| equalizer band | |
| const char * | m_pMixerDevice = nullptr |
| mixer device name (not used) | |
| const char * | m_pMixerChannel |
| mixer channel name | |
| int | m_filterChanged = 0 |
| filter has changed | |
| int | m_filterReady = 0 |
| filter is ready | |
| AVFilterGraph * | m_pFilterGraph = nullptr |
| AVFilterContext * | m_pBuffersrcCtx |
| AVFilterContext * | m_pBuffersinkCtx |
| cSoftHdRingbuffer | m_pRingbuffer {RINGBUFFER_SIZE} |
| sample ring buffer | |
| snd_pcm_t * | m_pAlsaPCMHandle |
| alsa pcm handle | |
| snd_mixer_t * | m_pAlsaMixer = nullptr |
| alsa mixer handle | |
| snd_mixer_elem_t * | m_pAlsaMixerElem = nullptr |
| alsa mixer element | |
| int | m_alsaRatio |
| internal -> mixer ratio * 1000 | |
| bool | m_alsaUseMmap |
| use mmap | |
Static Private Attributes | |
| static constexpr int | AUDIO_MIN_BUFFER_FREE = 3072 * 8 * 8 |
| Minimum free space in audio buffer 8 packets for 8 channels. | |
| static constexpr unsigned | RINGBUFFER_SIZE = 3 * 5 * 7 * 8 * 2 * 1000 |
| default ring buffer size ~2s 8ch 16bit (3 * 5 * 7 * 8) | |
cSoftHdAudio - Audio class
| cSoftHdAudio::cSoftHdAudio | ( | cSoftHdDevice * | device | ) |
cSoftHdAudio constructor
Definition at line 61 of file audio.cpp.
References cSoftHdConfig::ConfigAudioCompression, cSoftHdConfig::ConfigAudioEq, cSoftHdConfig::ConfigAudioEqBand, cSoftHdConfig::ConfigAudioMaxCompression, cSoftHdConfig::ConfigAudioMaxNormalize, cSoftHdConfig::ConfigAudioNormalize, cSoftHdConfig::ConfigAudioStereoDescent, m_pConfig, SetCompression(), SetEq(), SetNormalize(), and SetStereoDescent().
|
private |
Cleanup alsa audio output module.
Definition at line 1555 of file audio.cpp.
References m_pAlsaMixer, m_pAlsaMixerElem, and m_pAlsaPCMHandle.
Referenced by Exit().
|
private |
Initialize alsa audio output module.
Definition at line 1539 of file audio.cpp.
References AlsaInitMixer(), AlsaInitPCMDevice(), and AlsaNoopCallback().
Referenced by LazyInit().
|
private |
Initialize alsa mixer.
Definition at line 1360 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 1281 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 1437 of file audio.cpp.
References FlushAlsaBuffers(), L_SOUND, LOGDEBUG2, LOGERROR, LOGINFO, LOGWARNING, m_alsaBufferSizeFrames, m_alsaUseMmap, m_downmix, m_hwNumChannels, m_hwSampleRate, m_pAlsaPCMHandle, m_pAudioThread, MsToFrames(), and cAudioThread::Stop().
Referenced by InitFilter(), and Setup().
|
private |
Set alsa mixer volume (0-1000)
| volume | volume (0 .. 1000) |
Definition at line 1414 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 739 of file audio.cpp.
References InitFilter(), L_SOUND, LOGDEBUG2, m_filterChanged, m_filterReady, and m_pFilterGraph.
Referenced by Filter().
| void cSoftHdAudio::ClockDriftCompensation | ( | void | ) |
Calculate clock drift compensation.
Uses a PID controller to adjust the playback pitch based on the audio buffer fill level. This keeps the buffer level constant and compensates for clock drift between the sender and the audio hardware.
Also updates the low-pass filter for the buffer fill level.
Definition at line 1588 of file audio.cpp.
References FramesToMsDouble(), cBufferFillLevelLowPassFilter::GetBufferFillLevelFramesAvg(), cPidController::GetDTerm(), cPidController::GetITerm(), cPidController::GetPTerm(), cPidController::GetTargetValue(), cBufferFillLevelLowPassFilter::IsSettled(), L_SOUND, LOGDEBUG2, LOGWARNING, m_alsaBufferSizeFrames, m_fillLevel, m_lastPidInvocation, m_packetCounter, m_pAlsaPCMHandle, m_passthrough, m_pidController, m_pitchPpm, cPidController::SetTargetValue(), cPidController::Update(), and cBufferFillLevelLowPassFilter::UpdateAvgBufferFillLevel().
Referenced by cSoftHdDevice::PlayAudio().
|
private |
Compress audio.
| samples | sample buffer |
| count | number of bytes in sample buffer |
Definition at line 233 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 1109 of file audio.cpp.
References cSoftHdRingbuffer::GetReadPointer(), HandleError(), LOGERROR, LOGWARNING, m_alsaUseMmap, m_fillLevel, m_mutex, m_pAlsaPCMHandle, m_passthrough, m_paused, m_pauseMutex, m_pRingbuffer, m_softVolume, m_volume, cSoftHdRingbuffer::ReadAdvance(), SoftAmplify(), and cBufferFillLevelLowPassFilter::WroteFrames().
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 570 of file audio.cpp.
References GetOutputPtsMsInternal(), HasPts(), L_AV_SYNC, LOGDEBUG2, m_fillLevel, m_mutex, m_pAlsaPCMHandle, m_pidController, m_pRingbuffer, MsToFrames(), cSoftHdRingbuffer::ReadAdvance(), cBufferFillLevelLowPassFilter::Reset(), cPidController::Reset(), Timestamp2String(), cSoftHdRingbuffer::UsedBytes(), and cBufferFillLevelLowPassFilter::WroteFrames().
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 632 of file audio.cpp.
References AV_NOPTS_VALUE, AV_SYNC_BORDER_MS, L_AV_SYNC, LOGDEBUG2, LOGERROR, m_eventQueue, m_fillLevel, m_inputPts, m_mutex, m_pAlsaPCMHandle, m_pitchAdjustFrameCounter, m_pitchPpm, m_pRingbuffer, PtsToMs(), cBufferFillLevelLowPassFilter::ReceivedFrames(), Timestamp2String(), and cSoftHdRingbuffer::Write().
Referenced by cAudioDecoder::DecodePassthrough(), and EnqueueFrame().
|
private |
Place samples in audio output queue.
| frame | audio frame |
Definition at line 602 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 1029 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 772 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 706 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 1245 of file audio.cpp.
References LOGWARNING, and OpenAlsaDevice().
Referenced by AlsaInitPCMDevice().
| void cSoftHdAudio::FlushAlsaBuffers | ( | void | ) |
Flush alsa buffers.
Definition at line 1066 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 816 of file audio.cpp.
References AV_NOPTS_VALUE, FlushAlsaBuffers(), L_SOUND, LOGDEBUG2, m_fillLevel, m_filterChanged, m_initialized, m_inputPts, m_mutex, m_pidController, m_pRingbuffer, cBufferFillLevelLowPassFilter::Reset(), cPidController::Reset(), cSoftHdRingbuffer::Reset(), and cBufferFillLevelLowPassFilter::ResetFramesCounters().
Referenced by cSoftHdDevice::ClearAudio().
|
inlineprivate |
Definition at line 196 of file audio.h.
References m_hwSampleRate.
Referenced by GetHardwareOutputPtsMs(), and GetOutputPtsMsInternal().
|
inlineprivate |
Definition at line 197 of file audio.h.
References m_hwSampleRate.
Referenced by ClockDriftCompensation().
| int cSoftHdAudio::GetFreeBytes | ( | void | ) |
Get free bytes in audio ringbuffer.
Definition at line 839 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 888 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::Play().
| int64_t cSoftHdAudio::GetHardwareOutputPtsTimebaseUnits | ( | void | ) |
Get the hardware output PTS in timebase units.
Definition at line 912 of file audio.cpp.
References AV_NOPTS_VALUE, GetHardwareOutputPtsMs(), and MsToPts().
Referenced by cSoftHdDevice::GetSTC().
|
inline |
Definition at line 71 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 867 of file audio.cpp.
References GetOutputPtsMsInternal(), and m_mutex.
Referenced by cSoftHdDevice::GetFirstAudioPtsMsToPlay(), cSoftHdDevice::GetFirstVideoPtsMsToPlay(), cSoftHdDevice::IsBufferingThresholdReached(), and cSoftHdDevice::OnEventReceived().
|
private |
Definition at line 874 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 69 of file audio.h.
References m_passthrough.
| int cSoftHdAudio::GetUsedBytes | ( | void | ) |
Get used bytes in audio ringbuffer.
Definition at line 849 of file audio.cpp.
References m_pRingbuffer, and cSoftHdRingbuffer::UsedBytes().
Referenced by cVideoRender::LogDroppedDuped().
|
private |
handle error
Definition at line 1052 of file audio.cpp.
References AUDIO, LOGERROR, m_eventQueue, m_pAlsaPCMHandle, and m_passthrough.
Referenced by CyclicCall().
|
inline |
Definition at line 70 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 395 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 62 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 59 of file audio.h.
References m_paused.
Referenced by cVideoRender::DisplayFrame().
| void cSoftHdAudio::LazyInit | ( | void | ) |
Initialize audio output module.
Definition at line 1018 of file audio.cpp.
References AlsaInit(), and m_initialized.
Referenced by cSoftHdDevice::OnEventReceived(), cSoftHdDevice::PlayAudioPkts(), and cSoftHdDevice::PlayVideoPkts().
|
inlineprivate |
Definition at line 195 of file audio.h.
References m_hwSampleRate.
Referenced by AlsaSetup(), and DropSamplesOlderThanPtsMs().
|
inlineprivate |
Definition at line 194 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 152 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 1193 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 1571 of file audio.cpp.
References m_eventQueue, m_pEventReceiver, and IEventReceiver::OnEventReceived().
Referenced by cAudioThread::Action().
|
inlineprivate |
Definition at line 193 of file audio.h.
References m_pTimebase.
Referenced by Enqueue(), GetInputPtsMs(), and GetOutputPtsMsInternal().
|
inline |
Definition at line 82 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 975 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 319 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 963 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 1004 of file audio.cpp.
References m_passthrough, and m_pitchPpm.
Referenced by cSoftHdDevice::SetPassthrough().
| void cSoftHdAudio::SetPaused | ( | bool | pause | ) |
Set audio playback paused state.
| pause | true to pause, false to resume |
Definition at line 948 of file audio.cpp.
References L_SOUND, LOGDEBUG2, m_paused, and m_pauseMutex.
Referenced by cSoftHdDevice::Clear(), cVideoRender::DisplayFrame(), cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 77 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 993 of file audio.cpp.
References m_stereoDescent, m_volume, and SetVolume().
Referenced by cSoftHdAudio(), and cMenuSetupSoft::Store().
|
inline |
Definition at line 83 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 683 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 925 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 290 of file audio.cpp.
References m_amplifier, m_bytesPerSample, and m_volume.
Referenced by CyclicCall().
|
staticconstexprprivate |
Minimum free space in audio buffer 8 packets for 8 channels.
Definition at line 92 of file audio.h.
Referenced by IsBufferFull().
|
private |
alsa buffer size in frames
Definition at line 99 of file audio.h.
Referenced by AlsaSetup(), and ClockDriftCompensation().
|
private |
internal -> mixer ratio * 1000
Definition at line 181 of file audio.h.
Referenced by AlsaInitMixer(), and AlsaSetVolume().
|
private |
|
private |
software volume amplify factor
Definition at line 145 of file audio.h.
Referenced by SetVolume(), and SoftAmplify().
|
private |
flag ato utomatic append AES
Definition at line 126 of file audio.h.
Referenced by OpenAlsaDevice(), and SetAutoAES().
|
private |
number of bytes per sample
Definition at line 107 of file audio.h.
Referenced by Compress(), EnqueueFrame(), Normalize(), and SoftAmplify().
|
private |
flag to use compress volume
Definition at line 140 of file audio.h.
Referenced by EnqueueFrame(), and SetCompression().
|
private |
current compression factor
Definition at line 141 of file audio.h.
Referenced by Compress(), FlushAlsaBuffers(), and SetCompression().
|
private |
max. compression factor
Definition at line 142 of file audio.h.
Referenced by Compress(), FlushAlsaBuffers(), and SetCompression().
|
private |
set stereo downmix
Definition at line 117 of file audio.h.
Referenced by AlsaSetup(), InitFilter(), SetDownmix(), and Setup().
|
private |
|
private |
event queue for incoming events
Definition at line 113 of file audio.h.
Referenced by Enqueue(), HandleError(), and ProcessEvents().
|
private |
low pass filter for the buffer fill level
Definition at line 96 of file audio.h.
Referenced by ClockDriftCompensation(), CyclicCall(), DropSamplesOlderThanPtsMs(), Enqueue(), and FlushBuffers().
|
private |
filter has changed
Definition at line 158 of file audio.h.
Referenced by CheckForFilterReady(), Filter(), FlushBuffers(), InitFilter(), and SetEq().
|
private |
filter is ready
Definition at line 159 of file audio.h.
Referenced by CheckForFilterReady(), and InitFilter().
|
private |
number of hardware channels
Definition at line 109 of file audio.h.
Referenced by AlsaSetup(), InitFilter(), Setup(), and SetVolume().
|
private |
hardware sample rate in Hz
Definition at line 108 of file audio.h.
Referenced by AlsaSetup(), FramesToMs(), FramesToMsDouble(), GetHardwareOutputPtsMs(), InitFilter(), MsToFrames(), and Setup().
|
private |
class initialized
Definition at line 106 of file audio.h.
Referenced by Exit(), FlushBuffers(), and LazyInit().
|
private |
pts clock (last pts in ringbuffer)
Definition at line 119 of file audio.h.
Referenced by Enqueue(), FlushBuffers(), GetHardwareOutputPtsMs(), GetInputPtsMs(), GetOutputPtsMsInternal(), and HasPts().
|
private |
last time the PID controller was invoked
Definition at line 98 of file audio.h.
Referenced by ClockDriftCompensation().
|
private |
mutex for thread safety
Definition at line 111 of file audio.h.
Referenced by CyclicCall(), DropSamplesOlderThanPtsMs(), Enqueue(), FlushBuffers(), GetFreeBytes(), GetHardwareOutputPtsMs(), and GetOutputPtsMs().
|
private |
flag to use volume normalize
Definition at line 129 of file audio.h.
Referenced by EnqueueFrame(), and SetNormalize().
|
private |
average of n last normalize sample blocks
Definition at line 132 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
normalize sample counter
Definition at line 131 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
current normalize factor
Definition at line 135 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
index into normalize average table
Definition at line 133 of file audio.h.
Referenced by Normalize().
|
private |
max. normalize factor
Definition at line 137 of file audio.h.
Referenced by Normalize(), and SetNormalize().
|
private |
|
private |
index normalize counter
Definition at line 134 of file audio.h.
Referenced by FlushAlsaBuffers(), and Normalize().
|
private |
|
private |
packet counter for logging
Definition at line 100 of file audio.h.
Referenced by ClockDriftCompensation().
|
private |
alsa mixer handle
Definition at line 179 of file audio.h.
Referenced by AlsaExit(), AlsaInitMixer(), and AlsaSetVolume().
|
private |
alsa mixer element
Definition at line 180 of file audio.h.
Referenced by AlsaExit(), AlsaInitMixer(), and AlsaSetVolume().
|
private |
alsa pcm handle
Definition at line 178 of file audio.h.
Referenced by AlsaExit(), AlsaInitPCMDevice(), AlsaSetup(), ClockDriftCompensation(), CyclicCall(), DropSamplesOlderThanPtsMs(), Enqueue(), FlushAlsaBuffers(), GetHardwareOutputPtsMs(), GetOutputPtsMsInternal(), HandleError(), and OpenAlsaDevice().
|
private |
passthrough mask
Definition at line 123 of file audio.h.
Referenced by AlsaInitPCMDevice(), ClockDriftCompensation(), CyclicCall(), GetPassthrough(), HandleError(), SetPassthrough(), and SetVolume().
|
private |
pointer to audio thread
Definition at line 103 of file audio.h.
Referenced by AlsaSetup(), and Exit().
|
private |
audio is paused
Definition at line 120 of file audio.h.
Referenced by CyclicCall(), IsPaused(), and SetPaused().
|
private |
mutex for a safe thread pausing
Definition at line 112 of file audio.h.
Referenced by CyclicCall(), and SetPaused().
|
private |
Definition at line 162 of file audio.h.
Referenced by FilterGetFrame(), and InitFilter().
|
private |
Definition at line 161 of file audio.h.
Referenced by Filter(), and InitFilter().
|
private |
|
private |
|
private |
|
private |
Definition at line 160 of file audio.h.
Referenced by CheckForFilterReady(), Exit(), and InitFilter().
|
private |
PID controller for clock drift compensation with tuning values coming from educated guesses.
Definition at line 97 of file audio.h.
Referenced by ClockDriftCompensation(), DropSamplesOlderThanPtsMs(), and FlushBuffers().
|
private |
|
private |
pitch adjustment in ppm. Positive values are faster
Definition at line 114 of file audio.h.
Referenced by ClockDriftCompensation(), Enqueue(), and SetPassthrough().
|
private |
|
private |
|
private |
|
private |
|
private |
sample ring buffer
Definition at line 168 of file audio.h.
Referenced by CyclicCall(), DropSamplesOlderThanPtsMs(), Enqueue(), FlushBuffers(), GetFreeBytes(), GetOutputPtsMsInternal(), GetUsedBytes(), and IsBufferFull().
|
private |
pointer to AVCodecContext pkts_timebase
Definition at line 110 of file audio.h.
Referenced by InitFilter(), MsToPts(), PtsToMs(), SetTimebase(), and Setup().
|
private |
flag to use soft volume
Definition at line 122 of file audio.h.
Referenced by CyclicCall(), SetSoftvol(), and SetVolume().
|
private |
volume descent for stereo
Definition at line 146 of file audio.h.
Referenced by SetStereoDescent(), and SetVolume().
|
private |
flag to use equalizer
Definition at line 150 of file audio.h.
Referenced by InitFilter(), and SetEq().
|
private |
current volume (0 .. 1000)
Definition at line 147 of file audio.h.
Referenced by CyclicCall(), SetStereoDescent(), SetVolume(), and SoftAmplify().
|
staticconstexprprivate |