Android-cuttlefish cvd tool
composition_manager.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#pragma once
17
18#include <stdint.h>
19
20#include <map>
21#include <string>
22#include <vector>
23
28
29namespace cuttlefish {
30class DisplayHandler;
31
33 public:
37 };
38
41
43 void OnFrame(uint32_t display_number, uint32_t frame_width,
44 uint32_t frame_height, uint32_t frame_fourcc_format,
45 uint32_t frame_stride_bytes, uint8_t* frame_pixels);
46
47 void ComposeFrame(int display_index,
48 std::shared_ptr<PlanarVideoFrameBuffer> buffer);
49
50 private:
51 explicit CompositionManager(
52 int cluster_index, std::string& group_uuid,
53 std::map<int, std::vector<DisplayOverlay>>& overlays);
54
56 public:
58 LastFrameInfo(uint32_t display_number, uint32_t frame_width,
59 uint32_t frame_height, uint32_t frame_fourcc_format,
60 uint32_t frame_stride_bytes, uint8_t* frame_pixels) {
61 display_number_ = display_number;
62 frame_width_ = frame_width;
63 frame_height_ = frame_height;
64 frame_fourcc_format_ = frame_fourcc_format;
65 frame_stride_bytes_ = frame_stride_bytes;
66 frame_pixels_ = frame_pixels;
67 }
69 uint32_t frame_width_;
70 uint32_t frame_height_;
73 uint8_t* frame_pixels_;
74 };
75 static std::map<int, std::vector<CompositionManager::DisplayOverlay>>
76 ParseOverlays(std::vector<std::string> overlay_items);
77 uint8_t* AlphaBlendLayers(uint8_t* frame_pixels, int display, int frame_width,
78 int frame_height);
79 void ComposeFrame(int display, int width, int height,
80 uint32_t frame_fourcc_format, uint32_t frame_stride_bytes,
81 std::shared_ptr<PlanarVideoFrameBuffer> buffer);
84 std::string group_uuid_;
85 std::map<int, std::vector<DisplayOverlay>> cfg_overlays_;
86 std::map<int, LastFrameInfo> last_frame_info_map_;
87 std::map<int, std::vector<uint8_t>> frame_work_buffer_;
88};
89
90} // namespace cuttlefish
Definition: composition_manager.h:55
uint32_t frame_fourcc_format_
Definition: composition_manager.h:71
uint32_t frame_stride_bytes_
Definition: composition_manager.h:72
uint8_t * frame_pixels_
Definition: composition_manager.h:73
uint32_t display_number_
Definition: composition_manager.h:68
LastFrameInfo(uint32_t display_number, uint32_t frame_width, uint32_t frame_height, uint32_t frame_fourcc_format, uint32_t frame_stride_bytes, uint8_t *frame_pixels)
Definition: composition_manager.h:58
uint32_t frame_width_
Definition: composition_manager.h:69
LastFrameInfo()
Definition: composition_manager.h:57
uint32_t frame_height_
Definition: composition_manager.h:70
Definition: composition_manager.h:32
std::map< int, std::vector< DisplayOverlay > > cfg_overlays_
Definition: composition_manager.h:85
void ComposeFrame(int display_index, std::shared_ptr< PlanarVideoFrameBuffer > buffer)
Definition: composition_manager.cpp:218
CompositionManager(int cluster_index, std::string &group_uuid, std::map< int, std::vector< DisplayOverlay > > &overlays)
Definition: composition_manager.cpp:116
uint8_t * AlphaBlendLayers(uint8_t *frame_pixels, int display, int frame_width, int frame_height)
Definition: composition_manager.cpp:231
std::string group_uuid_
Definition: composition_manager.h:84
int cluster_index_
Definition: composition_manager.h:83
void OnFrame(uint32_t display_number, uint32_t frame_width, uint32_t frame_height, uint32_t frame_fourcc_format, uint32_t frame_stride_bytes, uint8_t *frame_pixels)
Definition: composition_manager.cpp:191
std::map< int, std::vector< uint8_t > > frame_work_buffer_
Definition: composition_manager.h:87
static Result< std::unique_ptr< CompositionManager > > Create()
Definition: composition_manager.cpp:126
static std::map< int, std::vector< CompositionManager::DisplayOverlay > > ParseOverlays(std::vector< std::string > overlay_items)
Definition: composition_manager.cpp:73
std::map< int, LastFrameInfo > last_frame_info_map_
Definition: composition_manager.h:86
DisplayRingBufferManager display_ring_buffer_manager_
Definition: composition_manager.h:82
void OnDisplayCreated(const DisplayCreatedEvent &event)
Definition: composition_manager.cpp:181
~CompositionManager()
Definition: composition_manager.cpp:124
Definition: ring_buffer_manager.h:70
Event event
Definition: kernel_log_server.cc:59
Definition: alloc_driver.h:20
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30
Definition: wayland_server_callbacks.h:24
Definition: composition_manager.h:34
int src_display_index
Definition: composition_manager.h:36
int src_vm_index
Definition: composition_manager.h:35