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
This commit is contained in:
Andreas Pehrson 2015-09-17 11:46:05 +08:00
Родитель 461b9f6576
Коммит c5a6c8081a
1 изменённых файлов: 26 добавлений и 3 удалений

Просмотреть файл

@ -174,6 +174,30 @@ private:
// ----------------------------------------------------------------------
class AutoDriver : public OutputStreamDriver
{
public:
explicit AutoDriver(SourceMediaStream* aSourceStream,
const TrackID& aTrackId)
: OutputStreamDriver(aSourceStream, aTrackId) {}
void NewFrame(already_AddRefed<Image> 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> 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<double>& 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 {