/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef include_dom_media_ipc_RemoteMediaDataEncoder_h #define include_dom_media_ipc_RemoteMediaDataEncoder_h #include "PlatformEncoderModule.h" #include "mozilla/RemoteMediaDataEncoderChild.h" #include "mozilla/RemoteMediaManagerChild.h" #include "mozilla/ShmemRecycleAllocator.h" namespace mozilla { class RemoteMediaDataEncoder final : public MediaDataEncoder { friend class PRemoteEncoderChild; public: NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaDataEncoder, final); RemoteMediaDataEncoder(nsCOMPtr&& aThread, RemoteMediaIn aLocation); nsISerialEventTarget* GetManagerThread() const { return mThread; } RemoteMediaIn GetLocation() const { return mLocation; } RemoteMediaDataEncoderChild* GetChild() const { return mChild; } RefPtr Construct(); // MediaDataEncoder RefPtr Init() override; RefPtr Encode( const MediaData* aSample) override; RefPtr Encode( nsTArray>&& aSamples) override; RefPtr Drain() override; RefPtr Reconfigure( const RefPtr& aConfigurationChanges) override; RefPtr Shutdown() override; bool IsHardwareAccelerated(nsACString& aFailureReason) const override; nsCString GetDescriptionName() const override; RefPtr SetBitrate(uint32_t aBitsPerSec) override; private: virtual ~RemoteMediaDataEncoder(); RemoteMediaManagerChild* GetManager(); RefPtr DoSendEncode( const nsTArray>& aSamples, ShmemRecycleTicket* aTicket); void DoSendInit(); void MaybeDestroyActor(); const RefPtr mChild; const nsCOMPtr mThread; const RemoteMediaIn mLocation; bool mRemoteCrashed = false; bool mHasConstructed = false; MozPromiseHolder mConstructPromise; MozPromiseHolder mInitPromise; MozPromiseHolder mDrainPromise; MozPromiseHolder mReconfigurePromise; MozPromiseHolder mShutdownPromise; mutable Mutex mMutex{"RemoteMediaDataEncoder"}; nsCString mHardwareAcceleratedReason MOZ_GUARDED_BY(mMutex); nsCString mDescription MOZ_GUARDED_BY(mMutex); bool mIsHardwareAccelerated MOZ_GUARDED_BY(mMutex) = false; bool mNeedsShutdown MOZ_GUARDED_BY(mMutex) = false; }; } // namespace mozilla #endif // include_dom_media_ipc_RemoteMediaDataEncoder_h