AVVideoCaptureSource.h [plain text]
#pragma once
#if ENABLE(MEDIA_STREAM) && USE(AVFOUNDATION)
#include "AVMediaCaptureSource.h"
#include "OrientationNotifier.h"
OBJC_CLASS CALayer;
OBJC_CLASS AVFrameRateRange;
typedef struct CGImage *CGImageRef;
typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
namespace WebCore {
class FloatRect;
class GraphicsContext;
class PixelBufferConformerCV;
class AVVideoCaptureSource : public AVMediaCaptureSource, private OrientationNotifier::Observer {
public:
static CaptureSourceOrError create(AVCaptureDevice*, const AtomicString&, const MediaConstraints*);
WEBCORE_EXPORT static VideoCaptureFactory& factory();
int32_t width() const { return m_width; }
int32_t height() const { return m_height; }
private:
AVVideoCaptureSource(AVCaptureDevice*, const AtomicString&);
virtual ~AVVideoCaptureSource();
bool setupCaptureSession() final;
void shutdownCaptureSession() final;
void updateSettings(RealtimeMediaSourceSettings&) final;
void applySizeAndFrameRate(std::optional<int> width, std::optional<int> height, std::optional<double>) final;
bool applySize(const IntSize&) final;
bool applyFrameRate(double) final;
bool setPreset(NSString*);
void monitorOrientation(OrientationNotifier&) final;
void computeSampleRotation();
bool isFrameRateSupported(double frameRate);
NSString *bestSessionPresetForVideoDimensions(std::optional<int> width, std::optional<int> height) const;
bool supportsSizeAndFrameRate(std::optional<int> width, std::optional<int> height, std::optional<double>) final;
void initializeCapabilities(RealtimeMediaSourceCapabilities&) final;
void initializeSupportedConstraints(RealtimeMediaSourceSupportedConstraints&) final;
void orientationChanged(int orientation) final;
bool setFrameRateConstraint(double minFrameRate, double maxFrameRate);
void captureOutputDidOutputSampleBufferFromConnection(AVCaptureOutput*, CMSampleBufferRef, AVCaptureConnection*) final;
void processNewFrame(RetainPtr<CMSampleBufferRef>, RetainPtr<AVCaptureConnection>);
RetainPtr<NSString> m_pendingPreset;
RetainPtr<CMSampleBufferRef> m_buffer;
RetainPtr<AVCaptureVideoDataOutput> m_videoOutput;
std::unique_ptr<PixelBufferConformerCV> m_pixelBufferConformer;
int32_t m_width { 0 };
int32_t m_height { 0 };
int m_sensorOrientation { 0 };
int m_deviceOrientation { 0 };
MediaSample::VideoRotation m_sampleRotation { MediaSample::VideoRotation::None };
};
}
#endif // ENABLE(MEDIA_STREAM)