AVMediaCaptureSource.h [plain text]
#ifndef AVMediaCaptureSource_h
#define AVMediaCaptureSource_h
#if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION)
#include "GenericTaskQueue.h"
#include "RealtimeMediaSource.h"
#include "Timer.h"
#include <wtf/Function.h>
#include <wtf/RetainPtr.h>
#include <wtf/WeakPtr.h>
OBJC_CLASS AVCaptureAudioDataOutput;
OBJC_CLASS AVCaptureConnection;
OBJC_CLASS AVCaptureDevice;
OBJC_CLASS AVCaptureOutput;
OBJC_CLASS AVCaptureSession;
OBJC_CLASS AVCaptureVideoDataOutput;
OBJC_CLASS WebCoreAVMediaCaptureSourceObserver;
typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
namespace WebCore {
class AVMediaCaptureSource : public RealtimeMediaSource {
public:
virtual ~AVMediaCaptureSource();
virtual void captureOutputDidOutputSampleBufferFromConnection(AVCaptureOutput*, CMSampleBufferRef, AVCaptureConnection*) = 0;
virtual void captureSessionIsRunningDidChange(bool);
AVCaptureSession *session() const { return m_session.get(); }
const RealtimeMediaSourceSettings& settings() override;
void startProducingData() override;
void stopProducingData() override;
bool isProducingData() const override { return m_isRunning; }
WeakPtr<AVMediaCaptureSource> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
protected:
AVMediaCaptureSource(AVCaptureDevice*, const AtomicString&, RealtimeMediaSource::Type, PassRefPtr<MediaConstraints>);
AudioSourceProvider* audioSourceProvider() override;
virtual void setupCaptureSession() = 0;
virtual void shutdownCaptureSession() = 0;
virtual void updateSettings(RealtimeMediaSourceSettings&) = 0;
virtual void initializeCapabilities(RealtimeMediaSourceCapabilities&) = 0;
virtual void initializeSupportedConstraints(RealtimeMediaSourceSupportedConstraints&) = 0;
AVCaptureDevice *device() const { return m_device.get(); }
MediaConstraints* constraints() { return m_constraints.get(); }
RealtimeMediaSourceSupportedConstraints& supportedConstraints();
RefPtr<RealtimeMediaSourceCapabilities> capabilities() override;
void setVideoSampleBufferDelegate(AVCaptureVideoDataOutput*);
void setAudioSampleBufferDelegate(AVCaptureAudioDataOutput*);
void scheduleDeferredTask(Function<void ()>&&);
private:
void setupSession();
void reset() override;
RealtimeMediaSourceSettings m_currentSettings;
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
WeakPtrFactory<AVMediaCaptureSource> m_weakPtrFactory;
RetainPtr<WebCoreAVMediaCaptureSourceObserver> m_objcObserver;
RefPtr<MediaConstraints> m_constraints;
RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
RetainPtr<AVCaptureSession> m_session;
RetainPtr<AVCaptureDevice> m_device;
bool m_isRunning { false};
};
}
#endif // ENABLE(MEDIA_STREAM)
#endif // AVMediaCaptureSource_h