[go: nahoru, domu]

blob: b73e57fe458931c587f51a89866b6f5e619ebfe4 [file] [log] [blame]
Avi Drissmand387f0922022-09-14 20:51:311// Copyright 2020 The Chromium Authors
Thomas Guilberte7965612020-06-18 23:21:512// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "media/mojo/mojom/video_frame_metadata_mojom_traits.h"
6
7#include <utility>
8
Avi Drissmand70f89a2023-01-11 23:52:559#include "base/functional/callback_helpers.h"
Thomas Guilberte7965612020-06-18 23:21:5110#include "base/logging.h"
11#include "build/build_config.h"
12#include "mojo/public/cpp/base/time_mojom_traits.h"
13#include "mojo/public/cpp/base/unguessable_token_mojom_traits.h"
14
15namespace mojo {
16
Arthur Sonzogni581b9e82024-01-30 17:25:1517// Deserializes has_field and field into a std::optional.
Thomas Guilberte7965612020-06-18 23:21:5118#define DESERIALIZE_INTO_OPT(field) \
19 if (input.has_##field()) \
20 output->field = input.field()
21
22#define READ_AND_ASSIGN_OPT(type, field, FieldInCamelCase) \
Arthur Sonzogni581b9e82024-01-30 17:25:1523 std::optional<type> field; \
Thomas Guilberte7965612020-06-18 23:21:5124 if (!input.Read##FieldInCamelCase(&field)) \
25 return false; \
26 \
27 output->field = field
28
29// static
30bool StructTraits<media::mojom::VideoFrameMetadataDataView,
31 media::VideoFrameMetadata>::
32 Read(media::mojom::VideoFrameMetadataDataView input,
33 media::VideoFrameMetadata* output) {
34 // int.
35 DESERIALIZE_INTO_OPT(capture_counter);
Elad Alonb3ecca842023-10-23 06:46:5536 output->sub_capture_target_version = input.sub_capture_target_version();
Paul Irish4bde3672023-11-28 03:24:0537 output->frame_sequence = input.frame_sequence();
Thomas Guilberte7965612020-06-18 23:21:5138
39 // bool.
40 output->allow_overlay = input.allow_overlay();
Saifuddin Hitawala20f8c302022-06-01 02:06:1441 output->copy_required = input.copy_required();
Thomas Guilberte7965612020-06-18 23:21:5142 output->end_of_stream = input.end_of_stream();
43 output->texture_owner = input.texture_owner();
44 output->wants_promotion_hint = input.wants_promotion_hint();
45 output->protected_video = input.protected_video();
46 output->hw_protected = input.hw_protected();
Justin Greenbbaff3f2024-01-17 21:14:5447 output->needs_detiling = input.needs_detiling();
jchen105adbf3b2022-04-06 10:39:1348 output->is_webgpu_compatible = input.is_webgpu_compatible();
Thomas Guilberte7965612020-06-18 23:21:5149 output->power_efficient = input.power_efficient();
50 output->read_lock_fences_enabled = input.read_lock_fences_enabled();
51 output->interactive_content = input.interactive_content();
Dale Curtis9d7f9192021-07-17 00:36:5952 output->texture_origin_is_top_left = input.texture_origin_is_top_left();
Thomas Guilberte7965612020-06-18 23:21:5153
54 // double.
55 DESERIALIZE_INTO_OPT(device_scale_factor);
56 DESERIALIZE_INTO_OPT(page_scale_factor);
57 DESERIALIZE_INTO_OPT(root_scroll_offset_x);
58 DESERIALIZE_INTO_OPT(root_scroll_offset_y);
59 DESERIALIZE_INTO_OPT(top_controls_visible_height);
Thomas Guilberte7965612020-06-18 23:21:5160 DESERIALIZE_INTO_OPT(frame_rate);
61 DESERIALIZE_INTO_OPT(rtp_timestamp);
62
Dale Curtisb8b334a2021-02-02 03:30:2363 READ_AND_ASSIGN_OPT(media::VideoTransformation, transformation,
64 Transformation);
Thomas Guilberte7965612020-06-18 23:21:5165
66 READ_AND_ASSIGN_OPT(base::UnguessableToken, overlay_plane_id, OverlayPlaneId);
67
Klaus Weidnerb3a3859e2022-06-15 05:41:2468 READ_AND_ASSIGN_OPT(gfx::Size, source_size, SourceSize);
Thomas Guilberte7965612020-06-18 23:21:5169 READ_AND_ASSIGN_OPT(gfx::Rect, capture_update_rect, CaptureUpdateRect);
Elad Alonc8e3bdd2022-02-11 19:08:3370 READ_AND_ASSIGN_OPT(gfx::Rect, region_capture_rect, RegionCaptureRect);
Thomas Guilberte7965612020-06-18 23:21:5171
72 READ_AND_ASSIGN_OPT(base::TimeTicks, receive_time, ReceiveTime);
73 READ_AND_ASSIGN_OPT(base::TimeTicks, capture_begin_time, CaptureBeginTime);
74 READ_AND_ASSIGN_OPT(base::TimeTicks, capture_end_time, CaptureEndTime);
75 READ_AND_ASSIGN_OPT(base::TimeTicks, decode_begin_time, DecodeBeginTime);
76 READ_AND_ASSIGN_OPT(base::TimeTicks, decode_end_time, DecodeEndTime);
77 READ_AND_ASSIGN_OPT(base::TimeTicks, reference_time, ReferenceTime);
78
79 READ_AND_ASSIGN_OPT(base::TimeDelta, processing_time, ProcessingTime);
80 READ_AND_ASSIGN_OPT(base::TimeDelta, frame_duration, FrameDuration);
81 READ_AND_ASSIGN_OPT(base::TimeDelta, wallclock_frame_duration,
82 WallclockFrameDuration);
83
Paul Irish4bde3672023-11-28 03:24:0584 output->frame_sequence = input.frame_sequence();
85
Thomas Guilberte7965612020-06-18 23:21:5186 return true;
87}
88
Klaus Weidnerb3a3859e2022-06-15 05:41:2489} // namespace mojo