RemoteMediaDataEncoderChild.h (3484B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=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 http://mozilla.org/MPL/2.0/. */ 6 #ifndef include_dom_media_ipc_RemoteMediaDataEncoderChild_h 7 #define include_dom_media_ipc_RemoteMediaDataEncoderChild_h 8 9 #include <functional> 10 11 #include "PlatformEncoderModule.h" 12 #include "mozilla/MediaActorUtils.h" 13 #include "mozilla/PRemoteEncoderChild.h" 14 #include "mozilla/RemoteMediaManagerChild.h" 15 #include "mozilla/ShmemRecycleAllocator.h" 16 17 namespace mozilla { 18 19 class RemoteMediaManagerChild; 20 21 class RemoteMediaDataEncoderChild final 22 : public ShmemRecycleAllocator<RemoteMediaDataEncoderChild>, 23 public PRemoteEncoderChild, 24 public MediaDataEncoder { 25 friend class PRemoteEncoderChild; 26 27 public: 28 MEDIA_INLINE_DECL_THREADSAFE_REFCOUNTING_META(RemoteMediaDataEncoderChild, 29 NS_IMETHOD_, delete(this), 30 MaybeDestroyActor(), final); 31 32 RemoteMediaDataEncoderChild(nsCOMPtr<nsISerialEventTarget>&& aThread, 33 RemoteMediaIn aLocation); 34 35 nsISerialEventTarget* GetManagerThread() const { return mThread; } 36 RemoteMediaIn GetLocation() const { return mLocation; } 37 38 RefPtr<PlatformEncoderModule::CreateEncoderPromise> Construct(); 39 40 void ActorDestroy(ActorDestroyReason aWhy) override; 41 42 // MediaDataEncoder 43 RefPtr<MediaDataEncoder::InitPromise> Init() override; 44 RefPtr<MediaDataEncoder::EncodePromise> Encode( 45 const MediaData* aSample) override; 46 RefPtr<MediaDataEncoder::EncodePromise> Encode( 47 nsTArray<RefPtr<MediaData>>&& aSamples) override; 48 RefPtr<MediaDataEncoder::EncodePromise> Drain() override; 49 RefPtr<MediaDataEncoder::ReconfigurationPromise> Reconfigure( 50 const RefPtr<const EncoderConfigurationChangeList>& aConfigurationChanges) 51 override; 52 RefPtr<mozilla::ShutdownPromise> Shutdown() override; 53 bool IsHardwareAccelerated(nsACString& aFailureReason) const override; 54 nsCString GetDescriptionName() const override; 55 RefPtr<GenericPromise> SetBitrate(uint32_t aBitsPerSec) override; 56 57 private: 58 virtual ~RemoteMediaDataEncoderChild(); 59 RemoteMediaManagerChild* GetManager(); 60 61 virtual RefPtr<PRemoteEncoderChild::EncodePromise> DoSendEncode( 62 const nsTArray<RefPtr<MediaData>>& aSamples, ShmemRecycleTicket* aTicket); 63 64 void DoSendInit(); 65 void MaybeDestroyActor(); 66 67 const nsCOMPtr<nsISerialEventTarget> mThread; 68 const RemoteMediaIn mLocation; 69 bool mRemoteCrashed = false; 70 bool mHasConstructed = false; 71 72 MozPromiseHolder<PlatformEncoderModule::CreateEncoderPromise> 73 mConstructPromise; 74 MozPromiseHolder<MediaDataEncoder::InitPromise> mInitPromise; 75 MozPromiseHolder<MediaDataEncoder::EncodePromise> mDrainPromise; 76 MozPromiseHolder<MediaDataEncoder::ReconfigurationPromise> 77 mReconfigurePromise; 78 MozPromiseHolder<mozilla::ShutdownPromise> mShutdownPromise; 79 80 mutable Mutex mMutex{"RemoteMediaDataEncoderChild"}; 81 82 nsCString mHardwareAcceleratedReason MOZ_GUARDED_BY(mMutex); 83 nsCString mDescription MOZ_GUARDED_BY(mMutex); 84 bool mIsHardwareAccelerated MOZ_GUARDED_BY(mMutex) = false; 85 bool mNeedsShutdown MOZ_GUARDED_BY(mMutex) = false; 86 }; 87 88 } // namespace mozilla 89 90 #endif // include_dom_media_ipc_RemoteMediaDataEncoderChild_h