| // 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 "mojo/common/time.mojom"; |
| import "ui/gfx/geometry/mojo/geometry.mojom"; |
| |
| // See media/base/buffering_state.h for descriptions. |
| [Native] |
| enum BufferingState; |
| |
| // See media/base/decode_status.h for descriptions. |
| [Native] |
| enum DecodeStatus; |
| |
| // See media/base/audio_codecs.h for descriptions. |
| [Native] |
| enum AudioCodec; |
| |
| // See media/base/channel_layout.h for descriptions. |
| [Native] |
| enum ChannelLayout; |
| |
| // See media/base/sample_format.h for descriptions. |
| [Native] |
| enum SampleFormat; |
| |
| // See media/base/video_types.h for descriptions. |
| [Native] |
| enum VideoPixelFormat; |
| |
| // See media/base/video_types.h for descriptions. |
| [Native] |
| enum ColorSpace; |
| |
| // See media/base/video_codecs.h for descriptions. |
| [Native] |
| enum VideoCodec; |
| |
| // See media/base/video_codecs.h for descriptions. |
| [Native] |
| enum VideoCodecProfile; |
| |
| // This defines a mojo transport format for media::EncryptionScheme::Pattern |
| // See media/base/encryption_scheme.h for description. |
| struct Pattern { |
| uint32 encrypt_blocks; |
| uint32 skip_blocks; |
| }; |
| |
| // This defines a mojo transport format for media::EncryptionScheme. |
| // See media/base/encryption_scheme.h for description. |
| struct EncryptionScheme { |
| [Native] |
| enum CipherMode; |
| |
| CipherMode mode; |
| Pattern pattern; |
| }; |
| |
| // 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.common.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; |
| VideoPixelFormat format; |
| ColorSpace color_space; |
| gfx.mojom.Size coded_size; |
| gfx.mojom.Rect visible_rect; |
| gfx.mojom.Size natural_size; |
| array<uint8> extra_data; |
| EncryptionScheme encryption_scheme; |
| }; |
| |
| // 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 { |
| string key_id; |
| string iv; |
| array<SubsampleEntry> subsamples; |
| }; |
| |
| // This defines a mojo transport format for media::DecoderBuffer. |
| struct DecoderBuffer { |
| mojo.common.mojom.TimeDelta timestamp; |
| mojo.common.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.common.mojom.TimeDelta front_discard; |
| mojo.common.mojom.TimeDelta back_discard; |
| |
| // Indicates this buffer is part of a splice around |splice_timestamp|. |
| mojo.common.mojom.TimeDelta splice_timestamp; |
| }; |
| |
| // 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.common.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; |
| |
| // True if end of stream. |
| bool end_of_stream; |
| |
| // Timestamp in microseconds of the associated frame. |
| mojo.common.mojom.TimeDelta timestamp; |
| |
| // Contents of the video frame. |
| VideoFrameData data; |
| }; |
| |
| // Possible choices for storing VideoFrame data. |
| union VideoFrameData { |
| SharedBufferVideoFrameData shared_buffer_data; |
| MailboxVideoFrameData mailbox_data; |
| }; |
| |
| // 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 texture mailboxes. |
| struct MailboxVideoFrameData { |
| array<gpu.mojom.MailboxHolder> mailbox_holder; |
| }; |
| |
| 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; |
| }; |