RemoteMediaDataEncoderParent.h (2276B)
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_RemoteMediaDataEncoderParent_h 7 #define include_dom_media_ipc_RemoteMediaDataEncoderParent_h 8 9 #include <map> 10 11 #include "PlatformEncoderModule.h" 12 #include "mozilla/PRemoteEncoderParent.h" 13 #include "mozilla/ShmemRecycleAllocator.h" 14 15 namespace mozilla { 16 namespace layers { 17 class BufferRecycleBin; 18 } 19 20 class RemoteMediaManagerParent; 21 using mozilla::ipc::IPCResult; 22 23 class RemoteMediaDataEncoderParent final 24 : public ShmemRecycleAllocator<RemoteMediaDataEncoderParent>, 25 public PRemoteEncoderParent { 26 friend class PRemoteEncoderParent; 27 28 public: 29 // We refcount this class since the task queue can have runnables 30 // that reference us. 31 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(RemoteMediaDataEncoderParent, final) 32 33 explicit RemoteMediaDataEncoderParent(const EncoderConfig& aConfig); 34 35 // PRemoteEncoderParent 36 IPCResult RecvConstruct(ConstructResolver&& aResolver); 37 IPCResult RecvInit(InitResolver&& aResolver); 38 IPCResult RecvEncode(const EncodedInputIPDL& aData, 39 EncodeResolver&& aResolver); 40 IPCResult RecvReconfigure( 41 EncoderConfigurationChangeList* aConfigurationChanges, 42 ReconfigureResolver&& aResolver); 43 IPCResult RecvDrain(DrainResolver&& aResolver); 44 IPCResult RecvReleaseTicket(const uint32_t& aTicketId); 45 IPCResult RecvShutdown(ShutdownResolver&& aResolver); 46 IPCResult RecvSetBitrate(const uint32_t& aBitrate, 47 SetBitrateResolver&& aResolver); 48 49 void ActorDestroy(ActorDestroyReason aWhy) override; 50 51 protected: 52 virtual ~RemoteMediaDataEncoderParent(); 53 54 RefPtr<MediaDataEncoder> mEncoder; 55 RefPtr<layers::BufferRecycleBin> mBufferRecycleBin; 56 const EncoderConfig mConfig; 57 58 std::map<uint32_t, RefPtr<ShmemRecycleTicket>> mTickets; 59 uint32_t mTicketCounter = 0; 60 61 private: 62 const RefPtr<nsISerialEventTarget> mManagerThread; 63 }; 64 65 } // namespace mozilla 66 67 #endif // include_dom_media_ipc_RemoteMediaDataEncoderParent_h