[go: nahoru, domu]

blob: 484d2cda891f080c8183d75f423cafa8edf067c1 [file] [log] [blame]
Avi Drissmand387f0922022-09-14 20:51:311// Copyright 2017 The Chromium Authors
Miguel Casas-Sanchez15e2e592017-07-19 01:45:252// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Miyoung Shin25bb8c092019-08-03 00:56:575#ifndef MEDIA_MOJO_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
6#define MEDIA_MOJO_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
Miguel Casas-Sanchez15e2e592017-07-19 01:45:257
David Sandersdc8250f2022-03-17 01:52:148#include "base/notreached.h"
Clarissa Garvey76708b62021-06-30 22:53:269#include "media/base/bitrate.h"
Pin-chih Line6ff3d972018-07-27 11:15:0410#include "media/base/ipc/media_param_traits.h"
Clarissa Garveyb5e8c6b2022-03-30 18:49:1011#include "media/base/video_bitrate_allocation.h"
Eugene Zemtsov04028832023-06-23 00:22:2512#include "media/base/video_encoder.h"
Ken Rockot5a4c9e62020-07-22 21:55:1613#include "media/mojo/mojom/media_types.mojom-shared.h"
14#include "media/mojo/mojom/video_encode_accelerator.mojom-shared.h"
Miguel Casas-Sanchez15e2e592017-07-19 01:45:2515#include "media/video/video_encode_accelerator.h"
Clarissa Garvey3b4dc7b12022-02-25 02:52:0116#include "mojo/public/cpp/bindings/union_traits.h"
Miyoung Shin87943f502019-07-26 13:31:5817#include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
Miguel Casas-Sanchez15e2e592017-07-19 01:45:2518
19namespace mojo {
20
21template <>
Clarissa Garvey9d93d112022-05-24 20:59:1322struct EnumTraits<media::mojom::VideoEncodeAcceleratorSupportedRateControlMode,
23 media::VideoEncodeAccelerator::SupportedRateControlMode> {
24 static media::mojom::VideoEncodeAcceleratorSupportedRateControlMode ToMojom(
25 media::VideoEncodeAccelerator::SupportedRateControlMode mode);
26
27 static bool FromMojom(
28 media::mojom::VideoEncodeAcceleratorSupportedRateControlMode input,
29 media::VideoEncodeAccelerator::SupportedRateControlMode* out);
30};
31
32template <>
Hirokazu Hondaeb11e4a92020-02-19 11:25:0033struct StructTraits<
34 media::mojom::VideoEncodeAcceleratorSupportedProfileDataView,
35 media::VideoEncodeAccelerator::SupportedProfile> {
36 static media::VideoCodecProfile profile(
37 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
38 return profile.profile;
39 }
40
41 static const gfx::Size& min_resolution(
42 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
43 return profile.min_resolution;
44 }
45
46 static const gfx::Size& max_resolution(
47 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
48 return profile.max_resolution;
49 }
50
51 static uint32_t max_framerate_numerator(
52 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
53 return profile.max_framerate_numerator;
54 }
55
56 static uint32_t max_framerate_denominator(
57 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
58 return profile.max_framerate_denominator;
59 }
60
Clarissa Garvey9d93d112022-05-24 20:59:1361 static std::vector<media::VideoEncodeAccelerator::SupportedRateControlMode>
62 rate_control_modes(
63 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
64 std::vector<media::VideoEncodeAccelerator::SupportedRateControlMode> modes;
65 if (profile.rate_control_modes &
66 media::VideoEncodeAccelerator::kConstantMode) {
67 modes.push_back(media::VideoEncodeAccelerator::kConstantMode);
68 }
69 if (profile.rate_control_modes &
70 media::VideoEncodeAccelerator::kVariableMode) {
71 modes.push_back(media::VideoEncodeAccelerator::kVariableMode);
72 }
Eugene Zemtsova48f4a22023-06-27 21:43:4073 if (profile.rate_control_modes &
74 media::VideoEncodeAccelerator::kExternalMode) {
75 modes.push_back(media::VideoEncodeAccelerator::kExternalMode);
76 }
Clarissa Garvey9d93d112022-05-24 20:59:1377 return modes;
78 }
79
Zhaoliang Ma640402732021-08-30 07:14:2680 static const std::vector<media::SVCScalabilityMode>& scalability_modes(
81 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
82 return profile.scalability_modes;
83 }
84
Dale Curtisa86d7aa2022-12-20 08:06:0985 static bool is_software_codec(
86 const media::VideoEncodeAccelerator::SupportedProfile& profile) {
87 return profile.is_software_codec;
88 }
89
Hirokazu Hondaeb11e4a92020-02-19 11:25:0090 static bool Read(
91 media::mojom::VideoEncodeAcceleratorSupportedProfileDataView data,
92 media::VideoEncodeAccelerator::SupportedProfile* out);
93};
94
95template <>
Clarissa Garveyb5e8c6b2022-03-30 18:49:1096class StructTraits<media::mojom::VariableBitratePeakDataView, uint32_t> {
97 public:
98 static constexpr uint32_t bps(const uint32_t peak_bps) { return peak_bps; }
99
100 static bool Read(media::mojom::VariableBitratePeakDataView data,
101 uint32_t* out_peak_bps);
102};
103
104template <>
Erik Språngf169a572018-06-29 08:44:29105class StructTraits<media::mojom::VideoBitrateAllocationDataView,
106 media::VideoBitrateAllocation> {
107 public:
Clarissa Garvey1726b822022-01-28 20:06:07108 static std::vector<uint32_t> bitrates(
Erik Språngf169a572018-06-29 08:44:29109 const media::VideoBitrateAllocation& bitrate_allocation);
110
Arthur Sonzogni581b9e82024-01-30 17:25:15111 static std::optional<uint32_t> variable_bitrate_peak(
Clarissa Garveyb5e8c6b2022-03-30 18:49:10112 const media::VideoBitrateAllocation& bitrate_allocation) {
Clarissa Garvey4cb119292022-05-04 00:54:55113 if (bitrate_allocation.GetMode() == media::Bitrate::Mode::kConstant) {
Arthur Sonzogni581b9e82024-01-30 17:25:15114 return std::nullopt;
Clarissa Garveyb5e8c6b2022-03-30 18:49:10115 } else {
Arthur Sonzogni581b9e82024-01-30 17:25:15116 return std::optional<uint32_t>(
Clarissa Garveyb5e8c6b2022-03-30 18:49:10117 bitrate_allocation.GetSumBitrate().peak_bps());
118 }
119 }
120
Erik Språngf169a572018-06-29 08:44:29121 static bool Read(media::mojom::VideoBitrateAllocationDataView data,
122 media::VideoBitrateAllocation* out_bitrate_allocation);
123};
124
Erik Språnge24828d2018-07-10 11:33:15125template <>
Eugene Zemtsov04028832023-06-23 00:22:25126class StructTraits<media::mojom::VideoEncodeOptionsDataView,
127 media::VideoEncoder::EncodeOptions> {
128 public:
129 static bool force_keyframe(
130 const media::VideoEncoder::EncodeOptions& options) {
131 return options.key_frame;
132 }
133
134 static int32_t quantizer(const media::VideoEncoder::EncodeOptions& options) {
135 return options.quantizer.value_or(-1);
136 }
137
138 static bool Read(media::mojom::VideoEncodeOptionsDataView data,
139 media::VideoEncoder::EncodeOptions* out_options);
140};
141
142template <>
Hirokazu Hondabf652e72020-07-02 04:08:00143struct UnionTraits<media::mojom::CodecMetadataDataView,
144 media::BitstreamBufferMetadata> {
145 static media::mojom::CodecMetadataDataView::Tag GetTag(
146 const media::BitstreamBufferMetadata& metadata) {
Hirokazu Hondab7a2f882021-08-04 03:19:24147 if (metadata.h264) {
Daniel Cheng40fbe2f2022-04-20 22:12:53148 return media::mojom::CodecMetadataDataView::Tag::kH264;
Hirokazu Hondab7a2f882021-08-04 03:19:24149 } else if (metadata.vp8) {
Daniel Cheng40fbe2f2022-04-20 22:12:53150 return media::mojom::CodecMetadataDataView::Tag::kVp8;
Hirokazu Hondabf652e72020-07-02 04:08:00151 } else if (metadata.vp9) {
Daniel Cheng40fbe2f2022-04-20 22:12:53152 return media::mojom::CodecMetadataDataView::Tag::kVp9;
Qiu Jianlinb683c4b2021-12-14 01:55:08153 } else if (metadata.av1) {
Daniel Cheng40fbe2f2022-04-20 22:12:53154 return media::mojom::CodecMetadataDataView::Tag::kAv1;
Qiu Jianlin3d5e7162022-10-26 10:26:24155 } else if (metadata.h265) {
156 return media::mojom::CodecMetadataDataView::Tag::kH265;
Hirokazu Hondabf652e72020-07-02 04:08:00157 }
Peter Boström0ce6af602023-05-15 21:27:24158 NOTREACHED_NORETURN();
Hirokazu Hondabf652e72020-07-02 04:08:00159 }
160
161 static bool IsNull(const media::BitstreamBufferMetadata& metadata) {
Qiu Jianlin3d5e7162022-10-26 10:26:24162 return !metadata.h264 && !metadata.vp8 && !metadata.vp9 && !metadata.av1 &&
163 !metadata.h265;
Hirokazu Hondabf652e72020-07-02 04:08:00164 }
165
166 static void SetToNull(media::BitstreamBufferMetadata* metadata) {
Hirokazu Hondab7a2f882021-08-04 03:19:24167 metadata->h264.reset();
Hirokazu Hondabf652e72020-07-02 04:08:00168 metadata->vp8.reset();
169 metadata->vp9.reset();
Qiu Jianlinb683c4b2021-12-14 01:55:08170 metadata->av1.reset();
Qiu Jianlin3d5e7162022-10-26 10:26:24171 metadata->h265.reset();
Hirokazu Hondabf652e72020-07-02 04:08:00172 }
173
Hirokazu Hondab7a2f882021-08-04 03:19:24174 static const media::H264Metadata& h264(
175 const media::BitstreamBufferMetadata& metadata) {
176 return *metadata.h264;
177 }
178
Hirokazu Hondabf652e72020-07-02 04:08:00179 static const media::Vp8Metadata& vp8(
180 const media::BitstreamBufferMetadata& metadata) {
181 return *metadata.vp8;
182 }
183
184 static const media::Vp9Metadata& vp9(
185 const media::BitstreamBufferMetadata& metadata) {
186 return *metadata.vp9;
187 }
188
Qiu Jianlinb683c4b2021-12-14 01:55:08189 static const media::Av1Metadata& av1(
190 const media::BitstreamBufferMetadata& metadata) {
191 return *metadata.av1;
192 }
193
Qiu Jianlin3d5e7162022-10-26 10:26:24194 static const media::H265Metadata& h265(
195 const media::BitstreamBufferMetadata& metadata) {
196 return *metadata.h265;
197 }
198
Hirokazu Hondabf652e72020-07-02 04:08:00199 static bool Read(media::mojom::CodecMetadataDataView data,
200 media::BitstreamBufferMetadata* metadata);
201};
202
203template <>
Erik Språnge24828d2018-07-10 11:33:15204class StructTraits<media::mojom::BitstreamBufferMetadataDataView,
205 media::BitstreamBufferMetadata> {
206 public:
207 static size_t payload_size_bytes(const media::BitstreamBufferMetadata& bbm) {
208 return bbm.payload_size_bytes;
209 }
210 static bool key_frame(const media::BitstreamBufferMetadata& bbm) {
211 return bbm.key_frame;
212 }
213 static base::TimeDelta timestamp(const media::BitstreamBufferMetadata& bbm) {
214 return bbm.timestamp;
215 }
Hirokazu Honda76b82142024-01-17 03:27:17216 static bool end_of_picture(const media::BitstreamBufferMetadata& bbm) {
217 return bbm.end_of_picture;
218 }
Zhaoliang Mac27f3432021-12-16 05:49:47219 static int32_t qp(const media::BitstreamBufferMetadata& bbm) {
220 return bbm.qp;
221 }
Hirokazu Hondabf652e72020-07-02 04:08:00222 static const media::BitstreamBufferMetadata& codec_metadata(
Erik Språnge24828d2018-07-10 11:33:15223 const media::BitstreamBufferMetadata& bbm) {
Hirokazu Hondabf652e72020-07-02 04:08:00224 return bbm;
Erik Språnge24828d2018-07-10 11:33:15225 }
Arthur Sonzogni581b9e82024-01-30 17:25:15226 static std::optional<gfx::Size> encoded_size(
Dale Curtisc7e40022022-12-17 00:37:52227 const media::BitstreamBufferMetadata& bbm) {
228 return bbm.encoded_size;
229 }
Arthur Sonzogni581b9e82024-01-30 17:25:15230 static std::optional<gfx::ColorSpace> encoded_color_space(
Dale Curtisf2f10a12023-03-20 17:42:21231 const media::BitstreamBufferMetadata& bbm) {
232 return bbm.encoded_color_space;
233 }
Erik Språnge24828d2018-07-10 11:33:15234
235 static bool Read(media::mojom::BitstreamBufferMetadataDataView data,
236 media::BitstreamBufferMetadata* out_metadata);
237};
238
239template <>
Hirokazu Hondab7a2f882021-08-04 03:19:24240class StructTraits<media::mojom::H264MetadataDataView, media::H264Metadata> {
241 public:
Qiu Jianlin3d5e7162022-10-26 10:26:24242 static uint8_t temporal_idx(const media::H264Metadata& h264) {
243 return h264.temporal_idx;
Hirokazu Hondab7a2f882021-08-04 03:19:24244 }
245
Qiu Jianlin3d5e7162022-10-26 10:26:24246 static bool layer_sync(const media::H264Metadata& h264) {
247 return h264.layer_sync;
Hirokazu Hondab7a2f882021-08-04 03:19:24248 }
249
250 static bool Read(media::mojom::H264MetadataDataView data,
251 media::H264Metadata* out_metadata);
252};
253
254template <>
Qiu Jianlin3d5e7162022-10-26 10:26:24255class StructTraits<media::mojom::H265MetadataDataView, media::H265Metadata> {
256 public:
257 static uint8_t temporal_idx(const media::H265Metadata& h265) {
258 return h265.temporal_idx;
259 }
260
Qiu Jianlin3d5e7162022-10-26 10:26:24261 static bool Read(media::mojom::H265MetadataDataView data,
262 media::H265Metadata* out_metadata);
263};
264
265template <>
Erik Språnge24828d2018-07-10 11:33:15266class StructTraits<media::mojom::Vp8MetadataDataView, media::Vp8Metadata> {
267 public:
268 static bool non_reference(const media::Vp8Metadata& vp8) {
269 return vp8.non_reference;
270 }
271
272 static uint8_t temporal_idx(const media::Vp8Metadata& vp8) {
273 return vp8.temporal_idx;
274 }
275
276 static bool layer_sync(const media::Vp8Metadata& vp8) {
277 return vp8.layer_sync;
278 }
279
280 static bool Read(media::mojom::Vp8MetadataDataView data,
281 media::Vp8Metadata* out_metadata);
282};
283
Pin-chih Line6ff3d972018-07-27 11:15:04284template <>
Hirokazu Hondabf652e72020-07-02 04:08:00285class StructTraits<media::mojom::Vp9MetadataDataView, media::Vp9Metadata> {
286 public:
Zhaoliang Madef7827b2021-08-05 07:19:29287 static bool inter_pic_predicted(const media::Vp9Metadata& vp9) {
288 return vp9.inter_pic_predicted;
Hirokazu Hondabf652e72020-07-02 04:08:00289 }
290 static bool temporal_up_switch(const media::Vp9Metadata& vp9) {
291 return vp9.temporal_up_switch;
292 }
Zhaoliang Ma641a7b02021-06-15 06:53:13293 static bool referenced_by_upper_spatial_layers(
294 const media::Vp9Metadata& vp9) {
295 return vp9.referenced_by_upper_spatial_layers;
296 }
297 static bool reference_lower_spatial_layers(const media::Vp9Metadata& vp9) {
298 return vp9.reference_lower_spatial_layers;
299 }
Hirokazu Hondabf652e72020-07-02 04:08:00300 static uint8_t temporal_idx(const media::Vp9Metadata& vp9) {
301 return vp9.temporal_idx;
302 }
Zhaoliang Ma641a7b02021-06-15 06:53:13303 static uint8_t spatial_idx(const media::Vp9Metadata& vp9) {
304 return vp9.spatial_idx;
305 }
306 static const std::vector<gfx::Size>& spatial_layer_resolutions(
307 const media::Vp9Metadata& vp9) {
308 return vp9.spatial_layer_resolutions;
309 }
Hirokazu Hondaf574a262023-08-31 01:53:37310 static uint8_t begin_active_spatial_layer_index(
311 const media::Vp9Metadata& vp9) {
312 return vp9.begin_active_spatial_layer_index;
313 }
314 static uint8_t end_active_spatial_layer_index(const media::Vp9Metadata& vp9) {
315 return vp9.end_active_spatial_layer_index;
316 }
Hirokazu Hondabf652e72020-07-02 04:08:00317 static const std::vector<uint8_t>& p_diffs(const media::Vp9Metadata& vp9) {
318 return vp9.p_diffs;
319 }
320
321 static bool Read(media::mojom::Vp9MetadataDataView data,
322 media::Vp9Metadata* out_metadata);
323};
324
325template <>
Qiu Jianlinb683c4b2021-12-14 01:55:08326class StructTraits<media::mojom::Av1MetadataDataView, media::Av1Metadata> {
327 public:
Qiu Jianlinb683c4b2021-12-14 01:55:08328 static uint8_t temporal_idx(const media::Av1Metadata& av1) {
329 return av1.temporal_idx;
330 }
Qiu Jianlinb683c4b2021-12-14 01:55:08331
332 static bool Read(media::mojom::Av1MetadataDataView data,
333 media::Av1Metadata* out_metadata);
334};
335
336template <>
Ken Rockot5a4c9e62020-07-22 21:55:16337struct EnumTraits<media::mojom::VideoEncodeAcceleratorConfig_StorageType,
Fish Lin752b49192019-05-31 05:04:21338 media::VideoEncodeAccelerator::Config::StorageType> {
Ken Rockot5a4c9e62020-07-22 21:55:16339 static media::mojom::VideoEncodeAcceleratorConfig_StorageType ToMojom(
Fish Lin752b49192019-05-31 05:04:21340 media::VideoEncodeAccelerator::Config::StorageType input);
341
342 static bool FromMojom(
Ken Rockot5a4c9e62020-07-22 21:55:16343 media::mojom::VideoEncodeAcceleratorConfig_StorageType,
Fish Lin752b49192019-05-31 05:04:21344 media::VideoEncodeAccelerator::Config::StorageType* output);
345};
346
347template <>
Dale Curtis13f72b72022-11-17 23:37:23348struct EnumTraits<media::mojom::VideoEncodeAcceleratorConfig_EncoderType,
349 media::VideoEncodeAccelerator::Config::EncoderType> {
350 static media::mojom::VideoEncodeAcceleratorConfig_EncoderType ToMojom(
351 media::VideoEncodeAccelerator::Config::EncoderType input);
352
353 static bool FromMojom(
354 media::mojom::VideoEncodeAcceleratorConfig_EncoderType,
355 media::VideoEncodeAccelerator::Config::EncoderType* output);
356};
357
358template <>
Ken Rockot5a4c9e62020-07-22 21:55:16359struct EnumTraits<media::mojom::VideoEncodeAcceleratorConfig_ContentType,
Erik Språngf5420d12018-09-03 09:09:40360 media::VideoEncodeAccelerator::Config::ContentType> {
Ken Rockot5a4c9e62020-07-22 21:55:16361 static media::mojom::VideoEncodeAcceleratorConfig_ContentType ToMojom(
Erik Språngf5420d12018-09-03 09:09:40362 media::VideoEncodeAccelerator::Config::ContentType input);
363
364 static bool FromMojom(
Ken Rockot5a4c9e62020-07-22 21:55:16365 media::mojom::VideoEncodeAcceleratorConfig_ContentType,
Erik Språngf5420d12018-09-03 09:09:40366 media::VideoEncodeAccelerator::Config::ContentType* output);
367};
368
369template <>
Joey Arhar60b3f6a2020-04-03 21:52:17370struct StructTraits<media::mojom::SpatialLayerDataView,
371 media::VideoEncodeAccelerator::Config::SpatialLayer> {
372 static int32_t width(
373 const media::VideoEncodeAccelerator::Config::SpatialLayer& input) {
374 return input.width;
375 }
376
377 static int32_t height(
378 const media::VideoEncodeAccelerator::Config::SpatialLayer& input) {
379 return input.height;
380 }
381
382 static uint32_t bitrate_bps(
383 const media::VideoEncodeAccelerator::Config::SpatialLayer& input) {
384 return input.bitrate_bps;
385 }
386
387 static uint32_t framerate(
388 const media::VideoEncodeAccelerator::Config::SpatialLayer& input) {
389 return input.framerate;
390 }
391
392 static uint8_t max_qp(
393 const media::VideoEncodeAccelerator::Config::SpatialLayer& input) {
394 return input.max_qp;
395 }
396
397 static uint8_t num_of_temporal_layers(
398 const media::VideoEncodeAccelerator::Config::SpatialLayer& input) {
399 return input.num_of_temporal_layers;
400 }
401
402 static bool Read(media::mojom::SpatialLayerDataView input,
403 media::VideoEncodeAccelerator::Config::SpatialLayer* output);
404};
405
406template <>
Clarissa Garvey3b4dc7b12022-02-25 02:52:01407struct StructTraits<media::mojom::ConstantBitrateDataView, media::Bitrate> {
Clarissa Garvey86223e42022-03-02 19:02:01408 static uint32_t target_bps(const media::Bitrate& input) {
409 return input.target_bps();
410 }
Clarissa Garvey76708b62021-06-30 22:53:26411
Clarissa Garvey3b4dc7b12022-02-25 02:52:01412 static bool Read(media::mojom::ConstantBitrateDataView input,
413 media::Bitrate* output);
Clarissa Garvey76708b62021-06-30 22:53:26414};
415
416template <>
Clarissa Garvey3b4dc7b12022-02-25 02:52:01417struct StructTraits<media::mojom::VariableBitrateDataView, media::Bitrate> {
Clarissa Garvey86223e42022-03-02 19:02:01418 static uint32_t target_bps(const media::Bitrate& input) {
419 return input.target_bps();
420 }
421 static uint32_t peak_bps(const media::Bitrate& input) {
422 return input.peak_bps();
423 }
Clarissa Garvey3b4dc7b12022-02-25 02:52:01424 static bool Read(media::mojom::VariableBitrateDataView input,
425 media::Bitrate* output);
426};
Clarissa Garvey76708b62021-06-30 22:53:26427
Clarissa Garvey3b4dc7b12022-02-25 02:52:01428template <>
Eugene Zemtsov01fd0022023-02-24 23:00:33429struct StructTraits<media::mojom::ExternalBitrateDataView, media::Bitrate> {
430 static bool Read(media::mojom::ExternalBitrateDataView input,
431 media::Bitrate* output);
432};
433
434template <>
Clarissa Garvey3b4dc7b12022-02-25 02:52:01435struct UnionTraits<media::mojom::BitrateDataView, media::Bitrate> {
436 static media::mojom::BitrateDataView::Tag GetTag(const media::Bitrate& input);
437 static media::Bitrate constant(const media::Bitrate& input) { return input; }
438 static media::Bitrate variable(const media::Bitrate& input) { return input; }
Eugene Zemtsov01fd0022023-02-24 23:00:33439 static media::Bitrate external(const media::Bitrate& input) { return input; }
Clarissa Garvey76708b62021-06-30 22:53:26440 static bool Read(media::mojom::BitrateDataView input, media::Bitrate* output);
441};
442
443template <>
Pin-chih Line6ff3d972018-07-27 11:15:04444struct StructTraits<media::mojom::VideoEncodeAcceleratorConfigDataView,
445 media::VideoEncodeAccelerator::Config> {
446 static media::VideoPixelFormat input_format(
447 const media::VideoEncodeAccelerator::Config& input) {
448 return input.input_format;
449 }
450
451 static const gfx::Size& input_visible_size(
452 const media::VideoEncodeAccelerator::Config& input) {
453 return input.input_visible_size;
454 }
455
456 static media::VideoCodecProfile output_profile(
457 const media::VideoEncodeAccelerator::Config& input) {
458 return input.output_profile;
459 }
460
Clarissa Garvey76708b62021-06-30 22:53:26461 static const media::Bitrate& bitrate(
Pin-chih Line6ff3d972018-07-27 11:15:04462 const media::VideoEncodeAccelerator::Config& input) {
Clarissa Garvey76708b62021-06-30 22:53:26463 return input.bitrate;
Pin-chih Line6ff3d972018-07-27 11:15:04464 }
465
Pin-chih Linfc7b5a82018-08-13 05:44:17466 static uint32_t initial_framerate(
467 const media::VideoEncodeAccelerator::Config& input) {
468 return input.initial_framerate.value_or(0);
469 }
470
471 static bool has_initial_framerate(
472 const media::VideoEncodeAccelerator::Config& input) {
473 return input.initial_framerate.has_value();
474 }
475
Fish Lin46827d02019-04-03 03:46:54476 static uint32_t gop_length(
477 const media::VideoEncodeAccelerator::Config& input) {
478 return input.gop_length.value_or(0);
479 }
480
481 static bool has_gop_length(
482 const media::VideoEncodeAccelerator::Config& input) {
483 return input.gop_length.has_value();
484 }
485
Pin-chih Line6ff3d972018-07-27 11:15:04486 static uint8_t h264_output_level(
487 const media::VideoEncodeAccelerator::Config& input) {
488 return input.h264_output_level.value_or(0);
489 }
490
491 static bool has_h264_output_level(
492 const media::VideoEncodeAccelerator::Config& input) {
493 return input.h264_output_level.has_value();
494 }
495
Chunbo Hua738df532020-07-16 16:02:45496 static bool is_constrained_h264(
497 const media::VideoEncodeAccelerator::Config& input) {
498 return input.is_constrained_h264;
499 }
500
Fish Lin752b49192019-05-31 05:04:21501 static media::VideoEncodeAccelerator::Config::StorageType storage_type(
502 const media::VideoEncodeAccelerator::Config& input) {
503 return input.storage_type.value_or(
504 media::VideoEncodeAccelerator::Config::StorageType::kShmem);
505 }
506
507 static bool has_storage_type(
508 const media::VideoEncodeAccelerator::Config& input) {
509 return input.storage_type.has_value();
510 }
511
Erik Språngf5420d12018-09-03 09:09:40512 static media::VideoEncodeAccelerator::Config::ContentType content_type(
513 const media::VideoEncodeAccelerator::Config& input) {
514 return input.content_type;
515 }
516
Hirokazu Honda24e34922023-12-12 13:31:40517 static uint8_t drop_frame_thresh_percentage(
518 const media::VideoEncodeAccelerator::Config& input) {
519 return input.drop_frame_thresh_percentage;
520 }
521
Joey Arhar60b3f6a2020-04-03 21:52:17522 static const std::vector<media::VideoEncodeAccelerator::Config::SpatialLayer>&
523 spatial_layers(const media::VideoEncodeAccelerator::Config& input) {
524 return input.spatial_layers;
525 }
526
Hirokazu Honda4723b5e32023-07-03 00:31:04527 static media::SVCInterLayerPredMode inter_layer_pred(
528 const media::VideoEncodeAccelerator::Config& input) {
Zhaoliang Ma2bae0df2021-06-07 02:58:01529 return input.inter_layer_pred;
530 }
531
Eugene Zemtsovcc675432021-05-19 04:04:30532 static bool require_low_delay(
533 const media::VideoEncodeAccelerator::Config& input) {
534 return input.require_low_delay;
535 }
536
Dale Curtis13f72b72022-11-17 23:37:23537 static media::VideoEncodeAccelerator::Config::EncoderType
538 required_encoder_type(const media::VideoEncodeAccelerator::Config& input) {
539 return input.required_encoder_type;
540 }
541
Pin-chih Line6ff3d972018-07-27 11:15:04542 static bool Read(media::mojom::VideoEncodeAcceleratorConfigDataView input,
543 media::VideoEncodeAccelerator::Config* output);
544};
545
Miguel Casas-Sanchez15e2e592017-07-19 01:45:25546} // namespace mojo
547
Miyoung Shin25bb8c092019-08-03 00:56:57548#endif // MEDIA_MOJO_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_