Android-cuttlefish cvd tool
display_handler.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020 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
17#pragma once
18
19#include <chrono>
20#include <memory>
21#include <mutex>
22#include <optional>
23#include <thread>
24
31
32namespace cuttlefish {
33class CompositionManager;
44 // must support move semantic
45 std::unique_ptr<CvdVideoFrameBuffer> buf_;
46 std::unique_ptr<WebRtcScProcessedFrame> Clone() {
47 // copy internal buffer, not move
48 CvdVideoFrameBuffer* new_buffer = new CvdVideoFrameBuffer(*(buf_.get()));
49 auto cloned_frame = std::make_unique<WebRtcScProcessedFrame>();
50 cloned_frame->buf_ = std::unique_ptr<CvdVideoFrameBuffer>(new_buffer);
51 return cloned_frame;
52 }
53};
54
55namespace webrtc_streaming {
56class Streamer;
57} // namespace webrtc_streaming
58
60 public:
65
68 ScreenshotHandler& screenshot_handler, ScreenConnector& screen_connector,
69 std::optional<std::unique_ptr<CompositionManager>> composition_manager);
71
72 [[noreturn]] void Loop();
73 // If std::nullopt, send last frame for all displays.
74 void SendLastFrame(std::optional<uint32_t> display_number);
75
76 void AddDisplayClient();
78
79 private:
80 struct BufferInfo {
81 std::chrono::system_clock::time_point last_sent_time_stamp;
82 std::shared_ptr<VideoFrameBuffer> buffer;
83 };
84 enum class RepeaterState {
85 RUNNING,
86 STOPPED,
87 };
89 void SendBuffers(std::map<uint32_t, std::shared_ptr<BufferInfo>> buffers);
91
92 std::optional<std::unique_ptr<CompositionManager>> composition_manager_;
93 std::map<uint32_t, std::shared_ptr<webrtc_streaming::VideoSink>>
98 std::map<uint32_t, std::shared_ptr<BufferInfo>> display_last_buffers_;
100 std::mutex send_mutex_;
101 std::thread frame_repeater_;
102 // Protected by repeater_state_mutex
104 // Protected by repeater_state_mutex
107 std::condition_variable repeater_state_condvar_;
108};
109} // namespace cuttlefish
Definition: cvd_video_frame_buffer.h:26
Definition: display_handler.h:59
void SendLastFrame(std::optional< uint32_t > display_number)
Definition: display_handler.cpp:155
std::mutex last_buffers_mutex_
Definition: display_handler.h:99
std::optional< std::unique_ptr< CompositionManager > > composition_manager_
Definition: display_handler.h:92
void SendBuffers(std::map< uint32_t, std::shared_ptr< BufferInfo > > buffers)
Definition: display_handler.cpp:187
std::condition_variable repeater_state_condvar_
Definition: display_handler.h:107
int num_active_clients_
Definition: display_handler.h:105
RepeaterState repeater_state_
Definition: display_handler.h:103
void RemoveDisplayClient()
Definition: display_handler.cpp:280
void AddDisplayClient()
Definition: display_handler.cpp:273
void RepeatFramesPeriodically()
Definition: display_handler.cpp:210
webrtc_streaming::Streamer & streamer_
Definition: display_handler.h:95
void Loop()
Definition: display_handler.cpp:133
RepeaterState
Definition: display_handler.h:84
DisplayHandler(webrtc_streaming::Streamer &streamer, ScreenshotHandler &screenshot_handler, ScreenConnector &screen_connector, std::optional< std::unique_ptr< CompositionManager > > composition_manager)
Definition: display_handler.cpp:31
GenerateProcessedFrameCallback GetScreenConnectorCallback()
Definition: display_handler.cpp:92
std::map< uint32_t, std::shared_ptr< webrtc_streaming::VideoSink > > display_sinks_
Definition: display_handler.h:94
~DisplayHandler()
Definition: display_handler.cpp:82
std::mutex repeater_state_mutex_
Definition: display_handler.h:106
std::map< uint32_t, std::shared_ptr< BufferInfo > > display_last_buffers_
Definition: display_handler.h:98
std::thread frame_repeater_
Definition: display_handler.h:101
ScreenConnector::GenerateProcessedFrameCallback GenerateProcessedFrameCallback
Definition: display_handler.h:63
ScreenConnector & screen_connector_
Definition: display_handler.h:97
ScreenshotHandler & screenshot_handler_
Definition: display_handler.h:96
std::mutex send_mutex_
Definition: display_handler.h:100
Definition: screen_connector.h:45
std::function< void(std::uint32_t, std::uint32_t, std::uint32_t, std::uint32_t, std::uint32_t, std::uint8_t *, ProcessedFrameType &msg)> GenerateProcessedFrameCallback
Definition: screen_connector.h:93
Definition: screenshot_handler.h:29
Definition: alloc_utils.cpp:23
Definition: display_handler.h:80
std::shared_ptr< VideoFrameBuffer > buffer
Definition: display_handler.h:82
std::chrono::system_clock::time_point last_sent_time_stamp
Definition: display_handler.h:81
Definition: screen_connector_common.h:63
Definition: display_handler.h:43
std::unique_ptr< WebRtcScProcessedFrame > Clone()
Definition: display_handler.h:46
std::unique_ptr< CvdVideoFrameBuffer > buf_
Definition: display_handler.h:45