5using namespace std::chrono_literals;
9#include <QCoreApplication>
45 m_name(
std::move(name)), m_desc(
std::move(desc)),
55 using ADCVect = QVector<AudioDeviceConfig>;
57 static void Cleanup(
void);
58 static ADCVect* GetOutputList(
void);
60 QString &name,
const QString &desc,
bool willsuspendpa =
false);
64 const QString &main_device,
const QString &passthru_device,
65 AudioFormat format,
int channels, AVCodecID codec,
int samplerate,
69 bool willsuspendpa =
true);
71 const QString &main_device,
72 const QString &passthru_device = QString(),
73 bool willsuspendpa =
true);
82 virtual void SetStretchFactor(
float factor);
90 virtual bool CanPassthrough(
int samplerate,
int channels,
91 AVCodecID codec,
int profile)
const;
110 std::chrono::milliseconds timecode) = 0;
124 std::chrono::milliseconds timecode,
int frames) = 0;
142 virtual void Pause(
bool paused) = 0;
156 { fill = total = 0; }
161 size_t max_length) = 0;
195 int DecodeAudio(AVCodecContext *ctx,
196 uint8_t *buffer,
int &data_size,
197 const AVPacket *pkt);
201 static const int kMaxSizeBuffer = 384000;
216 bool playPinkNoise(
char* frames,
int channels,
int channel,
int count,
int bits);
221 void dispatchError(
const QString &e);
222 void dispatchVisual(uchar *b,
unsigned long b_len,
223 std::chrono::milliseconds timecode,
int chan,
int prec);
224 void prepareVisuals();
226 bool m_isConfigured {
false};
227 bool m_pulseWasSuspended {
false};
236 Event(std::chrono::seconds s,
unsigned long w,
int b,
int f,
int p,
int c) :
237 MythEvent(kInfo), m_elaspedSeconds(s), m_writtenBytes(w),
238 m_brate(b), m_freq(f), m_prec(
p), m_chan(c) {}
241 m_errorMsg(
std::move(e))
251 const int &
bitrate()
const {
return m_brate; }
257 {
return new Event(*
this); }
259 static const inline QEvent::Type kPlaying {
static_cast<QEvent::Type
>(QEvent::registerEventType())};
260 static const inline QEvent::Type kBuffering {
static_cast<QEvent::Type
>(QEvent::registerEventType())};
261 static const inline QEvent::Type kInfo {
static_cast<QEvent::Type
>(QEvent::registerEventType())};
262 static const inline QEvent::Type kPaused {
static_cast<QEvent::Type
>(QEvent::registerEventType())};
263 static const inline QEvent::Type kStopped {
static_cast<QEvent::Type
>(QEvent::registerEventType())};
264 static const inline QEvent::Type kError {
static_cast<QEvent::Type
>(QEvent::registerEventType())};
278 std::chrono::seconds m_elaspedSeconds {0s};
279 unsigned long m_writtenBytes {0};
AudioDeviceConfig(const AudioDeviceConfig &)=default
AudioOutputSettings m_settings
AudioDeviceConfig(QString name, QString desc)
AudioDeviceConfig(AudioDeviceConfig &&)=default
virtual void bufferOutputData(bool y)=0
virtual int GetChannels(void) const
bool isConfigured() const
virtual bool AddData(void *buffer, int len, std::chrono::milliseconds timecode, int frames)=0
Add data to the audiobuffer for playback.
virtual bool IsPaused(void) const =0
virtual void SetTimecode(std::chrono::milliseconds timecode)=0
Event(std::chrono::seconds s, unsigned long w, int b, int f, int p, int c)
virtual bool NeedDecodingBeforePassthrough(void) const
const std::chrono::seconds & elapsedSeconds() const
virtual void Drain(void)=0
virtual bool has_optimized_SIMD()
virtual std::chrono::milliseconds GetAudioBufferedTime(void)
report amount of audio buffered in milliseconds.
virtual bool IsUpmixing(void)
virtual void PauseUntilBuffered(void)=0
virtual std::chrono::milliseconds GetAudiotime(void)=0
virtual AudioFormat GetFormat(void) const
virtual std::chrono::milliseconds LengthLastData(void) const
virtual void SetEffDsp(int dsprate)=0
virtual bool ToggleUpmix(void)
QVector< AudioDeviceConfig > ADCVect
virtual int GetBytesPerFrame(void) const
~Event() override=default
Event(const Event &o)=default
Event & operator=(const Event &other)=delete
const int & frequency() const
virtual bool CanDownmix(void) const
virtual void Reset(void)=0
virtual bool CanUpmix(void)
virtual bool AddFrames(void *buffer, int frames, std::chrono::milliseconds timecode)=0
Add frames to the audiobuffer for playback.
const int & bitrate() const
bool PulseStatus(void) const
virtual bool CanProcess(AudioFormat fmt)
virtual void Reconfigure(const AudioSettings &settings)=0
QString errorMessage() const
const unsigned long & writtenBytes() const
virtual uint32_t CanProcess(void)
virtual void GetBufferStatus(uint &fill, uint &total)
virtual void Pause(bool paused)=0
const int & precision() const
virtual float GetStretchFactor(void) const
Event & operator=(Event &&)=delete
MythEvent * clone(void) const override
Q_DECLARE_TR_FUNCTIONS(AudioOutput)
virtual void SetSourceBitrate(int)
std::vector< Visualization * > m_visuals
const int & channels() const
virtual int readOutputData(unsigned char *read_buffer, size_t max_length)=0
This class is used as a container for messages.
Superclass for making an object have a set of listeners.
VERBOSE_PREAMBLE Most true