tor-browser

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

EncodedAudioChunk.h (3583B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      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 http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_dom_EncodedAudioChunk_h
      8 #define mozilla_dom_EncodedAudioChunk_h
      9 
     10 #include "js/TypeDecls.h"
     11 #include "mozilla/ErrorResult.h"
     12 #include "mozilla/Maybe.h"
     13 #include "mozilla/dom/BindingDeclarations.h"
     14 #include "mozilla/dom/BufferSourceBindingFwd.h"
     15 #include "nsCycleCollectionParticipant.h"
     16 #include "nsWrapperCache.h"
     17 
     18 class nsIGlobalObject;
     19 
     20 namespace mozilla {
     21 
     22 class MediaAlignedByteBuffer;
     23 class MediaRawData;
     24 
     25 namespace dom {
     26 
     27 class StructuredCloneHolder;
     28 
     29 enum class EncodedAudioChunkType : uint8_t;
     30 struct EncodedAudioChunkInit;
     31 
     32 }  // namespace dom
     33 }  // namespace mozilla
     34 
     35 namespace mozilla::dom {
     36 
     37 class EncodedAudioChunkData {
     38 public:
     39  EncodedAudioChunkData(already_AddRefed<MediaAlignedByteBuffer> aBuffer,
     40                        const EncodedAudioChunkType& aType, int64_t aTimestamp,
     41                        Maybe<uint64_t>&& aDuration);
     42  EncodedAudioChunkData(const EncodedAudioChunkData& aData) = default;
     43  ~EncodedAudioChunkData() = default;
     44 
     45  UniquePtr<EncodedAudioChunkData> Clone() const;
     46  already_AddRefed<MediaRawData> TakeData();
     47 
     48  nsCString ToString() const;
     49 
     50 protected:
     51  // mBuffer's byte length is guaranteed to be smaller than UINT32_MAX.
     52  RefPtr<MediaAlignedByteBuffer> mBuffer;
     53  EncodedAudioChunkType mType;
     54  int64_t mTimestamp;
     55  Maybe<uint64_t> mDuration;
     56 };
     57 
     58 class EncodedAudioChunk final : public EncodedAudioChunkData,
     59                                public nsISupports,
     60                                public nsWrapperCache {
     61 public:
     62  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     63  NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(EncodedAudioChunk)
     64 
     65 public:
     66  EncodedAudioChunk(nsIGlobalObject* aParent,
     67                    already_AddRefed<MediaAlignedByteBuffer> aBuffer,
     68                    const EncodedAudioChunkType& aType, int64_t aTimestamp,
     69                    Maybe<uint64_t>&& aDuration);
     70 
     71  EncodedAudioChunk(nsIGlobalObject* aParent,
     72                    const EncodedAudioChunkData& aData);
     73 
     74 protected:
     75  ~EncodedAudioChunk() = default;
     76 
     77 public:
     78  nsIGlobalObject* GetParentObject() const;
     79 
     80  JSObject* WrapObject(JSContext* aCx,
     81                       JS::Handle<JSObject*> aGivenProto) override;
     82 
     83  static already_AddRefed<EncodedAudioChunk> Constructor(
     84      const GlobalObject& aGlobal, const EncodedAudioChunkInit& aInit,
     85      ErrorResult& aRv);
     86 
     87  EncodedAudioChunkType Type() const;
     88 
     89  int64_t Timestamp() const;
     90 
     91  Nullable<uint64_t> GetDuration() const;
     92 
     93  uint32_t ByteLength() const;
     94 
     95  void CopyTo(const AllowSharedBufferSource& aDestination, ErrorResult& aRv);
     96 
     97  // [Serializable] implementations: {Read, Write}StructuredClone
     98  static JSObject* ReadStructuredClone(JSContext* aCx, nsIGlobalObject* aGlobal,
     99                                       JSStructuredCloneReader* aReader,
    100                                       const EncodedAudioChunkData& aData);
    101 
    102  bool WriteStructuredClone(JSStructuredCloneWriter* aWriter,
    103                            StructuredCloneHolder* aHolder) const;
    104 
    105 private:
    106  // EncodedAudioChunk can run on either main thread or worker thread.
    107  void AssertIsOnOwningThread() const {
    108    NS_ASSERT_OWNINGTHREAD(EncodedAudioChunk);
    109  }
    110 
    111  nsCOMPtr<nsIGlobalObject> mParent;
    112 };
    113 
    114 }  // namespace mozilla::dom
    115 
    116 #endif  // mozilla_dom_EncodedAudioChunk_h