/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #pragma once #include #include #include "mozilla/Maybe.h" #include "mozilla/TimeStamp.h" #include "nsISupportsImpl.h" #include "nsStringFwd.h" namespace webrtc { class VideoFrame; } namespace mozilla { class ScreencastEncoder { NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ScreencastEncoder) public: static RefPtr create(nsCString& errorString, const nsCString& filePath, int width, int height, Maybe scale, int offsetTop); class VPXCodec; ScreencastEncoder(std::unique_ptr&&, Maybe scale, int offsetTop); void encodeFrame(const webrtc::VideoFrame& videoFrame); void finish(std::function&& callback); private: ~ScreencastEncoder(); void flushLastFrame(); std::unique_ptr m_vpxCodec; Maybe m_scale; int m_offsetTop; TimeStamp m_lastFrameTimestamp; class VPXFrame; std::unique_ptr m_lastFrame; }; } // namespace mozilla