SilentPatch/SilentPatchSA/FLACDecoderSA.h

37 lines
1.2 KiB
C
Raw Normal View History

#pragma once
#include "AudioHardwareSA.h"
2025-01-12 20:41:33 +05:00
#define DR_FLAC_NO_STDIO
#define DR_FLAC_NO_OGG
#include "dr_flac.h"
2024-01-28 20:12:16 +05:00
class CAEFLACDecoder final : public CAEStreamingDecoder
{
private:
2025-01-12 20:41:33 +05:00
drflac* m_FLACdecoder = nullptr;
drflac_uint64 m_currentSample;
drflac_int32* m_buffer = nullptr;
size_t m_curBlockSize, m_maxBlockSize = 0;
size_t m_bufferCursor;
bool m_eof;
public:
CAEFLACDecoder(CAEDataStream* stream)
2017-05-14 03:29:45 +05:00
: CAEStreamingDecoder(stream)
{}
2017-05-14 03:29:45 +05:00
virtual ~CAEFLACDecoder() override;
virtual bool Initialise() override;
virtual uint32_t FillBuffer(void* pBuf, uint32_t nLen) override;
virtual uint32_t GetStreamLengthMs() const override
2025-01-12 20:41:33 +05:00
{ return uint32_t((m_FLACdecoder->totalPCMFrameCount * 1000) / m_FLACdecoder->sampleRate); }
virtual uint32_t GetStreamPlayTimeMs() const override
2025-01-12 20:41:33 +05:00
{ return uint32_t((m_currentSample * 1000) / m_FLACdecoder->sampleRate); }
virtual void SetCursor(uint32_t nTime) override
2025-01-12 20:41:33 +05:00
{ drflac_seek_to_pcm_frame(m_FLACdecoder, (uint64_t(nTime) * m_FLACdecoder->sampleRate) / 1000); }
virtual uint32_t GetSampleRate() const override
2025-01-12 20:41:33 +05:00
{ return m_FLACdecoder->sampleRate; }
virtual uint32_t GetStreamID() const override
{ return GetStream()->GetID(); }
};