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>
OBJC_CLASS AVCaptureAudioDataOutput;
OBJC_CLASS AVCaptureConnection;
OBJC_CLASS AVCaptureDevice;
OBJC_CLASS AVCaptureOutput;
OBJC_CLASS AVCaptureSession;
OBJC_CLASS AVCaptureVideoDataOutput;
OBJC_CLASS NSError;
OBJC_CLASS NSNotification;
OBJC_CLASS WebCoreAVMediaCaptureSourceObserver;
typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
namespace WebCore {
class AVMediaCaptureSource;
class AVMediaCaptureSource : public RealtimeMediaSource {
public:
virtual ~AVMediaCaptureSource();
virtual void captureOutputDidOutputSampleBufferFromConnection(AVCaptureOutput*, CMSampleBufferRef, AVCaptureConnection*) = 0;
void captureSessionIsRunningDidChange(bool);
void captureSessionRuntimeError(RetainPtr<NSError>);
enum class InterruptionReason { None, VideoNotAllowedInBackground, AudioInUse, VideoInUse, VideoNotAllowedInSideBySide };
void captureSessionBeginInterruption(RetainPtr<NSNotification>);
void captureSessionEndInterruption(RetainPtr<NSNotification>);
AVCaptureSession *session() const { return m_session.get(); }
const RealtimeMediaSourceSettings& settings() const final;
void startProducingData() final;
void stopProducingData() final;
protected:
AVMediaCaptureSource(AVCaptureDevice*, const AtomicString&, RealtimeMediaSource::Type);
virtual bool 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(); }
RealtimeMediaSourceSupportedConstraints& supportedConstraints();
const RealtimeMediaSourceCapabilities& capabilities() const final;
void setVideoSampleBufferDelegate(AVCaptureVideoDataOutput*);
void setAudioSampleBufferDelegate(AVCaptureAudioDataOutput*);
private:
bool setupSession();
void beginConfiguration() final;
void commitConfiguration() final;
bool isCaptureSource() const final { return true; }
bool interrupted() const final;
void initializeSettings();
void initializeCapabilities();
RealtimeMediaSourceSettings m_currentSettings;
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
RetainPtr<WebCoreAVMediaCaptureSourceObserver> m_objcObserver;
std::unique_ptr<RealtimeMediaSourceCapabilities> m_capabilities;
RetainPtr<AVCaptureSession> m_session;
RetainPtr<AVCaptureDevice> m_device;
InterruptionReason m_interruption { InterruptionReason::None };
bool m_isRunning { false };
};
}
#endif // ENABLE(MEDIA_STREAM)
#endif // AVMediaCaptureSource_h