426
426
for (auto i = 0; i < request->buffer_requests().size(); i++)
428
428
auto const& req = request->buffer_requests(i);
429
mg::BufferProperties properties(
430
geom::Size{req.width(), req.height()},
431
static_cast<MirPixelFormat>(req.pixel_format()),
432
static_cast<mg::BufferUsage>(req.buffer_usage()));
434
auto id = session->create_buffer(properties);
431
if (req.has_flags() && req.has_native_format())
433
auto session_ext = std::dynamic_pointer_cast<SessionExtensions>(session);
434
id = session_ext->create_buffer({req.width(), req.height()}, req.native_format(), req.flags());
436
else if (req.has_buffer_usage() && req.has_pixel_format())
438
auto const usage = static_cast<mg::BufferUsage>(req.buffer_usage());
439
geom::Size const size{req.width(), req.height()};
440
auto const pf = static_cast<MirPixelFormat>(req.pixel_format());
441
if (usage == mg::BufferUsage::software)
443
auto session_ext = std::dynamic_pointer_cast<SessionExtensions>(session);
444
id = session_ext->create_buffer(size, pf);
448
//legacy route, server-selected pf and usage
449
id = session->create_buffer(mg::BufferProperties{size, pf, mg::BufferUsage::hardware});
454
BOOST_THROW_EXCEPTION(std::logic_error("Invalid buffer request"));
435
457
if (request->has_id())
437
459
auto stream = session->get_buffer_stream(mf::BufferStreamId(request->id().value()));
811
833
protobuf_screencast->mutable_screencast_id()->set_value(
812
834
screencast_session_id.as_value());
835
protobuf_screencast->mutable_buffer_stream()->set_pixel_format(pixel_format);
813
836
protobuf_screencast->mutable_buffer_stream()->mutable_id()->set_value(
814
837
screencast_session_id.as_value());