2
* Copyright © 2014 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
19
#ifndef MIR_COMPOSITOR_COMPOSITING_SCREENCAST_H_
20
#define MIR_COMPOSITOR_COMPOSITING_SCREENCAST_H_
22
#include "mir/frontend/screencast.h"
24
#include <unordered_map>
29
namespace geometry { struct Rectangle; }
34
class GraphicBufferAllocator;
38
namespace detail { struct ScreencastSessionContext; }
40
class DisplayBufferCompositorFactory;
42
class CompositingScreencast : public frontend::Screencast
45
CompositingScreencast(
46
std::shared_ptr<graphics::Display> const& display,
47
std::shared_ptr<graphics::GraphicBufferAllocator> const& buffer_allocator,
48
std::shared_ptr<DisplayBufferCompositorFactory> const& db_compositor_factory);
50
frontend::ScreencastSessionId create_session(
51
graphics::DisplayConfigurationOutputId output_id);
52
void destroy_session(frontend::ScreencastSessionId id);
53
std::shared_ptr<graphics::Buffer> capture(frontend::ScreencastSessionId id);
56
frontend::ScreencastSessionId next_available_session_id();
57
std::pair<geometry::Rectangle,MirPixelFormat> output_info_for(
58
graphics::DisplayConfigurationOutputId output_id);
59
std::shared_ptr<detail::ScreencastSessionContext>
60
create_session_context(geometry::Rectangle const& rect, MirPixelFormat pixel_format);
62
std::mutex session_mutex;
63
std::shared_ptr<graphics::Display> const display;
64
std::shared_ptr<graphics::GraphicBufferAllocator> const buffer_allocator;
65
std::shared_ptr<DisplayBufferCompositorFactory> const db_compositor_factory;
67
std::unordered_map<frontend::ScreencastSessionId,
68
std::shared_ptr<detail::ScreencastSessionContext>> session_contexts;
74
#endif /* MIR_FRONTEND_SCREENCAST_H_ */