AudioSourceProviderAVFObjC.h [plain text]
#ifndef AudioSourceProviderAVFObjC_h
#define AudioSourceProviderAVFObjC_h
#if ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX)
#include "AudioSourceProvider.h"
#include <wtf/MediaTime.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
#include <wtf/RetainPtr.h>
OBJC_CLASS AVAssetTrack;
OBJC_CLASS AVPlayerItem;
OBJC_CLASS AVMutableAudioMix;
typedef const struct opaqueMTAudioProcessingTap *MTAudioProcessingTapRef;
typedef struct AudioBufferList AudioBufferList;
typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
typedef struct OpaqueAudioConverter* AudioConverterRef;
typedef uint32_t MTAudioProcessingTapFlags;
typedef signed long CMItemCount;
namespace WebCore {
class CARingBuffer;
class AudioSourceProviderAVFObjC : public RefCounted<AudioSourceProviderAVFObjC>, public AudioSourceProvider {
public:
static RefPtr<AudioSourceProviderAVFObjC> create(AVPlayerItem*);
virtual ~AudioSourceProviderAVFObjC();
void setPlayerItem(AVPlayerItem *);
void setAudioTrack(AVAssetTrack *);
private:
AudioSourceProviderAVFObjC(AVPlayerItem *);
void destroyMix();
void createMix();
virtual void provideInput(AudioBus*, size_t framesToProcess) override;
virtual void setClient(AudioSourceProviderClient*) override;
static void initCallback(MTAudioProcessingTapRef, void*, void**);
static void finalizeCallback(MTAudioProcessingTapRef);
static void prepareCallback(MTAudioProcessingTapRef, CMItemCount, const AudioStreamBasicDescription*);
static void unprepareCallback(MTAudioProcessingTapRef);
static void processCallback(MTAudioProcessingTapRef, CMItemCount, MTAudioProcessingTapFlags, AudioBufferList*, CMItemCount*, MTAudioProcessingTapFlags*);
void init(void* clientInfo, void** tapStorageOut);
void finalize();
void prepare(CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat);
void unprepare();
void process(CMItemCount numberFrames, MTAudioProcessingTapFlags flagsIn, AudioBufferList *bufferListInOut, CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut);
RetainPtr<AVPlayerItem> m_avPlayerItem;
RetainPtr<AVAssetTrack> m_avAssetTrack;
RetainPtr<AVMutableAudioMix> m_avAudioMix;
RetainPtr<MTAudioProcessingTapRef> m_tap;
RetainPtr<AudioConverterRef> m_converter;
std::unique_ptr<AudioBufferList> m_list;
std::unique_ptr<AudioStreamBasicDescription> m_tapDescription;
std::unique_ptr<AudioStreamBasicDescription> m_outputDescription;
std::unique_ptr<CARingBuffer> m_ringBuffer;
MediaTime m_startTimeAtLastProcess;
MediaTime m_endTimeAtLastProcess;
uint64_t m_writeAheadCount;
uint64_t m_writeCount;
uint64_t m_readCount;
bool m_paused;
AudioSourceProviderClient* m_client;
};
}
#endif
#endif