/* * Copyright 2024 Google LLC * SPDX-License-Identifier: MIT */ #ifndef GFXSTREAM_CONNECTION_MANAGER_H #define GFXSTREAM_CONNECTION_MANAGER_H #include #include #include "GfxStreamConnection.h" #include "VirtGpu.h" #include "gfxstream/guest/IOStream.h" enum GfxStreamConnectionType { GFXSTREAM_CONNECTION_GLES = 1, GFXSTREAM_CONNECTION_GLES2 = 2, GFXSTREAM_CONNECTION_RENDER_CONTROL = 3, GFXSTREAM_CONNECTION_VULKAN = 4, }; enum GfxStreamTransportType { GFXSTREAM_TRANSPORT_QEMU_PIPE = 1, GFXSTREAM_TRANSPORT_ADDRESS_SPACE = 2, GFXSTREAM_TRANSPORT_VIRTIO_GPU_PIPE = 3, GFXSTREAM_TRANSPORT_VIRTIO_GPU_ADDRESS_SPACE = 4, }; class GfxStreamConnectionManager { public: GfxStreamConnectionManager(GfxStreamTransportType type, VirtGpuCapset capset); ~GfxStreamConnectionManager(); static GfxStreamConnectionManager* getThreadLocalInstance(GfxStreamTransportType type, VirtGpuCapset capset); void threadLocalExit(); bool initialize(); int32_t addConnection(GfxStreamConnectionType type, std::unique_ptr connection); void* getEncoder(GfxStreamConnectionType type); gfxstream::guest::IOStream* getStream(); gfxstream::guest::IOStream* processPipeStream(GfxStreamTransportType transportType); private: // intrusively refcounted gfxstream::guest::IOStream* mStream = nullptr; int32_t mDescriptor = -1; GfxStreamTransportType mTransportType; VirtGpuCapset mCapset; std::unordered_map> mConnections; }; #endif