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