blob: 98fbbb5e350829bdeffc9b06e9d192de4a575e82 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file was automatically generated with:
// ../../ui/gfx/x/gen_xproto.py \
// ../../third_party/xcbproto/src \
// gen/ui/gfx/x \
// bigreq \
// composite \
// damage \
// dpms \
// dri2 \
// dri3 \
// ge \
// glx \
// present \
// randr \
// record \
// render \
// res \
// screensaver \
// shape \
// shm \
// sync \
// xc_misc \
// xevie \
// xf86dri \
// xf86vidmode \
// xfixes \
// xinerama \
// xinput \
// xkb \
// xprint \
// xproto \
// xselinux \
// xtest \
// xv \
// xvmc
#include "xvmc.h"
#include <xcb/xcb.h>
#include <xcb/xcbext.h>
#include "base/logging.h"
#include "base/posix/eintr_wrapper.h"
#include "ui/gfx/x/xproto_internal.h"
namespace x11 {
XvMC::XvMC(Connection* connection, const x11::QueryExtensionReply& info)
: connection_(connection), info_(info) {}
Future<XvMC::QueryVersionReply> XvMC::QueryVersion(
const XvMC::QueryVersionRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 0;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<XvMC::QueryVersionReply>(
&buf, "XvMC::QueryVersion", false);
}
Future<XvMC::QueryVersionReply> XvMC::QueryVersion() {
return XvMC::QueryVersion(XvMC::QueryVersionRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<XvMC::QueryVersionReply> detail::ReadReply<
XvMC::QueryVersionReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<XvMC::QueryVersionReply>();
auto& sequence = (*reply).sequence;
auto& major = (*reply).major;
auto& minor = (*reply).minor;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// major
Read(&major, &buf);
// minor
Read(&minor, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<XvMC::ListSurfaceTypesReply> XvMC::ListSurfaceTypes(
const XvMC::ListSurfaceTypesRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& port_id = request.port_id;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 1;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// port_id
buf.Write(&port_id);
Align(&buf, 4);
return connection_->SendRequest<XvMC::ListSurfaceTypesReply>(
&buf, "XvMC::ListSurfaceTypes", false);
}
Future<XvMC::ListSurfaceTypesReply> XvMC::ListSurfaceTypes(
const Xv::Port& port_id) {
return XvMC::ListSurfaceTypes(XvMC::ListSurfaceTypesRequest{port_id});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<XvMC::ListSurfaceTypesReply> detail::ReadReply<
XvMC::ListSurfaceTypesReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<XvMC::ListSurfaceTypesReply>();
auto& sequence = (*reply).sequence;
uint32_t num{};
auto& surfaces = (*reply).surfaces;
size_t surfaces_len = surfaces.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// num
Read(&num, &buf);
// pad1
Pad(&buf, 20);
// surfaces
surfaces.resize(num);
for (auto& surfaces_elem : surfaces) {
// surfaces_elem
{
auto& id = surfaces_elem.id;
auto& chroma_format = surfaces_elem.chroma_format;
auto& pad0 = surfaces_elem.pad0;
auto& max_width = surfaces_elem.max_width;
auto& max_height = surfaces_elem.max_height;
auto& subpicture_max_width = surfaces_elem.subpicture_max_width;
auto& subpicture_max_height = surfaces_elem.subpicture_max_height;
auto& mc_type = surfaces_elem.mc_type;
auto& flags = surfaces_elem.flags;
// id
Read(&id, &buf);
// chroma_format
Read(&chroma_format, &buf);
// pad0
Read(&pad0, &buf);
// max_width
Read(&max_width, &buf);
// max_height
Read(&max_height, &buf);
// subpicture_max_width
Read(&subpicture_max_width, &buf);
// subpicture_max_height
Read(&subpicture_max_height, &buf);
// mc_type
Read(&mc_type, &buf);
// flags
Read(&flags, &buf);
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<XvMC::CreateContextReply> XvMC::CreateContext(
const XvMC::CreateContextRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& context_id = request.context_id;
auto& port_id = request.port_id;
auto& surface_id = request.surface_id;
auto& width = request.width;
auto& height = request.height;
auto& flags = request.flags;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 2;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// context_id
buf.Write(&context_id);
// port_id
buf.Write(&port_id);
// surface_id
buf.Write(&surface_id);
// width
buf.Write(&width);
// height
buf.Write(&height);
// flags
buf.Write(&flags);
Align(&buf, 4);
return connection_->SendRequest<XvMC::CreateContextReply>(
&buf, "XvMC::CreateContext", false);
}
Future<XvMC::CreateContextReply> XvMC::CreateContext(const Context& context_id,
const Xv::Port& port_id,
const Surface& surface_id,
const uint16_t& width,
const uint16_t& height,
const uint32_t& flags) {
return XvMC::CreateContext(XvMC::CreateContextRequest{
context_id, port_id, surface_id, width, height, flags});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<XvMC::CreateContextReply> detail::ReadReply<
XvMC::CreateContextReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<XvMC::CreateContextReply>();
auto& sequence = (*reply).sequence;
auto& width_actual = (*reply).width_actual;
auto& height_actual = (*reply).height_actual;
auto& flags_return = (*reply).flags_return;
auto& priv_data = (*reply).priv_data;
size_t priv_data_len = priv_data.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// width_actual
Read(&width_actual, &buf);
// height_actual
Read(&height_actual, &buf);
// flags_return
Read(&flags_return, &buf);
// pad1
Pad(&buf, 20);
// priv_data
priv_data.resize(length);
for (auto& priv_data_elem : priv_data) {
// priv_data_elem
Read(&priv_data_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XvMC::DestroyContext(const XvMC::DestroyContextRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& context_id = request.context_id;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 3;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// context_id
buf.Write(&context_id);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "XvMC::DestroyContext", false);
}
Future<void> XvMC::DestroyContext(const Context& context_id) {
return XvMC::DestroyContext(XvMC::DestroyContextRequest{context_id});
}
Future<XvMC::CreateSurfaceReply> XvMC::CreateSurface(
const XvMC::CreateSurfaceRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& surface_id = request.surface_id;
auto& context_id = request.context_id;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 4;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// surface_id
buf.Write(&surface_id);
// context_id
buf.Write(&context_id);
Align(&buf, 4);
return connection_->SendRequest<XvMC::CreateSurfaceReply>(
&buf, "XvMC::CreateSurface", false);
}
Future<XvMC::CreateSurfaceReply> XvMC::CreateSurface(
const Surface& surface_id,
const Context& context_id) {
return XvMC::CreateSurface(
XvMC::CreateSurfaceRequest{surface_id, context_id});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<XvMC::CreateSurfaceReply> detail::ReadReply<
XvMC::CreateSurfaceReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<XvMC::CreateSurfaceReply>();
auto& sequence = (*reply).sequence;
auto& priv_data = (*reply).priv_data;
size_t priv_data_len = priv_data.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pad1
Pad(&buf, 24);
// priv_data
priv_data.resize(length);
for (auto& priv_data_elem : priv_data) {
// priv_data_elem
Read(&priv_data_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XvMC::DestroySurface(const XvMC::DestroySurfaceRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& surface_id = request.surface_id;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 5;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// surface_id
buf.Write(&surface_id);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "XvMC::DestroySurface", false);
}
Future<void> XvMC::DestroySurface(const Surface& surface_id) {
return XvMC::DestroySurface(XvMC::DestroySurfaceRequest{surface_id});
}
Future<XvMC::CreateSubpictureReply> XvMC::CreateSubpicture(
const XvMC::CreateSubpictureRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& subpicture_id = request.subpicture_id;
auto& context = request.context;
auto& xvimage_id = request.xvimage_id;
auto& width = request.width;
auto& height = request.height;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 6;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// subpicture_id
buf.Write(&subpicture_id);
// context
buf.Write(&context);
// xvimage_id
buf.Write(&xvimage_id);
// width
buf.Write(&width);
// height
buf.Write(&height);
Align(&buf, 4);
return connection_->SendRequest<XvMC::CreateSubpictureReply>(
&buf, "XvMC::CreateSubpicture", false);
}
Future<XvMC::CreateSubpictureReply> XvMC::CreateSubpicture(
const SubPicture& subpicture_id,
const Context& context,
const uint32_t& xvimage_id,
const uint16_t& width,
const uint16_t& height) {
return XvMC::CreateSubpicture(XvMC::CreateSubpictureRequest{
subpicture_id, context, xvimage_id, width, height});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<XvMC::CreateSubpictureReply> detail::ReadReply<
XvMC::CreateSubpictureReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<XvMC::CreateSubpictureReply>();
auto& sequence = (*reply).sequence;
auto& width_actual = (*reply).width_actual;
auto& height_actual = (*reply).height_actual;
auto& num_palette_entries = (*reply).num_palette_entries;
auto& entry_bytes = (*reply).entry_bytes;
auto& component_order = (*reply).component_order;
size_t component_order_len = component_order.size();
auto& priv_data = (*reply).priv_data;
size_t priv_data_len = priv_data.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// width_actual
Read(&width_actual, &buf);
// height_actual
Read(&height_actual, &buf);
// num_palette_entries
Read(&num_palette_entries, &buf);
// entry_bytes
Read(&entry_bytes, &buf);
// component_order
for (auto& component_order_elem : component_order) {
// component_order_elem
Read(&component_order_elem, &buf);
}
// pad1
Pad(&buf, 12);
// priv_data
priv_data.resize(length);
for (auto& priv_data_elem : priv_data) {
// priv_data_elem
Read(&priv_data_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XvMC::DestroySubpicture(
const XvMC::DestroySubpictureRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& subpicture_id = request.subpicture_id;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 7;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// subpicture_id
buf.Write(&subpicture_id);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "XvMC::DestroySubpicture", false);
}
Future<void> XvMC::DestroySubpicture(const SubPicture& subpicture_id) {
return XvMC::DestroySubpicture(XvMC::DestroySubpictureRequest{subpicture_id});
}
Future<XvMC::ListSubpictureTypesReply> XvMC::ListSubpictureTypes(
const XvMC::ListSubpictureTypesRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& port_id = request.port_id;
auto& surface_id = request.surface_id;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 8;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// port_id
buf.Write(&port_id);
// surface_id
buf.Write(&surface_id);
Align(&buf, 4);
return connection_->SendRequest<XvMC::ListSubpictureTypesReply>(
&buf, "XvMC::ListSubpictureTypes", false);
}
Future<XvMC::ListSubpictureTypesReply> XvMC::ListSubpictureTypes(
const Xv::Port& port_id,
const Surface& surface_id) {
return XvMC::ListSubpictureTypes(
XvMC::ListSubpictureTypesRequest{port_id, surface_id});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<XvMC::ListSubpictureTypesReply> detail::ReadReply<
XvMC::ListSubpictureTypesReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<XvMC::ListSubpictureTypesReply>();
auto& sequence = (*reply).sequence;
uint32_t num{};
auto& types = (*reply).types;
size_t types_len = types.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// num
Read(&num, &buf);
// pad1
Pad(&buf, 20);
// types
types.resize(num);
for (auto& types_elem : types) {
// types_elem
{
auto& id = types_elem.id;
auto& type = types_elem.type;
auto& byte_order = types_elem.byte_order;
auto& guid = types_elem.guid;
size_t guid_len = guid.size();
auto& bpp = types_elem.bpp;
auto& num_planes = types_elem.num_planes;
auto& depth = types_elem.depth;
auto& red_mask = types_elem.red_mask;
auto& green_mask = types_elem.green_mask;
auto& blue_mask = types_elem.blue_mask;
auto& format = types_elem.format;
auto& y_sample_bits = types_elem.y_sample_bits;
auto& u_sample_bits = types_elem.u_sample_bits;
auto& v_sample_bits = types_elem.v_sample_bits;
auto& vhorz_y_period = types_elem.vhorz_y_period;
auto& vhorz_u_period = types_elem.vhorz_u_period;
auto& vhorz_v_period = types_elem.vhorz_v_period;
auto& vvert_y_period = types_elem.vvert_y_period;
auto& vvert_u_period = types_elem.vvert_u_period;
auto& vvert_v_period = types_elem.vvert_v_period;
auto& vcomp_order = types_elem.vcomp_order;
size_t vcomp_order_len = vcomp_order.size();
auto& vscanline_order = types_elem.vscanline_order;
// id
Read(&id, &buf);
// type
uint8_t tmp0;
Read(&tmp0, &buf);
type = static_cast<Xv::ImageFormatInfoType>(tmp0);
// byte_order
uint8_t tmp1;
Read(&tmp1, &buf);
byte_order = static_cast<ImageOrder>(tmp1);
// pad0
Pad(&buf, 2);
// guid
for (auto& guid_elem : guid) {
// guid_elem
Read(&guid_elem, &buf);
}
// bpp
Read(&bpp, &buf);
// num_planes
Read(&num_planes, &buf);
// pad1
Pad(&buf, 2);
// depth
Read(&depth, &buf);
// pad2
Pad(&buf, 3);
// red_mask
Read(&red_mask, &buf);
// green_mask
Read(&green_mask, &buf);
// blue_mask
Read(&blue_mask, &buf);
// format
uint8_t tmp2;
Read(&tmp2, &buf);
format = static_cast<Xv::ImageFormatInfoFormat>(tmp2);
// pad3
Pad(&buf, 3);
// y_sample_bits
Read(&y_sample_bits, &buf);
// u_sample_bits
Read(&u_sample_bits, &buf);
// v_sample_bits
Read(&v_sample_bits, &buf);
// vhorz_y_period
Read(&vhorz_y_period, &buf);
// vhorz_u_period
Read(&vhorz_u_period, &buf);
// vhorz_v_period
Read(&vhorz_v_period, &buf);
// vvert_y_period
Read(&vvert_y_period, &buf);
// vvert_u_period
Read(&vvert_u_period, &buf);
// vvert_v_period
Read(&vvert_v_period, &buf);
// vcomp_order
for (auto& vcomp_order_elem : vcomp_order) {
// vcomp_order_elem
Read(&vcomp_order_elem, &buf);
}
// vscanline_order
uint8_t tmp3;
Read(&tmp3, &buf);
vscanline_order = static_cast<Xv::ScanlineOrder>(tmp3);
// pad4
Pad(&buf, 11);
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
} // namespace x11