MythTV master
audiooutputnull.cpp
Go to the documentation of this file.
1#include "audiooutputnull.h"
2
3#include <algorithm>
4#include <cstddef>
5#include <cstdint>
6
8
9static constexpr uint8_t CHANNELS_MIN { 1 };
10static constexpr uint8_t CHANNELS_MAX { 8 };
11
13 AudioOutputBase(settings)
14{
15 InitSettings(settings);
16 if (settings.m_init)
17 Reconfigure(settings);
18}
19
21{
22 KillAudio();
23}
24
26{
27 LOG(VB_GENERAL, LOG_INFO, "Opening NULL audio device, will fail.");
28
31
32 return false;
33}
34
36{
37}
38
40{
41 // Pretend that we support everything
42 auto *settings = new AudioOutputSettings();
43
44 // NOLINTNEXTLINE(bugprone-infinite-loop)
45 while (int rate = settings->GetNextRate())
46 {
47 settings->AddSupportedRate(rate);
48 }
49
50 // NOLINTNEXTLINE(bugprone-infinite-loop)
51 while (AudioFormat fmt = settings->GetNextFormat())
52 {
53 settings->AddSupportedFormat(fmt);
54 }
55
56 for (unsigned channels = CHANNELS_MIN; channels <= CHANNELS_MAX; channels++)
57 {
58 settings->AddSupportedChannels(channels);
59 }
60
61 settings->setPassthrough(-1); // no passthrough
62
63 return settings;
64}
65
66
67void AudioOutputNULL::WriteAudio(unsigned char* aubuf, int size)
68{
70 {
72 {
73 LOG(VB_GENERAL, LOG_ERR, "null audio output should not have just "
74 "had data written to it");
75 return;
76 }
78 m_pcmOutputBuffer.insert(m_pcmOutputBuffer.end(), aubuf, aubuf+size);
80 }
81}
82
83int AudioOutputNULL::readOutputData(unsigned char *read_buffer, size_t max_length)
84{
85 size_t amount_to_read = std::min(max_length, m_pcmOutputBuffer.size());
86
89 m_pcmOutputBuffer.cbegin() + amount_to_read,
90 read_buffer);
92 m_pcmOutputBuffer.cbegin() + amount_to_read);
94
95 return amount_to_read;
96}
97
99{
101 {
103 m_pcmOutputBuffer.clear();
104 m_pcmOutputBufferMutex.unlock();
105 }
107}
108
110{
112 return m_pcmOutputBuffer.size();
113
114 return 0;
115}
static constexpr uint8_t CHANNELS_MAX
static constexpr uint8_t CHANNELS_MIN
static constexpr int32_t NULLAUDIO_OUTPUT_BUFFER_SIZE
void KillAudio(void)
Kill the output thread and cleanup.
void Reconfigure(const AudioSettings &settings) override
(Re)Configure AudioOutputBase
void InitSettings(const AudioSettings &settings)
void Reset(void) override
Reset the audiobuffer, timecode and mythmusic visualisation.
void WriteAudio(unsigned char *aubuf, int size) override
int GetBufferedOnSoundcard(void) const override
Return the size in bytes of frames currently in the audio buffer adjusted with the audio playback lat...
QMutex m_pcmOutputBufferMutex
void Reset(void) override
Reset the audiobuffer, timecode and mythmusic visualisation.
AudioOutputNULL(const AudioSettings &settings)
void CloseDevice(void) override
AudioOutputSettings * GetOutputSettings(bool digital) override
~AudioOutputNULL() override
int readOutputData(unsigned char *read_buffer, size_t max_length) override
bool OpenDevice(void) override
std::vector< unsigned char > m_pcmOutputBuffer
const int & channels() const
Definition: audiooutput.h:254
bool m_init
If set to false, AudioOutput instance will not try to initially open the audio device.
Definition: audiosettings.h:85
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MBASE_PUBLIC long long copy(QFile &dst, QFile &src, uint block_size=0)
Copies src file to dst file.