1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MEDIA_MOJO_MOJOM_VIDEO_ENCODER_INFO_MOJOM_TRAITS_H_
6 #define MEDIA_MOJO_MOJOM_VIDEO_ENCODER_INFO_MOJOM_TRAITS_H_
7 
8 #include "base/containers/span.h"
9 #include "media/mojo/mojom/video_encoder_info.mojom.h"
10 #include "media/video/video_encoder_info.h"
11 #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
12 
13 namespace mojo {
14 
15 template <>
16 class StructTraits<media::mojom::ScalingSettingsDataView,
17                    media::ScalingSettings> {
18  public:
min_qp(const media::ScalingSettings & scaling_settings)19   static int32_t min_qp(const media::ScalingSettings& scaling_settings) {
20     return scaling_settings.min_qp;
21   }
max_qp(const media::ScalingSettings & scaling_settings)22   static int32_t max_qp(const media::ScalingSettings& scaling_settings) {
23     return scaling_settings.max_qp;
24   }
25 
26   static bool Read(media::mojom::ScalingSettingsDataView data,
27                    media::ScalingSettings* out);
28 };
29 
30 template <>
31 class StructTraits<media::mojom::ResolutionBitrateLimitDataView,
32                    media::ResolutionBitrateLimit> {
33  public:
frame_size(const media::ResolutionBitrateLimit & resolution_bitrate_limit)34   static const gfx::Size& frame_size(
35       const media::ResolutionBitrateLimit& resolution_bitrate_limit) {
36     return resolution_bitrate_limit.frame_size;
37   }
min_start_bitrate_bps(const media::ResolutionBitrateLimit & resolution_bitrate_limit)38   static int min_start_bitrate_bps(
39       const media::ResolutionBitrateLimit& resolution_bitrate_limit) {
40     return resolution_bitrate_limit.min_start_bitrate_bps;
41   }
min_bitrate_bps(const media::ResolutionBitrateLimit & resolution_bitrate_limit)42   static int min_bitrate_bps(
43       const media::ResolutionBitrateLimit& resolution_bitrate_limit) {
44     return resolution_bitrate_limit.min_bitrate_bps;
45   }
max_bitrate_bps(const media::ResolutionBitrateLimit & resolution_bitrate_limit)46   static int max_bitrate_bps(
47       const media::ResolutionBitrateLimit& resolution_bitrate_limit) {
48     return resolution_bitrate_limit.max_bitrate_bps;
49   }
50   static bool Read(media::mojom::ResolutionBitrateLimitDataView data,
51                    media::ResolutionBitrateLimit* out);
52 };
53 
54 template <>
55 class StructTraits<media::mojom::VideoEncoderInfoDataView,
56                    media::VideoEncoderInfo> {
57  public:
implementation_name(const media::VideoEncoderInfo & video_encoder_info)58   static const std::string& implementation_name(
59       const media::VideoEncoderInfo& video_encoder_info) {
60     return video_encoder_info.implementation_name;
61   }
supports_native_handle(const media::VideoEncoderInfo & video_encoder_info)62   static bool supports_native_handle(
63       const media::VideoEncoderInfo& video_encoder_info) {
64     return video_encoder_info.supports_native_handle;
65   }
has_trusted_rate_controller(const media::VideoEncoderInfo & video_encoder_info)66   static bool has_trusted_rate_controller(
67       const media::VideoEncoderInfo& video_encoder_info) {
68     return video_encoder_info.has_trusted_rate_controller;
69   }
is_hardware_accelerated(const media::VideoEncoderInfo & video_encoder_info)70   static bool is_hardware_accelerated(
71       const media::VideoEncoderInfo& video_encoder_info) {
72     return video_encoder_info.is_hardware_accelerated;
73   }
supports_simulcast(const media::VideoEncoderInfo & video_encoder_info)74   static bool supports_simulcast(
75       const media::VideoEncoderInfo& video_encoder_info) {
76     return video_encoder_info.supports_simulcast;
77   }
scaling_settings(const media::VideoEncoderInfo & video_encoder_info)78   static const media::ScalingSettings& scaling_settings(
79       const media::VideoEncoderInfo& video_encoder_info) {
80     return video_encoder_info.scaling_settings;
81   }
82   static base::span<const std::vector<uint8_t>,
83                     media::VideoEncoderInfo::kMaxSpatialLayers>
fps_allocation(const media::VideoEncoderInfo & video_encoder_info)84   fps_allocation(const media::VideoEncoderInfo& video_encoder_info) {
85     return base::span<const std::vector<uint8_t>,
86             media::VideoEncoderInfo::kMaxSpatialLayers>(video_encoder_info.fps_allocation);
87   }
88   static const std::vector<media::ResolutionBitrateLimit>&
resolution_bitrate_limits(const media::VideoEncoderInfo & video_encoder_info)89   resolution_bitrate_limits(const media::VideoEncoderInfo& video_encoder_info) {
90     return video_encoder_info.resolution_bitrate_limits;
91   }
92 
93   static bool Read(media::mojom::VideoEncoderInfoDataView data,
94                    media::VideoEncoderInfo* out);
95 };
96 
97 }  // namespace mojo
98 
99 #endif  // MEDIA_MOJO_MOJOM_VIDEO_ENCODER_INFO_MOJOM_TRAITS_H_
100