| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| module media.mojom; |
| |
| import "gpu/ipc/common/mailbox_holder.mojom"; |
| import "gpu/ipc/common/vulkan_ycbcr_info.mojom"; |
| import "mojo/public/mojom/base/time.mojom"; |
| import "mojo/public/mojom/base/values.mojom"; |
| import "ui/gfx/geometry/mojom/geometry.mojom"; |
| import "ui/gfx/mojom/buffer_types.mojom"; |
| import "ui/gfx/mojom/color_space.mojom"; |
| |
| // See media/base/audio_codecs.h for descriptions. |
| [Native] |
| enum AudioCodec; |
| |
| // See media/base/buffering_state.h for descriptions. |
| [Native] |
| enum BufferingState; |
| [Native] |
| enum BufferingStateChangeReason; |
| |
| // See media/base/channel_layout.h for descriptions. |
| [Native] |
| enum ChannelLayout; |
| |
| // See media/base/video_types.h for descriptions. |
| [Native] |
| enum ColorSpace; |
| |
| // See media/base/decode_status.h for descriptions. |
| [Native] |
| enum DecodeStatus; |
| |
| // See media/base/media_log_event.h for description. |
| [Native] |
| struct MediaLogEvent; |
| |
| // See media/base/output_device_info.h for descriptions. |
| [Native] |
| enum OutputDeviceStatus; |
| |
| // See media/base/pipeline_status.h for descriptions. |
| [Native] |
| enum PipelineStatus; |
| |
| // See media/base/sample_format.h for descriptions. |
| [Native] |
| enum SampleFormat; |
| |
| // See media/base/video_codecs.h for descriptions. |
| [Native] |
| enum VideoCodec; |
| |
| // See media/base/video_codecs.h for descriptions. |
| [Native] |
| enum VideoCodecProfile; |
| |
| // See media/base/video_types.h for descriptions. |
| [Native] |
| enum VideoPixelFormat; |
| |
| // See media/base/video_transformation.h for descriptions. |
| [Native] |
| enum VideoRotation; |
| |
| // See media/base/video_transformation.h for descriptions. |
| struct VideoTransformation { |
| VideoRotation rotation; |
| bool mirrored; |
| }; |
| |
| // See media/base/waiting.h for descriptions. |
| [Native] |
| enum WaitingReason; |
| |
| // See media/base/watch_time_keys.h for descriptions. |
| [Native] |
| enum WatchTimeKey; |
| |
| // See media/base/container_names.h for descriptions. |
| [Native] |
| enum MediaContainerName; |
| |
| // See media/base/media_status.h for description. |
| [Native] |
| enum MediaStatusState; |
| |
| // This defines a mojo transport format for media::EncryptionPattern |
| // See media/base/encryption_pattern.h for description. |
| struct EncryptionPattern { |
| uint32 crypt_byte_block; |
| uint32 skip_byte_block; |
| }; |
| |
| // See media/base/encryption_scheme.h for description. |
| [Native] |
| enum EncryptionScheme; |
| |
| // This defines a mojo transport format for media::VideoColorSpace. |
| // See media/base/video_color_space.h for description. |
| struct VideoColorSpace { |
| [Native] |
| enum PrimaryID; |
| |
| [Native] |
| enum TransferID; |
| |
| [Native] |
| enum MatrixID; |
| |
| [Native] |
| enum RangeID; |
| |
| PrimaryID primaries; |
| TransferID transfer; |
| MatrixID matrix; |
| RangeID range; |
| }; |
| |
| // This defines a mojo transport format for media::HDRMetadata. |
| // See media/base/hdr_metadata.h for description. |
| struct MasteringMetadata { |
| gfx.mojom.PointF primary_r; |
| gfx.mojom.PointF primary_g; |
| gfx.mojom.PointF primary_b; |
| gfx.mojom.PointF white_point; |
| float luminance_max; |
| float luminance_min; |
| }; |
| |
| struct HDRMetadata { |
| MasteringMetadata mastering_metadata; |
| uint32 max_content_light_level; |
| uint32 max_frame_average_light_level; |
| }; |
| |
| // This defines a mojo transport format for media::AudioDecoderConfig. |
| // See media/base/audio_decoder_config.h for descriptions. |
| struct AudioDecoderConfig { |
| AudioCodec codec; |
| SampleFormat sample_format; |
| ChannelLayout channel_layout; |
| int32 samples_per_second; |
| array<uint8> extra_data; |
| mojo_base.mojom.TimeDelta seek_preroll; |
| int32 codec_delay; |
| EncryptionScheme encryption_scheme; |
| }; |
| |
| // This defines a mojo transport format for media::VideoDecoderConfig. |
| // See media/base/video_decoder_config.h for descriptions. |
| struct VideoDecoderConfig { |
| VideoCodec codec; |
| VideoCodecProfile profile; |
| bool has_alpha; |
| VideoTransformation transformation; |
| gfx.mojom.Size coded_size; |
| gfx.mojom.Rect visible_rect; |
| gfx.mojom.Size natural_size; |
| array<uint8> extra_data; |
| EncryptionScheme encryption_scheme; |
| VideoColorSpace color_space_info; |
| HDRMetadata? hdr_metadata; |
| }; |
| |
| // Native struct media::SubsampleEntry; |
| [Native] |
| struct SubsampleEntry; |
| |
| // This defines a mojo transport format for media::DecryptConfig. |
| // See media/base/decrypt_config.h for descriptions. |
| struct DecryptConfig { |
| EncryptionScheme encryption_scheme; |
| string key_id; |
| string iv; |
| array<SubsampleEntry> subsamples; |
| EncryptionPattern? encryption_pattern; |
| }; |
| |
| // This defines a mojo transport format for media::DecoderBuffer. |
| struct DecoderBuffer { |
| mojo_base.mojom.TimeDelta timestamp; |
| mojo_base.mojom.TimeDelta duration; |
| |
| // Whether the buffer is an end-of-stream (EOS) buffer. |
| bool is_end_of_stream; |
| |
| // The number of bytes present in this buffer. The data is not serialized |
| // along with this structure and must be read from a separate DataPipe. |
| // Note that |data_size| could be zero even for a non-EOS buffer (e.g. |
| // with non-empty |size_data|). See http://crbug.com/663438 |
| uint32 data_size; |
| |
| // Indicates whether or not this buffer is a random access point. |
| bool is_key_frame; |
| |
| // Empty when |side_data| doesn't exist. |
| array<uint8> side_data; |
| |
| // DecryptConfig for a encrypted buffer. NULL if the buffer is not encrypted. |
| DecryptConfig? decrypt_config; |
| |
| // These fields indicate the amount of data to discard after decoding. |
| mojo_base.mojom.TimeDelta front_discard; |
| mojo_base.mojom.TimeDelta back_discard; |
| }; |
| |
| // This defines a mojo transport format for media::AudioBuffer. |
| struct AudioBuffer { |
| // Format of the audio. |
| SampleFormat sample_format; |
| |
| // How the channels are laid out. |
| ChannelLayout channel_layout; |
| |
| // Number of channels. |
| int32 channel_count; |
| |
| // Sample rate of the buffer. |
| int32 sample_rate; |
| |
| // Number of frames in the buffer. |
| int32 frame_count; |
| |
| // True if end of stream. |
| bool end_of_stream; |
| |
| // Timestamp in microseconds of the first frame. |
| mojo_base.mojom.TimeDelta timestamp; |
| |
| // Channel data. Will be empty for EOS buffers. |
| array<uint8> data; |
| }; |
| |
| // This defines a mojo transport format for media::VideoFrame. |
| struct VideoFrame { |
| // Format of the frame. |
| VideoPixelFormat format; |
| |
| // Width and height of the video frame, in pixels. |
| gfx.mojom.Size coded_size; |
| |
| // Visible size of the frame. |
| gfx.mojom.Rect visible_rect; |
| |
| // Natural size of the frame. |
| gfx.mojom.Size natural_size; |
| |
| // Timestamp in microseconds of the associated frame. |
| mojo_base.mojom.TimeDelta timestamp; |
| |
| // Contents of the video frame (or EOS marker). |
| VideoFrameData data; |
| |
| // Extra properties associated with the VideoFrame. |
| mojo_base.mojom.DictionaryValue metadata; |
| |
| gfx.mojom.ColorSpace color_space; |
| }; |
| |
| // Possible choices for storing VideoFrame data. |
| union VideoFrameData { |
| EosVideoFrameData eos_data; |
| SharedBufferVideoFrameData shared_buffer_data; |
| DmabufVideoFrameData dmabuf_data; |
| GpuMemoryBufferVideoFrameData gpu_memory_buffer_data; |
| MailboxVideoFrameData mailbox_data; |
| }; |
| |
| // A marker for EOS frames. |
| struct EosVideoFrameData { |
| }; |
| |
| // This defines video frame data stored in a Mojo shared buffer. |
| struct SharedBufferVideoFrameData { |
| // Reference to the shared memory containing the frame's data. |
| handle<shared_buffer> frame_data; |
| uint64 frame_data_size; |
| |
| // Stride and offsets for each plane. Offsets are relative to the start |
| // of |frame_data|. |
| int32 y_stride; |
| int32 u_stride; |
| int32 v_stride; |
| uint64 y_offset; |
| uint64 u_offset; |
| uint64 v_offset; |
| }; |
| |
| // This defines video frame data stored in dmabuf. |
| struct DmabufVideoFrameData { |
| // Size depends on media::VideoFrame::NumPlanes with frame format. |
| array<handle> dmabuf_fds; |
| }; |
| |
| struct GpuMemoryBufferVideoFrameData { |
| gfx.mojom.GpuMemoryBufferHandle gpu_memory_buffer_handle; |
| array<gpu.mojom.MailboxHolder, 4> mailbox_holder; |
| }; |
| |
| // This defines video frame data stored in texture mailboxes. |
| struct MailboxVideoFrameData { |
| // Size must be kept in sync with media::VideoFrame::kMaxPlanes. |
| array<gpu.mojom.MailboxHolder, 4> mailbox_holder; |
| gpu.mojom.VulkanYCbCrInfo? ycbcr_data; |
| }; |
| |
| struct PipelineStatistics { |
| uint64 audio_bytes_decoded; |
| uint64 video_bytes_decoded; |
| uint32 video_frames_decoded; |
| uint32 video_frames_dropped; |
| int64 audio_memory_usage; |
| int64 video_memory_usage; |
| }; |
| |
| // Set of features for MediaCapabilities prediction. |
| // TODO(liberato): consider generalizing this. |
| struct PredictionFeatures { |
| // It would be nice to initialize this to VIDEO_CODEC_PROFILE_UNKNOWN (-1), |
| // but we can't do that with native enums. |
| VideoCodecProfile profile; |
| gfx.mojom.Size video_size; |
| // Frames per second may ultimately be a bucketed as an integer, but we want |
| // to do that as late as possible. Using a double avoids early truncation. |
| double frames_per_sec = 0; |
| // Name of the key system used for EME playbacks. |
| string key_system; |
| // Indicates when CDM will use HW secure decoding for EME playbacks. |
| bool use_hw_secure_codecs = false; |
| }; |
| |
| // Target values for MediaCapabilities predictions. |
| // TODO(liberato): consider generalizing this. |
| struct PredictionTargets { |
| uint32 frames_decoded = 0; |
| uint32 frames_dropped = 0; |
| uint32 frames_power_efficient = 0; |
| }; |
| |
| // See media/base/pipeline/status.h for descriptions. |
| struct PipelineDecoderInfo { |
| string decoder_name; |
| bool is_platform_decoder = false; |
| bool has_decrypting_demuxer_stream = false; |
| }; |