| // Copyright 2015 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/interfaces/audio_decoder.mojom"; |
| import "media/mojo/interfaces/cdm_proxy.mojom"; |
| import "media/mojo/interfaces/decryptor.mojom"; |
| import "media/mojo/interfaces/content_decryption_module.mojom"; |
| import "media/mojo/interfaces/renderer.mojom"; |
| import "media/mojo/interfaces/video_decoder.mojom"; |
| |
| // Defines the types of renderers that can be hosted by a mojo Renderer. |
| enum HostedRendererType { |
| // media::DefaultRenderer: Used to offload normal rendering scenarios to a |
| // different process, for stability or performance reasons. |
| kDefault, |
| |
| // content::MediaPlayerRenderer: Used to handle HLS videos on Android. Also |
| // used on older Android devices, that don't have platform decode support, and |
| // are better off using the native Android MediaPlayer. |
| [EnableIf=is_android] |
| kMediaPlayer, |
| |
| // content::FlingingRenderer: Used to control a CastSession, in the context |
| // of RemotePlayback. The CastSession must have already been started via the |
| // PresentationService. This renderer does not actually render anything on the |
| // local device, but instead serves as a link to/from media content playing on |
| // a cast device. |
| [EnableIf=is_android] |
| kFlinging, |
| }; |
| |
| // A factory for creating media mojo interfaces. Renderers can only access |
| // ContentDecryptionModules created with the same factory. |
| interface InterfaceFactory { |
| CreateAudioDecoder(AudioDecoder& audio_decoder); |
| CreateVideoDecoder(VideoDecoder& video_decoder); |
| |
| // Creates a Renderer, using |type| to choose which concrete media::Renderer |
| // implementation to host. Different values of |type| might affect how the |
| // request is ultimately routed (i.e. |type| will determine in which process |
| // the mojom::Renderer is created). |
| // |type_specific_id| represents a different kind of ID, based off of |type|. |
| // The usage of |type_specific_id| per |type| is defined as follows: |
| // - kDefault: represents an audio device ID, which is defined in |
| // media/audio/audio_device_description.h. |
| // If |type_specific_id| is empty, kDefaultDeviceId will be used. |
| // - kMediaPlayer: unused. |
| // - kFlinging: represents a PresentationID for a session that has already |
| // been started. If the ID cannot be found (e.g. the session has already |
| // ended), CreateRenderer will be a no-op. |
| CreateRenderer(HostedRendererType type, string type_specific_id, |
| Renderer& renderer); |
| |
| // Creates a CDM based on the |key_system| provided. A |key_system| is a |
| // generic term for a decryption mechanism and/or content protection provider. |
| // It should be a reverse domain name, e.g. "com.example.somesystem". However, |
| // this call may be initiated by an untrusted process (e.g. renderer), so the |
| // implementation must fully validate |key_system| before creating the CDM. |
| CreateCdm(string key_system, ContentDecryptionModule& cdm); |
| |
| // Creates a Decryptor associated with the |cdm_id|. |
| CreateDecryptor(int32 cdm_id, Decryptor& decryptor); |
| |
| // Creates a CdmProxy that proxies part of CDM functionalities to a different |
| // entity, e.g. hardware CDM modules. The created |cdm_proxy| must match the |
| // type of the CDM, identified by |cdm_guid|. |
| // TODO(crbug.com/676224): Conditionally enable this when EnabledIf attribute |
| // is supported in mojom files. |
| // TODO(xhwang): Add a helper type for GUID to avoid passing string here. |
| CreateCdmProxy(string cdm_guid, CdmProxy& cdm_proxy); |
| }; |