tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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__