From c5a6c8081a186138ea2f4e3c5416e8a671f8367b Mon Sep 17 00:00:00 2001 From: Andreas Pehrson Date: Thu, 17 Sep 2015 11:46:05 +0800 Subject: [PATCH] Bug 1152298 - Implement AutoDriver for CanvasCaptureMediaStream. r=mt --HG-- extra : transplant_source : %FF%5BC%94%8AD%97%E6zor%24%3A%05C%60%AB%94-%EB --- dom/media/CanvasCaptureMediaStream.cpp | 29 +++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/dom/media/CanvasCaptureMediaStream.cpp b/dom/media/CanvasCaptureMediaStream.cpp index 0236afd6d599..962883fdfca8 100644 --- a/dom/media/CanvasCaptureMediaStream.cpp +++ b/dom/media/CanvasCaptureMediaStream.cpp @@ -174,6 +174,30 @@ private: // ---------------------------------------------------------------------- +class AutoDriver : public OutputStreamDriver +{ +public: + explicit AutoDriver(SourceMediaStream* aSourceStream, + const TrackID& aTrackId) + : OutputStreamDriver(aSourceStream, aTrackId) {} + + void NewFrame(already_AddRefed aImage) override + { + // Don't reset `mFrameCaptureRequested` since AutoDriver shall always have + // `mFrameCaptureRequested` set to true. + // This also means we should accept every frame as NewFrame is called only + // after something changed. + + nsRefPtr image = aImage; + SetImage(image.forget()); + } + +protected: + virtual ~AutoDriver() {} +}; + +// ---------------------------------------------------------------------- + NS_IMPL_CYCLE_COLLECTION_INHERITED(CanvasCaptureMediaStream, DOMMediaStream, mCanvas) @@ -216,9 +240,8 @@ CanvasCaptureMediaStream::Init(const dom::Optional& aFPS, const TrackID& aTrackId) { if (!aFPS.WasPassed()) { - // TODO (Bug 1152298): Implement a real AutoDriver. - // We use a 30FPS TimerDriver for now. - mOutputStreamDriver = new TimerDriver(GetStream()->AsSourceStream(), 30.0, aTrackId); + mOutputStreamDriver = + new AutoDriver(GetStream()->AsSourceStream(), aTrackId); } else if (aFPS.Value() < 0) { return NS_ERROR_ILLEGAL_VALUE; } else {