WebrtcMediaDataEncoderCodec.h (2510B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef WebrtcMediaDataEncoderCodec_h__ 6 #define WebrtcMediaDataEncoderCodec_h__ 7 8 #include "MediaConduitInterface.h" 9 #include "MediaInfo.h" 10 #include "MediaResult.h" 11 #include "PlatformEncoderModule.h" 12 #include "WebrtcGmpVideoCodec.h" 13 #include "common_video/include/bitrate_adjuster.h" 14 #include "modules/video_coding/include/video_codec_interface.h" 15 16 namespace mozilla { 17 18 class MediaData; 19 class PEMFactory; 20 class SharedThreadPool; 21 class TaskQueue; 22 23 class WebrtcMediaDataEncoder : public RefCountedWebrtcVideoEncoder { 24 public: 25 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WebrtcMediaDataEncoder, final); 26 27 static bool CanCreate(const webrtc::VideoCodecType aCodecType); 28 29 explicit WebrtcMediaDataEncoder(const webrtc::SdpVideoFormat& aFormat); 30 31 int32_t InitEncode(const webrtc::VideoCodec* aCodecSettings, 32 const webrtc::VideoEncoder::Settings& aSettings) override; 33 34 int32_t RegisterEncodeCompleteCallback( 35 webrtc::EncodedImageCallback* aCallback) override; 36 37 int32_t Shutdown() override; 38 39 int32_t Encode( 40 const webrtc::VideoFrame& aInputFrame, 41 const std::vector<webrtc::VideoFrameType>* aFrameTypes) override; 42 43 int32_t SetRates( 44 const webrtc::VideoEncoder::RateControlParameters& aParameters) override; 45 46 WebrtcVideoEncoder::EncoderInfo GetEncoderInfo() const override; 47 MediaEventSource<uint64_t>* InitPluginEvent() override { return nullptr; } 48 49 MediaEventSource<uint64_t>* ReleasePluginEvent() override { return nullptr; } 50 51 private: 52 virtual ~WebrtcMediaDataEncoder(); 53 54 bool SetupConfig(const webrtc::VideoCodec* aCodecSettings); 55 already_AddRefed<MediaDataEncoder> CreateEncoder( 56 const webrtc::VideoCodec* aCodecSettings); 57 bool InitEncoder(); 58 59 const RefPtr<TaskQueue> mTaskQueue; 60 const RefPtr<PEMFactory> mFactory; 61 RefPtr<MediaDataEncoder> mEncoder; 62 63 Mutex mCallbackMutex MOZ_UNANNOTATED; // Protects mCallback and mError. 64 webrtc::EncodedImageCallback* mCallback = nullptr; 65 MediaResult mError = NS_OK; 66 67 VideoInfo mInfo; 68 webrtc::CodecParameterMap mFormatParams; 69 webrtc::CodecSpecificInfo mCodecSpecific; 70 webrtc::BitrateAdjuster mBitrateAdjuster; 71 uint32_t mMaxFrameRate = {0}; 72 uint32_t mMinBitrateBps = {0}; 73 uint32_t mMaxBitrateBps = {0}; 74 }; 75 76 } // namespace mozilla 77 78 #endif // WebrtcMediaDataEncoderCodec_h__