39 lines
1.4 KiB
C
39 lines
1.4 KiB
C
|
// ------------------------------------------------
|
||
|
// Copyright Joe Marshall 2024- All Rights Reserved
|
||
|
// ------------------------------------------------
|
||
|
//
|
||
|
// interface for audio output classes. This is used
|
||
|
// so that AndroidVulkanVideoImpl doesn't need to
|
||
|
// know about Unreal, so I can keep Unreal and
|
||
|
// Android code separate.
|
||
|
// ------------------------------------------------
|
||
|
#pragma once
|
||
|
|
||
|
#include <chrono>
|
||
|
|
||
|
class IAudioOut
|
||
|
{
|
||
|
public:
|
||
|
virtual ~IAudioOut() {};
|
||
|
virtual void init(int sampleRate, int channels) = 0;
|
||
|
virtual void initSilent() = 0;
|
||
|
virtual void close() = 0;
|
||
|
virtual void sendBuffer(uint8_t *buf, int bufSize, int64_t presentationTimeNS,
|
||
|
bool reset = false) = 0;
|
||
|
virtual int64_t getPresentationTimeNS() = 0; // current presentation time
|
||
|
virtual bool setVolume(float level) = 0;
|
||
|
virtual void setPlaying(bool playing) = 0;
|
||
|
virtual bool setRate(float rate) = 0;
|
||
|
|
||
|
virtual int64_t getQueuedTimeNS() = 0;
|
||
|
|
||
|
virtual void onSeek(int64_t newPresentationTimeNS, bool resetAudio) = 0;
|
||
|
virtual void onHasVideoTime(int64_t newPresentationTimeNS) = 0;
|
||
|
|
||
|
typedef std::chrono::nanoseconds NsDuration;
|
||
|
typedef std::chrono::time_point<std::chrono::steady_clock, NsDuration> NsTime;
|
||
|
|
||
|
virtual NsTime getWaitTimeForPresentationTime(int64_t presentationTimeNS,
|
||
|
int64_t maxDuration) = 0;
|
||
|
};
|