| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_GPU_IPC_SERVICE_MEDIA_GPU_CHANNEL_MANAGER_H_ |
| #define MEDIA_GPU_IPC_SERVICE_MEDIA_GPU_CHANNEL_MANAGER_H_ |
| |
| #include <stdint.h> |
| |
| #include <memory> |
| #include <unordered_map> |
| |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/unguessable_token.h" |
| #include "ipc/ipc_listener.h" |
| #include "ipc/ipc_sender.h" |
| #include "media/base/android_overlay_mojo_factory.h" |
| #include "media/video/video_decode_accelerator.h" |
| |
| namespace gpu { |
| class GpuChannel; |
| class GpuChannelManager; |
| } |
| |
| namespace media { |
| |
| class MediaGpuChannel; |
| |
| class MediaGpuChannelManager |
| : public base::SupportsWeakPtr<MediaGpuChannelManager> { |
| public: |
| explicit MediaGpuChannelManager(gpu::GpuChannelManager* channel_manager); |
| MediaGpuChannelManager(const MediaGpuChannelManager&) = delete; |
| MediaGpuChannelManager& operator=(const MediaGpuChannelManager&) = delete; |
| ~MediaGpuChannelManager(); |
| |
| void AddChannel(int32_t client_id, |
| const base::UnguessableToken& channel_token); |
| void RemoveChannel(int32_t client_id); |
| void DestroyAllChannels(); |
| |
| void SetOverlayFactory(AndroidOverlayMojoFactoryCB overlay_factory_cb); |
| AndroidOverlayMojoFactoryCB GetOverlayFactory(); |
| |
| // TODO(sandersd): Should we expose the MediaGpuChannel instead? |
| gpu::GpuChannel* LookupChannel(const base::UnguessableToken& channel_token); |
| |
| private: |
| gpu::GpuChannelManager* const channel_manager_; |
| std::unordered_map<int32_t, std::unique_ptr<MediaGpuChannel>> |
| media_gpu_channels_; |
| std::map<base::UnguessableToken, int32_t> token_to_channel_; |
| std::map<int32_t, base::UnguessableToken> channel_to_token_; |
| AndroidOverlayMojoFactoryCB overlay_factory_cb_; |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_GPU_IPC_SERVICE_MEDIA_GPU_CHANNEL_MANAGER_H_ |