| // 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 "media/mojo/mojom/media_types.mojom"; |
| |
| // Interface for decrypting (and decoding) encrypted streams. |
| // See media/base/decryptor.h for details. |
| // TODO(crbug.com/794326): Deduplicate this interface with audio_decoder.mojom |
| // and audio_decoder.mojom. |
| interface Decryptor { |
| // Status of a decrypt or decrypt-and-decode operation. See decryptor.h for |
| // descriptions. |
| [Native] |
| enum Status; |
| |
| // Stream type (audio/video). See decryptor.h for descriptions. |
| [Native] |
| enum StreamType; |
| |
| // Pass three data pipes used to transfer compressed DecoderBuffer data for |
| // DecryptAndDecodeAudio(), and DecryptAndDecodeVideo() and Decrypt(), |
| // respectively, and one data pipe to receive DecoderBuffer data for decrypt |
| // result passed back in OnDecryptDone() calls. |
| // This method must be called before any methods listed are called. |
| Initialize(handle<data_pipe_consumer> audio_pipe, |
| handle<data_pipe_consumer> video_pipe, |
| handle<data_pipe_consumer> decrypt_pipe, |
| handle<data_pipe_producer> decrypted_pipe); |
| |
| // Decrypts the |encrypted| buffer and returns the decrypt |status| and |
| // decrypted |buffer|. |
| // At most one decrypt call is allowed at any time for a |stream_type|. |
| Decrypt(StreamType stream_type, DecoderBuffer encrypted) |
| => (Status status, DecoderBuffer? buffer); |
| |
| // Cancels any pending decrypt for |stream_type| with SUCCESS. |
| CancelDecrypt(StreamType stream_type); |
| |
| // Initializes a decoder with the given |config|. Returns whether the |
| // initialization succeeded. |
| InitializeAudioDecoder(AudioDecoderConfig config) => (bool success); |
| InitializeVideoDecoder(VideoDecoderConfig config) => (bool success); |
| |
| // Decrypts and decodes the |encrypted| buffer and returns the |status| and |
| // the decrypted |audio_buffers| or |video_frame|. |
| // At end-of-stream, this method should be called repeatedly with |
| // end-of-stream |encrypted| until no buffer/frame can be produced. |
| // These methods can only be called after the corresponding decoder has |
| // been successfully initialized. |
| // At most one decrypt-and-decode call is allowed at any time for a |
| // |stream_type|. |
| // For video, |releaser| must be closed (if it is bound) when the VideoFrame |
| // is no longer needed so that any shared resources can be reused. |
| DecryptAndDecodeAudio(DecoderBuffer encrypted) |
| => (Status status, array<AudioBuffer> audio_buffers); |
| DecryptAndDecodeVideo(DecoderBuffer encrypted) |
| => (Status status, |
| VideoFrame? video_frame, |
| pending_remote<FrameResourceReleaser>? releaser); |
| |
| // Resets the decoder for |stream_type| to a clean initialized state and |
| // cancels any pending decrypt-and-decode operations immediately with ERROR. |
| // This method can only be called after the corresponding decoder has been |
| // successfully initialized. |
| ResetDecoder(StreamType stream_type); |
| |
| // Releases decoder resources, deinitializes the decoder, aborts any pending |
| // initialization (with false) or decrypt-and-decode (with ERROR) for |
| // |stream_type| immediately. |
| // This method can be called any time after Initialize{Audio|Video}Decoder() |
| // has been called (with the correct stream type). |
| // After this operation, the decoder is set to an uninitialized state. |
| // The decoder can be reinitialized after it is deinitialized. |
| DeinitializeDecoder(StreamType stream_type); |
| }; |
| |
| // Interface for controlling the the resources associated with a VideoFrame. |
| // This is returned when calling DecryptAndDecodeVideo(), and the connection |
| // (if it exists) should be closed when the VideoFrame is no longer needed in |
| // order to reuse the shared resources associated with the VideoFrame. |
| interface FrameResourceReleaser {}; |