blob: e33bedb79d0512a16b2ab86f60a1f79f686f5fad [file] [log] [blame]
// Copyright 2021 The Fuchsia 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 SRC_UI_SCENIC_LIB_SCREEN_CAPTURE_SCREEN_CAPTURE_MANAGER_H_
#define SRC_UI_SCENIC_LIB_SCREEN_CAPTURE_SCREEN_CAPTURE_MANAGER_H_
#include <fuchsia/ui/composition/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <unordered_map>
#include "screen_capture.h"
#include "screen_capture_buffer_collection_importer.h"
#include "src/ui/scenic/lib/allocation/buffer_collection_importer.h"
#include "src/ui/scenic/lib/flatland/engine/engine.h"
#include "src/ui/scenic/lib/flatland/renderer/vk_renderer.h"
namespace screen_capture {
using ClientId = uint64_t;
class ScreenCaptureManager {
public:
ScreenCaptureManager(std::shared_ptr<flatland::Engine> engine,
std::shared_ptr<flatland::VkRenderer> renderer,
std::shared_ptr<flatland::FlatlandManager> flatland_manager,
std::vector<std::shared_ptr<allocation::BufferCollectionImporter>>
buffer_collection_importers);
void CreateClient(fidl::InterfaceRequest<fuchsia::ui::composition::ScreenCapture> screen_capture);
private:
// We need these for rendering the scene into the client supplied buffer.
std::shared_ptr<flatland::Engine> engine_;
std::shared_ptr<flatland::VkRenderer> renderer_;
std::shared_ptr<flatland::FlatlandManager> flatland_manager_;
std::vector<std::shared_ptr<allocation::BufferCollectionImporter>> buffer_collection_importers_;
ClientId next_client_id_ = 1;
std::unordered_map<ClientId, std::unique_ptr<ScreenCapture>> screen_capture_clients_;
};
} // namespace screen_capture
#endif // SRC_UI_SCENIC_LIB_SCREEN_CAPTURE_SCREEN_CAPTURE_MANAGER_H_