| Index: content/browser/media/android/media_player_renderer.h
|
| diff --git a/content/browser/media/android/media_player_renderer.h b/content/browser/media/android/media_player_renderer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..42c2decfa8119366a351593b3c859e845644a24a
|
| --- /dev/null
|
| +++ b/content/browser/media/android/media_player_renderer.h
|
| @@ -0,0 +1,115 @@
|
| +// Copyright 2016 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.
|
| +
|
| +#ifndef CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_PLAYER_RENDERER_H_
|
| +#define CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_PLAYER_RENDERER_H_
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "content/common/content_export.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| +#include "media/base/android/media_player_bridge.h"
|
| +#include "media/base/android/media_player_manager.h"
|
| +#include "media/base/demuxer_stream_provider.h"
|
| +#include "media/base/media_log.h"
|
| +#include "media/base/renderer.h"
|
| +#include "media/base/renderer_client.h"
|
| +#include "url/gurl.h"
|
| +
|
| +namespace content {
|
| +
|
| +// MediaPlayerRenderer bridges the media::Renderer and Android MediaPlayer
|
| +// interfaces. It owns a MediaPlayerBridge, which exposes c++ methods to call
|
| +// into a native Android MediaPlayer.
|
| +//
|
| +// Each MediaPlayerRenderer is associated with one MediaPlayerRendererClient,
|
| +// living in WMPI in the Renderer process.
|
| +//
|
| +// N.B: MediaPlayerRenderer implements MediaPlayerManager, since
|
| +// MediaPlayerBridge is tightly coupled with the manager abstraction.
|
| +// |player_id| is ignored in all MediaPlayerManager calls, as there is only one
|
| +// MediaPlayer per MediaPlayerRenderer.
|
| +//
|
| +// TODO(tguilbert): Remove the MediaPlayerManager implementation and update
|
| +// MediaPlayerBridge, once WMPA has been deleted. See http://crbug.com/580626
|
| +class CONTENT_EXPORT MediaPlayerRenderer : public media::Renderer,
|
| + public media::MediaPlayerManager {
|
| + public:
|
| + explicit MediaPlayerRenderer(content::RenderFrameHost* render_frame_host);
|
| +
|
| + ~MediaPlayerRenderer() override;
|
| +
|
| + // media::Renderer implementation
|
| + void Initialize(media::DemuxerStreamProvider* demuxer_stream_provider,
|
| + media::RendererClient* client,
|
| + const media::PipelineStatusCB& init_cb) override;
|
| + void SetCdm(media::CdmContext* cdm_context,
|
| + const media::CdmAttachedCB& cdm_attached_cb) override;
|
| + void Flush(const base::Closure& flush_cb) override;
|
| + void StartPlayingFrom(base::TimeDelta time) override;
|
| +
|
| + // N.B: MediaPlayerBridge doesn't support variable playback rates (but it
|
| + // could be exposed from MediaPlayer in the future). For the moment:
|
| + // - If |playback_rate| is 0, we pause the video.
|
| + // - For other |playback_rate| values, we start playing at 1x speed.
|
| + void SetPlaybackRate(double playback_rate) override;
|
| + void SetVolume(float volume) override;
|
| + base::TimeDelta GetMediaTime() override;
|
| + bool HasAudio() override;
|
| + bool HasVideo() override;
|
| +
|
| + // media::MediaPlayerManager implementation
|
| + media::MediaResourceGetter* GetMediaResourceGetter() override;
|
| + media::MediaUrlInterceptor* GetMediaUrlInterceptor() override;
|
| + void OnTimeUpdate(int player_id,
|
| + base::TimeDelta current_timestamp,
|
| + base::TimeTicks current_time_ticks) override;
|
| + void OnMediaMetadataChanged(int player_id,
|
| + base::TimeDelta duration,
|
| + int width,
|
| + int height,
|
| + bool success) override;
|
| + void OnPlaybackComplete(int player_id) override;
|
| + void OnMediaInterrupted(int player_id) override;
|
| + void OnBufferingUpdate(int player_id, int percentage) override;
|
| + void OnSeekComplete(int player_id,
|
| + const base::TimeDelta& current_time) override;
|
| + void OnError(int player_id, int error) override;
|
| + void OnVideoSizeChanged(int player_id, int width, int height) override;
|
| + void OnWaitingForDecryptionKey(int player_id) override;
|
| + media::MediaPlayerAndroid* GetFullscreenPlayer() override;
|
| + media::MediaPlayerAndroid* GetPlayer(int player_id) override;
|
| + bool RequestPlay(int player_id,
|
| + base::TimeDelta duration,
|
| + bool has_audio) override;
|
| +
|
| + private:
|
| + // Used when creating |media_player_|.
|
| + void OnDecoderResourcesReleased(int player_id);
|
| +
|
| + RenderFrameHost* render_frame_host_;
|
| + media::RendererClient* renderer_client_;
|
| +
|
| + std::unique_ptr<media::MediaPlayerBridge> media_player_;
|
| +
|
| + // Current duration of the media.
|
| + base::TimeDelta duration_;
|
| +
|
| + // Indicates if a serious error has been encountered by the |media_player_|.
|
| + bool has_error_;
|
| +
|
| + gfx::Size video_size_;
|
| +
|
| + std::unique_ptr<media::MediaResourceGetter> media_resource_getter_;
|
| +
|
| + // NOTE: Weak pointers must be invalidated before all other member variables.
|
| + base::WeakPtrFactory<MediaPlayerRenderer> weak_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MediaPlayerRenderer);
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| +#endif // CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_PLAYER_RENDERER_H_
|
|
|