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