Avi Drissman | d387f092 | 2022-09-14 20:51:31 | [diff] [blame] | 1 | // Copyright 2020 The Chromium Authors |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 2 | // 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 Drissman | d70f89a | 2023-01-11 23:52:55 | [diff] [blame] | 9 | #include "base/functional/callback_helpers.h" |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 10 | #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 | |
| 15 | namespace mojo { |
| 16 | |
Arthur Sonzogni | 581b9e8 | 2024-01-30 17:25:15 | [diff] [blame] | 17 | // Deserializes has_field and field into a std::optional. |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 18 | #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 Sonzogni | 581b9e8 | 2024-01-30 17:25:15 | [diff] [blame] | 23 | std::optional<type> field; \ |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 24 | if (!input.Read##FieldInCamelCase(&field)) \ |
| 25 | return false; \ |
| 26 | \ |
| 27 | output->field = field |
| 28 | |
| 29 | // static |
| 30 | bool 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 Alon | b3ecca84 | 2023-10-23 06:46:55 | [diff] [blame] | 36 | output->sub_capture_target_version = input.sub_capture_target_version(); |
Paul Irish | 4bde367 | 2023-11-28 03:24:05 | [diff] [blame] | 37 | output->frame_sequence = input.frame_sequence(); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 38 | |
| 39 | // bool. |
| 40 | output->allow_overlay = input.allow_overlay(); |
Saifuddin Hitawala | 20f8c30 | 2022-06-01 02:06:14 | [diff] [blame] | 41 | output->copy_required = input.copy_required(); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 42 | 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 Green | bbaff3f | 2024-01-17 21:14:54 | [diff] [blame] | 47 | output->needs_detiling = input.needs_detiling(); |
jchen10 | 5adbf3b | 2022-04-06 10:39:13 | [diff] [blame] | 48 | output->is_webgpu_compatible = input.is_webgpu_compatible(); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 49 | 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 Curtis | 9d7f919 | 2021-07-17 00:36:59 | [diff] [blame] | 52 | output->texture_origin_is_top_left = input.texture_origin_is_top_left(); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 53 | |
| 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 Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 60 | DESERIALIZE_INTO_OPT(frame_rate); |
| 61 | DESERIALIZE_INTO_OPT(rtp_timestamp); |
| 62 | |
Dale Curtis | b8b334a | 2021-02-02 03:30:23 | [diff] [blame] | 63 | READ_AND_ASSIGN_OPT(media::VideoTransformation, transformation, |
| 64 | Transformation); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 65 | |
| 66 | READ_AND_ASSIGN_OPT(base::UnguessableToken, overlay_plane_id, OverlayPlaneId); |
| 67 | |
Klaus Weidner | b3a3859e | 2022-06-15 05:41:24 | [diff] [blame] | 68 | READ_AND_ASSIGN_OPT(gfx::Size, source_size, SourceSize); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 69 | READ_AND_ASSIGN_OPT(gfx::Rect, capture_update_rect, CaptureUpdateRect); |
Elad Alon | c8e3bdd | 2022-02-11 19:08:33 | [diff] [blame] | 70 | READ_AND_ASSIGN_OPT(gfx::Rect, region_capture_rect, RegionCaptureRect); |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 71 | |
| 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 Irish | 4bde367 | 2023-11-28 03:24:05 | [diff] [blame] | 84 | output->frame_sequence = input.frame_sequence(); |
| 85 | |
Thomas Guilbert | e796561 | 2020-06-18 23:21:51 | [diff] [blame] | 86 | return true; |
| 87 | } |
| 88 | |
Klaus Weidner | b3a3859e | 2022-06-15 05:41:24 | [diff] [blame] | 89 | } // namespace mojo |