15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef MEDIA_BASE_ANDROID_MEDIA_PLAYER_MANAGER_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MEDIA_BASE_ANDROID_MEDIA_PLAYER_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "media/base/android/demuxer_stream_player_params.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "media/base/media_export.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class MediaPlayerAndroid; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MediaResourceGetter; 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MediaUrlInterceptor; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// This class is responsible for managing active MediaPlayerAndroid objects. 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MEDIA_EXPORT MediaPlayerManager { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~MediaPlayerManager() {} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns a pointer to the MediaResourceGetter object. 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual MediaResourceGetter* GetMediaResourceGetter() = 0; 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns a pointer to the MediaUrlInterceptor object or null. 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual MediaUrlInterceptor* GetMediaUrlInterceptor() = 0; 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when time update messages need to be sent. Args: player ID, 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // current timestamp, current time ticks. 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnTimeUpdate(int player_id, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta current_timestamp, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks current_time_ticks) = 0; 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when media metadata changed. Args: player ID, duration of the 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // media, width, height, whether the metadata is successfully extracted. 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnMediaMetadataChanged( 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int player_id, 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::TimeDelta duration, 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int width, 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int height, 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool success) = 0; 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when playback completed. Args: player ID. 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnPlaybackComplete(int player_id) = 0; 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when media download was interrupted. Args: player ID. 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnMediaInterrupted(int player_id) = 0; 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when buffering has changed. Args: player ID, percentage 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // of the media. 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnBufferingUpdate(int player_id, int percentage) = 0; 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when seek completed. Args: player ID, current time. 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void OnSeekComplete( 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int player_id, 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::TimeDelta& current_time) = 0; 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when error happens. Args: player ID, error type. 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnError(int player_id, int error) = 0; 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Called when video size has changed. Args: player ID, width, height. 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnVideoSizeChanged(int player_id, int width, int height) = 0; 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the player that's in the fullscreen mode currently. 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual MediaPlayerAndroid* GetFullscreenPlayer() = 0; 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the player with the specified id. 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual MediaPlayerAndroid* GetPlayer(int player_id) = 0; 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Called by the player to get a hardware protected surface. 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void RequestFullScreen(int player_id) = 0; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(VIDEO_HOLE) 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns true if a media player should use video-overlay for the embedded 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // encrypted video. 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ShouldUseVideoOverlayForEmbeddedEncryptedVideo() = 0; 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // defined(VIDEO_HOLE) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // MEDIA_BASE_ANDROID_MEDIA_PLAYER_MANAGER_H_ 85