tor-browser

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

RTCEncodedAudioFrame.h (3442B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef MOZILLA_DOM_MEDIA_WEBRTC_JSAPI_RTCENCODEDAUDIOFRAME_H_
      8 #define MOZILLA_DOM_MEDIA_WEBRTC_JSAPI_RTCENCODEDAUDIOFRAME_H_
      9 
     10 #include "mozilla/RefPtr.h"
     11 #include "mozilla/dom/RTCEncodedAudioFrameBinding.h"
     12 #include "mozilla/dom/RTCEncodedFrameBase.h"
     13 #include "nsIGlobalObject.h"
     14 
     15 namespace mozilla::dom {
     16 
     17 class StructuredCloneHolder;
     18 struct RTCEncodedAudioFrameOptions;
     19 
     20 struct RTCEncodedAudioFrameData : RTCEncodedFrameState {
     21  RTCEncodedAudioFrameMetadata mMetadata;
     22 
     23  [[nodiscard]] RTCEncodedAudioFrameData Clone() const;
     24 };
     25 
     26 // Wraps a libwebrtc frame, allowing the frame buffer to be modified, and
     27 // providing read-only access to various metadata. After the libwebrtc frame is
     28 // extracted (with RTCEncodedFrameBase::TakeFrame), the frame buffer is
     29 // detached, but the metadata remains accessible.
     30 class RTCEncodedAudioFrame final : public RTCEncodedAudioFrameData,
     31                                   public RTCEncodedFrameBase {
     32 public:
     33  explicit RTCEncodedAudioFrame(
     34      nsIGlobalObject* aGlobal,
     35      std::unique_ptr<webrtc::TransformableFrameInterface> aFrame,
     36      uint64_t aCounter, RTCRtpScriptTransformer* aOwner);
     37 
     38  explicit RTCEncodedAudioFrame(nsIGlobalObject* aGlobal,
     39                                RTCEncodedAudioFrameData&& aData);
     40 
     41  // nsISupports
     42  NS_DECL_ISUPPORTS_INHERITED
     43  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(RTCEncodedAudioFrame,
     44                                                         RTCEncodedFrameBase)
     45 
     46  // webidl (timestamp and data accessors live in base class)
     47  JSObject* WrapObject(JSContext* aCx,
     48                       JS::Handle<JSObject*> aGivenProto) override;
     49 
     50  static already_AddRefed<RTCEncodedAudioFrame> Constructor(
     51      const GlobalObject& aGlobal, const RTCEncodedAudioFrame& aOriginalFrame,
     52      const RTCEncodedAudioFrameOptions& aOptions, ErrorResult& aRv);
     53 
     54  nsIGlobalObject* GetParentObject() const;
     55 
     56  void GetMetadata(RTCEncodedAudioFrameMetadata& aMetadata) const;
     57 
     58  bool CheckOwner(RTCRtpScriptTransformer* aOwner) const override;
     59 
     60  bool IsVideo() const override { return false; }
     61 
     62  static JSObject* ReadStructuredClone(JSContext* aCx, nsIGlobalObject* aGlobal,
     63                                       JSStructuredCloneReader* aReader,
     64                                       RTCEncodedAudioFrameData& aData);
     65  bool WriteStructuredClone(JSStructuredCloneWriter* aWriter,
     66                            StructuredCloneHolder* aHolder) const;
     67 
     68 private:
     69  virtual ~RTCEncodedAudioFrame();
     70 
     71  // forbid copy/move to keep mState member in base valid
     72  RTCEncodedAudioFrame(const RTCEncodedAudioFrame&) = delete;
     73  RTCEncodedAudioFrame& operator=(const RTCEncodedAudioFrame&) = delete;
     74  RTCEncodedAudioFrame(RTCEncodedAudioFrame&&) = delete;
     75  RTCEncodedAudioFrame& operator=(RTCEncodedAudioFrame&&) = delete;
     76 
     77  // RTCEncodedAudioFrame can run on either main thread or worker thread.
     78  void AssertIsOnOwningThread() const {
     79    NS_ASSERT_OWNINGTHREAD(RTCEncodedAudioFrame);
     80  }
     81 
     82  RefPtr<RTCRtpScriptTransformer> mOwner;
     83 };
     84 
     85 }  // namespace mozilla::dom
     86 #endif  // MOZILLA_DOM_MEDIA_WEBRTC_JSAPI_RTCENCODEDAUDIOFRAME_H_