blob: 586cd1612d6d4d8dae53ff98f76f1a1fa6a6f79f [file] [log] [blame]
// media/capture/mojom/video_capture_types.mojom.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_TYPES_MOJOM_H_
#define MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_TYPES_MOJOM_H_
#include <stdint.h>
#include <limits>
#include <optional>
#include <type_traits>
#include <utility>
#include "base/types/cxx23_to_underlying.h"
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "media/capture/mojom/video_capture_types.mojom-features.h"
#include "media/capture/mojom/video_capture_types.mojom-shared.h"
#include "media/capture/mojom/video_capture_types.mojom-forward.h"
#include "ui/gfx/geometry/mojom/geometry.mojom.h"
#include <string>
#include <vector>
#include "media/capture/mojom/video_capture_types_mojom_traits.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace media::mojom {
// @generated_from: media.mojom.VideoCaptureControlSupport
class VideoCaptureControlSupport {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VideoCaptureControlSupport, T>::value>;
using DataView = VideoCaptureControlSupportDataView;
using Data_ = internal::VideoCaptureControlSupport_Data;
template <typename... Args>
static VideoCaptureControlSupportPtr New(Args&&... args) {
return VideoCaptureControlSupportPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VideoCaptureControlSupportPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureControlSupportPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureControlSupport>::Convert(*this);
}
VideoCaptureControlSupport();
VideoCaptureControlSupport(
bool pan,
bool tilt,
bool zoom);
~VideoCaptureControlSupport();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VideoCaptureControlSupportPtr>
VideoCaptureControlSupportPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VideoCaptureControlSupport::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureControlSupport::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VideoCaptureControlSupport_UnserializedMessageContext<
UserType, VideoCaptureControlSupport::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VideoCaptureControlSupport::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VideoCaptureControlSupport::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VideoCaptureControlSupport_UnserializedMessageContext<
UserType, VideoCaptureControlSupport::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VideoCaptureControlSupport::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.VideoCaptureControlSupport.pan
bool pan;
// @generated_from: media.mojom.VideoCaptureControlSupport.tilt
bool tilt;
// @generated_from: media.mojom.VideoCaptureControlSupport.zoom
bool zoom;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media.mojom.VideoCaptureFormat
class VideoCaptureFormat {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VideoCaptureFormat, T>::value>;
using DataView = VideoCaptureFormatDataView;
using Data_ = internal::VideoCaptureFormat_Data;
template <typename... Args>
static VideoCaptureFormatPtr New(Args&&... args) {
return VideoCaptureFormatPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VideoCaptureFormatPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureFormatPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureFormat>::Convert(*this);
}
VideoCaptureFormat();
VideoCaptureFormat(
const ::gfx::Size& frame_size,
float frame_rate,
::media::VideoPixelFormat pixel_format);
~VideoCaptureFormat();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VideoCaptureFormatPtr>
VideoCaptureFormatPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VideoCaptureFormat::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureFormat::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VideoCaptureFormat_UnserializedMessageContext<
UserType, VideoCaptureFormat::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VideoCaptureFormat::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VideoCaptureFormat::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VideoCaptureFormat_UnserializedMessageContext<
UserType, VideoCaptureFormat::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VideoCaptureFormat::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.VideoCaptureFormat.frame_size
::gfx::Size frame_size;
// @generated_from: media.mojom.VideoCaptureFormat.frame_rate
float frame_rate;
// @generated_from: media.mojom.VideoCaptureFormat.pixel_format
::media::VideoPixelFormat pixel_format;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VideoCaptureFormat::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media.mojom.VideoCaptureParams
class VideoCaptureParams {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VideoCaptureParams, T>::value>;
using DataView = VideoCaptureParamsDataView;
using Data_ = internal::VideoCaptureParams_Data;
template <typename... Args>
static VideoCaptureParamsPtr New(Args&&... args) {
return VideoCaptureParamsPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VideoCaptureParamsPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureParamsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureParams>::Convert(*this);
}
VideoCaptureParams();
VideoCaptureParams(
const ::media::VideoCaptureFormat& requested_format,
::media::VideoCaptureBufferType buffer_type,
::media::ResolutionChangePolicy resolution_change_policy,
::media::PowerLineFrequency power_line_frequency,
bool enable_face_detection);
VideoCaptureParams(
const ::media::VideoCaptureFormat& requested_format,
::media::VideoCaptureBufferType buffer_type,
::media::ResolutionChangePolicy resolution_change_policy,
::media::PowerLineFrequency power_line_frequency,
bool enable_face_detection,
bool is_high_dpi_enabled);
~VideoCaptureParams();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VideoCaptureParamsPtr>
VideoCaptureParamsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VideoCaptureParams::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureParams::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VideoCaptureParams_UnserializedMessageContext<
UserType, VideoCaptureParams::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VideoCaptureParams::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VideoCaptureParams::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VideoCaptureParams_UnserializedMessageContext<
UserType, VideoCaptureParams::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VideoCaptureParams::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.VideoCaptureParams.requested_format
::media::VideoCaptureFormat requested_format;
// @generated_from: media.mojom.VideoCaptureParams.buffer_type
::media::VideoCaptureBufferType buffer_type;
// @generated_from: media.mojom.VideoCaptureParams.resolution_change_policy
::media::ResolutionChangePolicy resolution_change_policy;
// @generated_from: media.mojom.VideoCaptureParams.power_line_frequency
::media::PowerLineFrequency power_line_frequency;
// @generated_from: media.mojom.VideoCaptureParams.enable_face_detection
bool enable_face_detection;
// @generated_from: media.mojom.VideoCaptureParams.is_high_dpi_enabled
bool is_high_dpi_enabled;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VideoCaptureParams::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media.mojom.VideoCaptureFeedback
class VideoCaptureFeedback {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VideoCaptureFeedback, T>::value>;
using DataView = VideoCaptureFeedbackDataView;
using Data_ = internal::VideoCaptureFeedback_Data;
template <typename... Args>
static VideoCaptureFeedbackPtr New(Args&&... args) {
return VideoCaptureFeedbackPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VideoCaptureFeedbackPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureFeedbackPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureFeedback>::Convert(*this);
}
VideoCaptureFeedback();
VideoCaptureFeedback(
double resource_utilization,
float max_framerate_fps,
int32_t max_pixels,
bool require_mapped_frame);
VideoCaptureFeedback(
double resource_utilization,
float max_framerate_fps,
int32_t max_pixels,
bool require_mapped_frame,
std::optional<std::vector<::gfx::Size>> DEPRECATED_mapped_sizes);
VideoCaptureFeedback(
double resource_utilization,
float max_framerate_fps,
int32_t max_pixels,
bool require_mapped_frame,
std::optional<std::vector<::gfx::Size>> DEPRECATED_mapped_sizes,
int32_t frame_id,
bool has_frame_id);
~VideoCaptureFeedback();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VideoCaptureFeedbackPtr>
VideoCaptureFeedbackPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VideoCaptureFeedback::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureFeedback::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VideoCaptureFeedback_UnserializedMessageContext<
UserType, VideoCaptureFeedback::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VideoCaptureFeedback::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VideoCaptureFeedback::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VideoCaptureFeedback_UnserializedMessageContext<
UserType, VideoCaptureFeedback::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VideoCaptureFeedback::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.VideoCaptureFeedback.resource_utilization
double resource_utilization;
// @generated_from: media.mojom.VideoCaptureFeedback.max_framerate_fps
float max_framerate_fps;
// @generated_from: media.mojom.VideoCaptureFeedback.max_pixels
int32_t max_pixels;
// @generated_from: media.mojom.VideoCaptureFeedback.require_mapped_frame
bool require_mapped_frame;
// @generated_from: media.mojom.VideoCaptureFeedback.DEPRECATED_mapped_sizes
std::optional<std::vector<::gfx::Size>> DEPRECATED_mapped_sizes;
// @generated_from: media.mojom.VideoCaptureFeedback.frame_id
int32_t frame_id;
// @generated_from: media.mojom.VideoCaptureFeedback.has_frame_id
bool has_frame_id;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VideoCaptureFeedback::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media.mojom.PlaneStrides
class PlaneStrides {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<PlaneStrides, T>::value>;
using DataView = PlaneStridesDataView;
using Data_ = internal::PlaneStrides_Data;
template <typename... Args>
static PlaneStridesPtr New(Args&&... args) {
return PlaneStridesPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static PlaneStridesPtr From(const U& u) {
return mojo::TypeConverter<PlaneStridesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, PlaneStrides>::Convert(*this);
}
PlaneStrides();
explicit PlaneStrides(
std::vector<uint32_t> stride_by_plane);
~PlaneStrides();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = PlaneStridesPtr>
PlaneStridesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
PlaneStrides::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
PlaneStrides::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::PlaneStrides_UnserializedMessageContext<
UserType, PlaneStrides::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<PlaneStrides::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return PlaneStrides::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::PlaneStrides_UnserializedMessageContext<
UserType, PlaneStrides::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<PlaneStrides::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.PlaneStrides.stride_by_plane
std::vector<uint32_t> stride_by_plane;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, PlaneStrides::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor
class VideoCaptureDeviceDescriptor {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VideoCaptureDeviceDescriptor, T>::value>;
using DataView = VideoCaptureDeviceDescriptorDataView;
using Data_ = internal::VideoCaptureDeviceDescriptor_Data;
template <typename... Args>
static VideoCaptureDeviceDescriptorPtr New(Args&&... args) {
return VideoCaptureDeviceDescriptorPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VideoCaptureDeviceDescriptorPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureDeviceDescriptorPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureDeviceDescriptor>::Convert(*this);
}
VideoCaptureDeviceDescriptor();
VideoCaptureDeviceDescriptor(
const std::string& display_name,
const std::string& device_id,
const std::string& model_id,
::media::VideoFacingMode facing_mode,
VideoCaptureApi capture_api,
const ::media::VideoCaptureControlSupport& control_support,
VideoCaptureTransportType transport_type);
VideoCaptureDeviceDescriptor(
const std::string& display_name,
const std::string& device_id,
const std::string& model_id,
::media::VideoFacingMode facing_mode,
VideoCaptureApi capture_api,
const ::media::VideoCaptureControlSupport& control_support,
VideoCaptureTransportType transport_type,
std::optional<CameraAvailability> availability);
~VideoCaptureDeviceDescriptor();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VideoCaptureDeviceDescriptorPtr>
VideoCaptureDeviceDescriptorPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VideoCaptureDeviceDescriptor::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureDeviceDescriptor::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VideoCaptureDeviceDescriptor_UnserializedMessageContext<
UserType, VideoCaptureDeviceDescriptor::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VideoCaptureDeviceDescriptor::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VideoCaptureDeviceDescriptor::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VideoCaptureDeviceDescriptor_UnserializedMessageContext<
UserType, VideoCaptureDeviceDescriptor::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VideoCaptureDeviceDescriptor::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.display_name
std::string display_name;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.device_id
std::string device_id;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.model_id
std::string model_id;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.facing_mode
::media::VideoFacingMode facing_mode;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.capture_api
VideoCaptureApi capture_api;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.control_support
::media::VideoCaptureControlSupport control_support;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.transport_type
VideoCaptureTransportType transport_type;
// @generated_from: media.mojom.VideoCaptureDeviceDescriptor.availability
std::optional<CameraAvailability> availability;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media.mojom.VideoCaptureDeviceInfo
class VideoCaptureDeviceInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VideoCaptureDeviceInfo, T>::value>;
using DataView = VideoCaptureDeviceInfoDataView;
using Data_ = internal::VideoCaptureDeviceInfo_Data;
template <typename... Args>
static VideoCaptureDeviceInfoPtr New(Args&&... args) {
return VideoCaptureDeviceInfoPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VideoCaptureDeviceInfoPtr From(const U& u) {
return mojo::TypeConverter<VideoCaptureDeviceInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VideoCaptureDeviceInfo>::Convert(*this);
}
VideoCaptureDeviceInfo();
VideoCaptureDeviceInfo(
const ::media::VideoCaptureDeviceDescriptor& descriptor,
std::vector<::media::VideoCaptureFormat> supported_formats);
~VideoCaptureDeviceInfo();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VideoCaptureDeviceInfoPtr>
VideoCaptureDeviceInfoPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VideoCaptureDeviceInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VideoCaptureDeviceInfo::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VideoCaptureDeviceInfo_UnserializedMessageContext<
UserType, VideoCaptureDeviceInfo::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VideoCaptureDeviceInfo::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VideoCaptureDeviceInfo::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VideoCaptureDeviceInfo_UnserializedMessageContext<
UserType, VideoCaptureDeviceInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VideoCaptureDeviceInfo::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media.mojom.VideoCaptureDeviceInfo.descriptor
::media::VideoCaptureDeviceDescriptor descriptor;
// @generated_from: media.mojom.VideoCaptureDeviceInfo.supported_formats
std::vector<::media::VideoCaptureFormat> supported_formats;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
VideoCaptureControlSupportPtr VideoCaptureControlSupport::Clone() const {
return New(
mojo::Clone(pan),
mojo::Clone(tilt),
mojo::Clone(zoom)
);
}
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>*>
bool VideoCaptureControlSupport::Equals(const T& other_struct) const {
if (!mojo::Equals(this->pan, other_struct.pan))
return false;
if (!mojo::Equals(this->tilt, other_struct.tilt))
return false;
if (!mojo::Equals(this->zoom, other_struct.zoom))
return false;
return true;
}
template <typename T, VideoCaptureControlSupport::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.pan < rhs.pan)
return true;
if (rhs.pan < lhs.pan)
return false;
if (lhs.tilt < rhs.tilt)
return true;
if (rhs.tilt < lhs.tilt)
return false;
if (lhs.zoom < rhs.zoom)
return true;
if (rhs.zoom < lhs.zoom)
return false;
return false;
}
template <typename StructPtrType>
VideoCaptureFormatPtr VideoCaptureFormat::Clone() const {
return New(
mojo::Clone(frame_size),
mojo::Clone(frame_rate),
mojo::Clone(pixel_format)
);
}
template <typename T, VideoCaptureFormat::EnableIfSame<T>*>
bool VideoCaptureFormat::Equals(const T& other_struct) const {
if (!mojo::Equals(this->frame_size, other_struct.frame_size))
return false;
if (!mojo::Equals(this->frame_rate, other_struct.frame_rate))
return false;
if (!mojo::Equals(this->pixel_format, other_struct.pixel_format))
return false;
return true;
}
template <typename T, VideoCaptureFormat::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.frame_size < rhs.frame_size)
return true;
if (rhs.frame_size < lhs.frame_size)
return false;
if (lhs.frame_rate < rhs.frame_rate)
return true;
if (rhs.frame_rate < lhs.frame_rate)
return false;
if (lhs.pixel_format < rhs.pixel_format)
return true;
if (rhs.pixel_format < lhs.pixel_format)
return false;
return false;
}
template <typename StructPtrType>
VideoCaptureParamsPtr VideoCaptureParams::Clone() const {
return New(
mojo::Clone(requested_format),
mojo::Clone(buffer_type),
mojo::Clone(resolution_change_policy),
mojo::Clone(power_line_frequency),
mojo::Clone(enable_face_detection),
mojo::Clone(is_high_dpi_enabled)
);
}
template <typename T, VideoCaptureParams::EnableIfSame<T>*>
bool VideoCaptureParams::Equals(const T& other_struct) const {
if (!mojo::Equals(this->requested_format, other_struct.requested_format))
return false;
if (!mojo::Equals(this->buffer_type, other_struct.buffer_type))
return false;
if (!mojo::Equals(this->resolution_change_policy, other_struct.resolution_change_policy))
return false;
if (!mojo::Equals(this->power_line_frequency, other_struct.power_line_frequency))
return false;
if (!mojo::Equals(this->enable_face_detection, other_struct.enable_face_detection))
return false;
if (!mojo::Equals(this->is_high_dpi_enabled, other_struct.is_high_dpi_enabled))
return false;
return true;
}
template <typename T, VideoCaptureParams::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.requested_format < rhs.requested_format)
return true;
if (rhs.requested_format < lhs.requested_format)
return false;
if (lhs.buffer_type < rhs.buffer_type)
return true;
if (rhs.buffer_type < lhs.buffer_type)
return false;
if (lhs.resolution_change_policy < rhs.resolution_change_policy)
return true;
if (rhs.resolution_change_policy < lhs.resolution_change_policy)
return false;
if (lhs.power_line_frequency < rhs.power_line_frequency)
return true;
if (rhs.power_line_frequency < lhs.power_line_frequency)
return false;
if (lhs.enable_face_detection < rhs.enable_face_detection)
return true;
if (rhs.enable_face_detection < lhs.enable_face_detection)
return false;
if (lhs.is_high_dpi_enabled < rhs.is_high_dpi_enabled)
return true;
if (rhs.is_high_dpi_enabled < lhs.is_high_dpi_enabled)
return false;
return false;
}
template <typename StructPtrType>
VideoCaptureFeedbackPtr VideoCaptureFeedback::Clone() const {
return New(
mojo::Clone(resource_utilization),
mojo::Clone(max_framerate_fps),
mojo::Clone(max_pixels),
mojo::Clone(require_mapped_frame),
mojo::Clone(DEPRECATED_mapped_sizes),
mojo::Clone(frame_id),
mojo::Clone(has_frame_id)
);
}
template <typename T, VideoCaptureFeedback::EnableIfSame<T>*>
bool VideoCaptureFeedback::Equals(const T& other_struct) const {
if (!mojo::Equals(this->resource_utilization, other_struct.resource_utilization))
return false;
if (!mojo::Equals(this->max_framerate_fps, other_struct.max_framerate_fps))
return false;
if (!mojo::Equals(this->max_pixels, other_struct.max_pixels))
return false;
if (!mojo::Equals(this->require_mapped_frame, other_struct.require_mapped_frame))
return false;
if (!mojo::Equals(this->DEPRECATED_mapped_sizes, other_struct.DEPRECATED_mapped_sizes))
return false;
if (!mojo::Equals(this->frame_id, other_struct.frame_id))
return false;
if (!mojo::Equals(this->has_frame_id, other_struct.has_frame_id))
return false;
return true;
}
template <typename T, VideoCaptureFeedback::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.resource_utilization < rhs.resource_utilization)
return true;
if (rhs.resource_utilization < lhs.resource_utilization)
return false;
if (lhs.max_framerate_fps < rhs.max_framerate_fps)
return true;
if (rhs.max_framerate_fps < lhs.max_framerate_fps)
return false;
if (lhs.max_pixels < rhs.max_pixels)
return true;
if (rhs.max_pixels < lhs.max_pixels)
return false;
if (lhs.require_mapped_frame < rhs.require_mapped_frame)
return true;
if (rhs.require_mapped_frame < lhs.require_mapped_frame)
return false;
if (lhs.DEPRECATED_mapped_sizes < rhs.DEPRECATED_mapped_sizes)
return true;
if (rhs.DEPRECATED_mapped_sizes < lhs.DEPRECATED_mapped_sizes)
return false;
if (lhs.frame_id < rhs.frame_id)
return true;
if (rhs.frame_id < lhs.frame_id)
return false;
if (lhs.has_frame_id < rhs.has_frame_id)
return true;
if (rhs.has_frame_id < lhs.has_frame_id)
return false;
return false;
}
template <typename StructPtrType>
PlaneStridesPtr PlaneStrides::Clone() const {
return New(
mojo::Clone(stride_by_plane)
);
}
template <typename T, PlaneStrides::EnableIfSame<T>*>
bool PlaneStrides::Equals(const T& other_struct) const {
if (!mojo::Equals(this->stride_by_plane, other_struct.stride_by_plane))
return false;
return true;
}
template <typename T, PlaneStrides::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.stride_by_plane < rhs.stride_by_plane)
return true;
if (rhs.stride_by_plane < lhs.stride_by_plane)
return false;
return false;
}
template <typename StructPtrType>
VideoCaptureDeviceDescriptorPtr VideoCaptureDeviceDescriptor::Clone() const {
return New(
mojo::Clone(display_name),
mojo::Clone(device_id),
mojo::Clone(model_id),
mojo::Clone(facing_mode),
mojo::Clone(capture_api),
mojo::Clone(control_support),
mojo::Clone(transport_type),
mojo::Clone(availability)
);
}
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>*>
bool VideoCaptureDeviceDescriptor::Equals(const T& other_struct) const {
if (!mojo::Equals(this->display_name, other_struct.display_name))
return false;
if (!mojo::Equals(this->device_id, other_struct.device_id))
return false;
if (!mojo::Equals(this->model_id, other_struct.model_id))
return false;
if (!mojo::Equals(this->facing_mode, other_struct.facing_mode))
return false;
if (!mojo::Equals(this->capture_api, other_struct.capture_api))
return false;
if (!mojo::Equals(this->control_support, other_struct.control_support))
return false;
if (!mojo::Equals(this->transport_type, other_struct.transport_type))
return false;
if (!mojo::Equals(this->availability, other_struct.availability))
return false;
return true;
}
template <typename T, VideoCaptureDeviceDescriptor::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.display_name < rhs.display_name)
return true;
if (rhs.display_name < lhs.display_name)
return false;
if (lhs.device_id < rhs.device_id)
return true;
if (rhs.device_id < lhs.device_id)
return false;
if (lhs.model_id < rhs.model_id)
return true;
if (rhs.model_id < lhs.model_id)
return false;
if (lhs.facing_mode < rhs.facing_mode)
return true;
if (rhs.facing_mode < lhs.facing_mode)
return false;
if (lhs.capture_api < rhs.capture_api)
return true;
if (rhs.capture_api < lhs.capture_api)
return false;
if (lhs.control_support < rhs.control_support)
return true;
if (rhs.control_support < lhs.control_support)
return false;
if (lhs.transport_type < rhs.transport_type)
return true;
if (rhs.transport_type < lhs.transport_type)
return false;
if (lhs.availability < rhs.availability)
return true;
if (rhs.availability < lhs.availability)
return false;
return false;
}
template <typename StructPtrType>
VideoCaptureDeviceInfoPtr VideoCaptureDeviceInfo::Clone() const {
return New(
mojo::Clone(descriptor),
mojo::Clone(supported_formats)
);
}
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>*>
bool VideoCaptureDeviceInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->descriptor, other_struct.descriptor))
return false;
if (!mojo::Equals(this->supported_formats, other_struct.supported_formats))
return false;
return true;
}
template <typename T, VideoCaptureDeviceInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.descriptor < rhs.descriptor)
return true;
if (rhs.descriptor < lhs.descriptor)
return false;
if (lhs.supported_formats < rhs.supported_formats)
return true;
if (rhs.supported_formats < lhs.supported_formats)
return false;
return false;
}
} // media::mojom
namespace mojo {
template <>
struct StructTraits<::media::mojom::VideoCaptureControlSupport::DataView,
::media::mojom::VideoCaptureControlSupportPtr> {
static bool IsNull(const ::media::mojom::VideoCaptureControlSupportPtr& input) { return !input; }
static void SetToNull(::media::mojom::VideoCaptureControlSupportPtr* output) { output->reset(); }
static decltype(::media::mojom::VideoCaptureControlSupport::pan) pan(
const ::media::mojom::VideoCaptureControlSupportPtr& input) {
return input->pan;
}
static decltype(::media::mojom::VideoCaptureControlSupport::tilt) tilt(
const ::media::mojom::VideoCaptureControlSupportPtr& input) {
return input->tilt;
}
static decltype(::media::mojom::VideoCaptureControlSupport::zoom) zoom(
const ::media::mojom::VideoCaptureControlSupportPtr& input) {
return input->zoom;
}
static bool Read(::media::mojom::VideoCaptureControlSupport::DataView input, ::media::mojom::VideoCaptureControlSupportPtr* output);
};
template <>
struct StructTraits<::media::mojom::VideoCaptureFormat::DataView,
::media::mojom::VideoCaptureFormatPtr> {
static bool IsNull(const ::media::mojom::VideoCaptureFormatPtr& input) { return !input; }
static void SetToNull(::media::mojom::VideoCaptureFormatPtr* output) { output->reset(); }
static const decltype(::media::mojom::VideoCaptureFormat::frame_size)& frame_size(
const ::media::mojom::VideoCaptureFormatPtr& input) {
return input->frame_size;
}
static decltype(::media::mojom::VideoCaptureFormat::frame_rate) frame_rate(
const ::media::mojom::VideoCaptureFormatPtr& input) {
return input->frame_rate;
}
static decltype(::media::mojom::VideoCaptureFormat::pixel_format) pixel_format(
const ::media::mojom::VideoCaptureFormatPtr& input) {
return input->pixel_format;
}
static bool Read(::media::mojom::VideoCaptureFormat::DataView input, ::media::mojom::VideoCaptureFormatPtr* output);
};
template <>
struct StructTraits<::media::mojom::VideoCaptureParams::DataView,
::media::mojom::VideoCaptureParamsPtr> {
static bool IsNull(const ::media::mojom::VideoCaptureParamsPtr& input) { return !input; }
static void SetToNull(::media::mojom::VideoCaptureParamsPtr* output) { output->reset(); }
static const decltype(::media::mojom::VideoCaptureParams::requested_format)& requested_format(
const ::media::mojom::VideoCaptureParamsPtr& input) {
return input->requested_format;
}
static decltype(::media::mojom::VideoCaptureParams::buffer_type) buffer_type(
const ::media::mojom::VideoCaptureParamsPtr& input) {
return input->buffer_type;
}
static decltype(::media::mojom::VideoCaptureParams::resolution_change_policy) resolution_change_policy(
const ::media::mojom::VideoCaptureParamsPtr& input) {
return input->resolution_change_policy;
}
static decltype(::media::mojom::VideoCaptureParams::power_line_frequency) power_line_frequency(
const ::media::mojom::VideoCaptureParamsPtr& input) {
return input->power_line_frequency;
}
static decltype(::media::mojom::VideoCaptureParams::enable_face_detection) enable_face_detection(
const ::media::mojom::VideoCaptureParamsPtr& input) {
return input->enable_face_detection;
}
static decltype(::media::mojom::VideoCaptureParams::is_high_dpi_enabled) is_high_dpi_enabled(
const ::media::mojom::VideoCaptureParamsPtr& input) {
return input->is_high_dpi_enabled;
}
static bool Read(::media::mojom::VideoCaptureParams::DataView input, ::media::mojom::VideoCaptureParamsPtr* output);
};
template <>
struct StructTraits<::media::mojom::VideoCaptureFeedback::DataView,
::media::mojom::VideoCaptureFeedbackPtr> {
static bool IsNull(const ::media::mojom::VideoCaptureFeedbackPtr& input) { return !input; }
static void SetToNull(::media::mojom::VideoCaptureFeedbackPtr* output) { output->reset(); }
static decltype(::media::mojom::VideoCaptureFeedback::resource_utilization) resource_utilization(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->resource_utilization;
}
static decltype(::media::mojom::VideoCaptureFeedback::max_framerate_fps) max_framerate_fps(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->max_framerate_fps;
}
static decltype(::media::mojom::VideoCaptureFeedback::max_pixels) max_pixels(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->max_pixels;
}
static decltype(::media::mojom::VideoCaptureFeedback::require_mapped_frame) require_mapped_frame(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->require_mapped_frame;
}
static const decltype(::media::mojom::VideoCaptureFeedback::DEPRECATED_mapped_sizes)& DEPRECATED_mapped_sizes(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->DEPRECATED_mapped_sizes;
}
static decltype(::media::mojom::VideoCaptureFeedback::frame_id) frame_id(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->frame_id;
}
static decltype(::media::mojom::VideoCaptureFeedback::has_frame_id) has_frame_id(
const ::media::mojom::VideoCaptureFeedbackPtr& input) {
return input->has_frame_id;
}
static bool Read(::media::mojom::VideoCaptureFeedback::DataView input, ::media::mojom::VideoCaptureFeedbackPtr* output);
};
template <>
struct StructTraits<::media::mojom::PlaneStrides::DataView,
::media::mojom::PlaneStridesPtr> {
static bool IsNull(const ::media::mojom::PlaneStridesPtr& input) { return !input; }
static void SetToNull(::media::mojom::PlaneStridesPtr* output) { output->reset(); }
static const decltype(::media::mojom::PlaneStrides::stride_by_plane)& stride_by_plane(
const ::media::mojom::PlaneStridesPtr& input) {
return input->stride_by_plane;
}
static bool Read(::media::mojom::PlaneStrides::DataView input, ::media::mojom::PlaneStridesPtr* output);
};
template <>
struct StructTraits<::media::mojom::VideoCaptureDeviceDescriptor::DataView,
::media::mojom::VideoCaptureDeviceDescriptorPtr> {
static bool IsNull(const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) { return !input; }
static void SetToNull(::media::mojom::VideoCaptureDeviceDescriptorPtr* output) { output->reset(); }
static const decltype(::media::mojom::VideoCaptureDeviceDescriptor::display_name)& display_name(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->display_name;
}
static const decltype(::media::mojom::VideoCaptureDeviceDescriptor::device_id)& device_id(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->device_id;
}
static const decltype(::media::mojom::VideoCaptureDeviceDescriptor::model_id)& model_id(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->model_id;
}
static decltype(::media::mojom::VideoCaptureDeviceDescriptor::facing_mode) facing_mode(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->facing_mode;
}
static decltype(::media::mojom::VideoCaptureDeviceDescriptor::capture_api) capture_api(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->capture_api;
}
static const decltype(::media::mojom::VideoCaptureDeviceDescriptor::control_support)& control_support(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->control_support;
}
static decltype(::media::mojom::VideoCaptureDeviceDescriptor::transport_type) transport_type(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->transport_type;
}
static decltype(::media::mojom::VideoCaptureDeviceDescriptor::availability) availability(
const ::media::mojom::VideoCaptureDeviceDescriptorPtr& input) {
return input->availability;
}
static bool Read(::media::mojom::VideoCaptureDeviceDescriptor::DataView input, ::media::mojom::VideoCaptureDeviceDescriptorPtr* output);
};
template <>
struct StructTraits<::media::mojom::VideoCaptureDeviceInfo::DataView,
::media::mojom::VideoCaptureDeviceInfoPtr> {
static bool IsNull(const ::media::mojom::VideoCaptureDeviceInfoPtr& input) { return !input; }
static void SetToNull(::media::mojom::VideoCaptureDeviceInfoPtr* output) { output->reset(); }
static const decltype(::media::mojom::VideoCaptureDeviceInfo::descriptor)& descriptor(
const ::media::mojom::VideoCaptureDeviceInfoPtr& input) {
return input->descriptor;
}
static const decltype(::media::mojom::VideoCaptureDeviceInfo::supported_formats)& supported_formats(
const ::media::mojom::VideoCaptureDeviceInfoPtr& input) {
return input->supported_formats;
}
static bool Read(::media::mojom::VideoCaptureDeviceInfo::DataView input, ::media::mojom::VideoCaptureDeviceInfoPtr* output);
};
} // namespace mojo
#endif // MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_TYPES_MOJOM_H_
/* Metadata comment
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW3sidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDE0NDgsICJlbmQiOiAxNDc0LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVDb250cm9s
U3VwcG9ydCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU1NzIsICJlbmQiOiA1NTc1LCAidm5hbWUiOiB7Imxh
bmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nv
ZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5W
aWRlb0NhcHR1cmVDb250cm9sU3VwcG9ydC5wYW4ifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1NjUxLCAiZW5k
IjogNTY1NSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWdu
YXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlQ29udHJvbFN1cHBvcnQudGlsdCJ9LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJiZWdpbiI6IDU3MzEsICJlbmQiOiA1NzM1LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVD
b250cm9sU3VwcG9ydC56b29tIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwg
eyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNjgyNSwgImVuZCI6IDY4NDMsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUZvcm1hdCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDEwODA0LCAiZW5k
IjogMTA4MTQsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUZvcm1hdC5mcmFtZV9zaXplIn0sICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgImJlZ2luIjogMTA4ODksICJlbmQiOiAxMDg5OSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJt
b2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2No
cm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJl
Rm9ybWF0LmZyYW1lX3JhdGUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxMDk5NiwgImVuZCI6IDExMDA4LCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVGb3JtYXQucGl4ZWxfZm9ybWF0In0sICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2lu
IjogMTIwNTcsICJlbmQiOiAxMjA3NSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3Ny
Yy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlUGFyYW1zIn0s
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgImJlZ2luIjogMTY1MzUsICJlbmQiOiAxNjU1MSwgInZuYW1lIjogeyJsYW5ndWFnZSI6
ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNo
L2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0
dXJlUGFyYW1zLnJlcXVlc3RlZF9mb3JtYXQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNjY1MywgImVuZCI6
IDE2NjY0LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25h
dHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVQYXJhbXMuYnVmZmVyX3R5cGUifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiAxNjc3OSwgImVuZCI6IDE2ODAzLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVQ
YXJhbXMucmVzb2x1dGlvbl9jaGFuZ2VfcG9saWN5In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTY5MTAsICJl
bmQiOiAxNjkzMCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJz
aWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlUGFyYW1zLnBvd2VyX2xpbmVfZnJl
cXVlbmN5In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTcwMTUsICJlbmQiOiAxNzAzNiwgInZuYW1lIjogeyJs
YW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
b2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20u
VmlkZW9DYXB0dXJlUGFyYW1zLmVuYWJsZV9mYWNlX2RldGVjdGlvbiJ9LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6
IDE3MTE5LCAiZW5kIjogMTcxMzgsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZVBhcmFtcy5pc19o
aWdoX2RwaV9lbmFibGVkIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTgxODksICJlbmQiOiAxODIwOSwgInZu
YW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVk
aWEubW9qb20uVmlkZW9DYXB0dXJlRmVlZGJhY2sifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyMjczOCwgImVu
ZCI6IDIyNzU4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNp
Z25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVGZWVkYmFjay5yZXNvdXJjZV91dGls
aXphdGlvbiJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDIyODQyLCAiZW5kIjogMjI4NTksICJ2bmFtZSI6IHsi
bGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9t
LlZpZGVvQ2FwdHVyZUZlZWRiYWNrLm1heF9mcmFtZXJhdGVfZnBzIn0sICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjog
MjI5MzgsICJlbmQiOiAyMjk0OCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8v
bWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlRmVlZGJhY2subWF4
X3BpeGVscyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDIzMDM0LCAiZW5kIjogMjMwNTQsICJ2bmFtZSI6IHsi
bGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9t
LlZpZGVvQ2FwdHVyZUZlZWRiYWNrLnJlcXVpcmVfbWFwcGVkX2ZyYW1lIn0sICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2lu
IjogMjMxNzgsICJlbmQiOiAyMzIwMSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3Ny
Yy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlRmVlZGJhY2su
REVQUkVDQVRFRF9tYXBwZWRfc2l6ZXMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyMzI3OCwgImVuZCI6IDIz
Mjg2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVy
ZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVGZWVkYmFjay5mcmFtZV9pZCJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDIzMzY0LCAiZW5kIjogMjMzNzYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUZlZWRi
YWNrLmhhc19mcmFtZV9pZCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDI0NDI3LCAiZW5kIjogMjQ0MzksICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhLm1vam9tLlBsYW5lU3RyaWRlcyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
In0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDI4MjA2LCAiZW5kIjogMjgy
MjEsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJl
IjogIm1lZGlhLm1vam9tLlBsYW5lU3RyaWRlcy5zdHJpZGVfYnlfcGxhbmUifSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVn
aW4iOiAyOTI1NiwgImVuZCI6IDI5Mjg0LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVEZXZpY2VE
ZXNjcmlwdG9yIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMzQwOTQsICJlbmQiOiAzNDEwNiwgInZuYW1lIjog
eyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlRGV2aWNlRGVzY3JpcHRvci5kaXNwbGF5X25hbWUifSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVn
aW4iOiAzNDE5NiwgImVuZCI6IDM0MjA1LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVEZXZpY2VE
ZXNjcmlwdG9yLmRldmljZV9pZCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0s
IHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDM0Mjk0LCAiZW5kIjogMzQzMDIs
ICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjog
Im1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZURldmljZURlc2NyaXB0b3IubW9kZWxfaWQifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiAzNDQwNywgImVuZCI6IDM0NDE4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVE
ZXZpY2VEZXNjcmlwdG9yLmZhY2luZ19tb2RlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMzQ1MTQsICJlbmQi
OiAzNDUyNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWdu
YXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlRGV2aWNlRGVzY3JpcHRvci5jYXB0dXJl
X2FwaSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJiZWdpbiI6IDM0NjQ1LCAiZW5kIjogMzQ2NjAsICJ2bmFtZSI6IHsibGFu
Z3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29k
ZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZp
ZGVvQ2FwdHVyZURldmljZURlc2NyaXB0b3IuY29udHJvbF9zdXBwb3J0In0sICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2lu
IjogMzQ3NjksICJlbmQiOiAzNDc4MywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3Ny
Yy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlRGV2aWNlRGVz
Y3JpcHRvci50cmFuc3BvcnRfdHlwZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
In0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDM0ODk4LCAiZW5kIjogMzQ5
MTAsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJl
IjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZURldmljZURlc2NyaXB0b3IuYXZhaWxhYmlsaXR5
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMzYwMDMsICJlbmQiOiAzNjAyNSwgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9D
YXB0dXJlRGV2aWNlSW5mbyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQwMTM4LCAiZW5kIjogNDAxNDgsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhLm1vam9tLlZpZGVvQ2FwdHVyZURldmljZUluZm8uZGVzY3JpcHRvciJ9LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdp
biI6IDQwMjY5LCAiZW5kIjogNDAyODYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZURldmljZUlu
Zm8uc3VwcG9ydGVkX2Zvcm1hdHMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9
XX0=
*/