Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: webkit/renderer/media/webmediaplayer_impl.h

Issue 18123002: Migrate webkit/renderer/media/ to content/renderer/media/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: delegates Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/renderer/media/webmediaplayer_impl.h
diff --git a/webkit/renderer/media/webmediaplayer_impl.h b/webkit/renderer/media/webmediaplayer_impl.h
deleted file mode 100644
index b2ec010460ce5fbca4d51e07a5634d8c66aba3e8..0000000000000000000000000000000000000000
--- a/webkit/renderer/media/webmediaplayer_impl.h
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright 2013 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.
-
-// Delegate calls from WebCore::MediaPlayerPrivate to Chrome's video player.
-// It contains Pipeline which is the actual media player pipeline, it glues
-// the media player pipeline, data source, audio renderer and renderer.
-// Pipeline would creates multiple threads and access some public methods
-// of this class, so we need to be extra careful about concurrent access of
-// methods and members.
-//
-// Other issues:
-// During tear down of the whole browser or a tab, the DOM tree may not be
-// destructed nicely, and there will be some dangling media threads trying to
-// the main thread, so we need this class to listen to destruction event of the
-// main thread and cleanup the media threads when the even is received. Also
-// at destruction of this class we will need to unhook it from destruction event
-// list of the main thread.
-
-#ifndef WEBKIT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
-#define WEBKIT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
-
-#include <string>
-
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/threading/thread.h"
-#include "cc/layers/video_frame_provider.h"
-#include "googleurl/src/gurl.h"
-#include "media/base/audio_renderer_sink.h"
-#include "media/base/decryptor.h"
-#include "media/base/media_keys.h"
-#include "media/base/pipeline.h"
-#include "media/base/text_track.h"
-#include "media/filters/gpu_video_decoder.h"
-#include "media/filters/skcanvas_video_renderer.h"
-#include "skia/ext/platform_canvas.h"
-#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
-#include "third_party/WebKit/public/web/WebAudioSourceProvider.h"
-#include "third_party/WebKit/public/web/WebMediaPlayer.h"
-#include "third_party/WebKit/public/web/WebMediaPlayerClient.h"
-#include "webkit/renderer/media/crypto/proxy_decryptor.h"
-
-class RenderAudioSourceProvider;
-
-namespace WebKit {
-class WebFrame;
-}
-
-namespace base {
-class MessageLoopProxy;
-}
-
-namespace media {
-class ChunkDemuxer;
-class FFmpegDemuxer;
-class MediaLog;
-}
-
-namespace webkit {
-class WebLayerImpl;
-}
-
-namespace webkit_media {
-
-class BufferedDataSource;
-class MediaStreamClient;
-class WebAudioSourceProviderImpl;
-class WebMediaPlayerDelegate;
-class WebMediaPlayerParams;
-class WebTextTrackImpl;
-
-class WebMediaPlayerImpl
- : public WebKit::WebMediaPlayer,
- public cc::VideoFrameProvider,
- public base::MessageLoop::DestructionObserver,
- public base::SupportsWeakPtr<WebMediaPlayerImpl> {
- public:
- // Constructs a WebMediaPlayer implementation using Chromium's media stack.
- //
- // |delegate| may be null.
- WebMediaPlayerImpl(
- WebKit::WebFrame* frame,
- WebKit::WebMediaPlayerClient* client,
- base::WeakPtr<WebMediaPlayerDelegate> delegate,
- const WebMediaPlayerParams& params);
- virtual ~WebMediaPlayerImpl();
-
- virtual void load(const WebKit::WebURL& url, CORSMode cors_mode);
- virtual void load(const WebKit::WebURL& url,
- WebKit::WebMediaSource* media_source,
- CORSMode cors_mode);
-
- // Playback controls.
- virtual void play();
- virtual void pause();
- virtual bool supportsFullscreen() const;
- virtual bool supportsSave() const;
- virtual void seek(double seconds);
- virtual void setRate(double rate);
- virtual void setVolume(double volume);
- virtual void setPreload(WebKit::WebMediaPlayer::Preload preload);
- virtual const WebKit::WebTimeRanges& buffered();
- virtual double maxTimeSeekable() const;
-
- // Methods for painting.
- virtual void paint(WebKit::WebCanvas* canvas,
- const WebKit::WebRect& rect,
- unsigned char alpha);
-
- // True if the loaded media has a playable video/audio track.
- virtual bool hasVideo() const;
- virtual bool hasAudio() const;
-
- // Dimensions of the video.
- virtual WebKit::WebSize naturalSize() const;
-
- // Getters of playback state.
- virtual bool paused() const;
- virtual bool seeking() const;
- virtual double duration() const;
- virtual double currentTime() const;
-
- // Internal states of loading and network.
- // TODO(hclam): Ask the pipeline about the state rather than having reading
- // them from members which would cause race conditions.
- virtual WebKit::WebMediaPlayer::NetworkState networkState() const;
- virtual WebKit::WebMediaPlayer::ReadyState readyState() const;
-
- virtual bool didLoadingProgress() const;
-
- virtual bool hasSingleSecurityOrigin() const;
- virtual bool didPassCORSAccessCheck() const;
-
- virtual double mediaTimeForTimeValue(double timeValue) const;
-
- virtual unsigned decodedFrameCount() const;
- virtual unsigned droppedFrameCount() const;
- virtual unsigned audioDecodedByteCount() const;
- virtual unsigned videoDecodedByteCount() const;
-
- // cc::VideoFrameProvider implementation.
- virtual void SetVideoFrameProviderClient(
- cc::VideoFrameProvider::Client* client) OVERRIDE;
- virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() OVERRIDE;
- virtual void PutCurrentFrame(const scoped_refptr<media::VideoFrame>& frame)
- OVERRIDE;
-
- virtual bool copyVideoTextureToPlatformTexture(
- WebKit::WebGraphicsContext3D* web_graphics_context,
- unsigned int texture,
- unsigned int level,
- unsigned int internal_format,
- unsigned int type,
- bool premultiply_alpha,
- bool flip_y);
-
- virtual WebKit::WebAudioSourceProvider* audioSourceProvider();
-
- virtual MediaKeyException generateKeyRequest(
- const WebKit::WebString& key_system,
- const unsigned char* init_data,
- unsigned init_data_length);
-
- virtual MediaKeyException addKey(const WebKit::WebString& key_system,
- const unsigned char* key,
- unsigned key_length,
- const unsigned char* init_data,
- unsigned init_data_length,
- const WebKit::WebString& session_id);
-
- virtual MediaKeyException cancelKeyRequest(
- const WebKit::WebString& key_system,
- const WebKit::WebString& session_id);
-
- // As we are closing the tab or even the browser, |main_loop_| is destroyed
- // even before this object gets destructed, so we need to know when
- // |main_loop_| is being destroyed and we can stop posting repaint task
- // to it.
- virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
-
- void Repaint();
-
- void OnPipelineSeek(media::PipelineStatus status);
- void OnPipelineEnded();
- void OnPipelineError(media::PipelineStatus error);
- void OnPipelineBufferingState(
- media::Pipeline::BufferingState buffering_state);
- void OnDemuxerOpened(scoped_ptr<WebKit::WebMediaSource> media_source);
- void OnKeyAdded(const std::string& session_id);
- void OnKeyError(const std::string& session_id,
- media::MediaKeys::KeyError error_code,
- int system_code);
- void OnKeyMessage(const std::string& session_id,
- const std::string& message,
- const std::string& default_url);
- void OnNeedKey(const std::string& type,
- const std::string& session_id,
- scoped_ptr<uint8[]> init_data,
- int init_data_size);
- scoped_ptr<media::TextTrack> OnTextTrack(media::TextKind kind,
- const std::string& label,
- const std::string& language);
- void SetOpaque(bool);
-
- private:
- // Contains common logic used across the different types loading.
- void LoadSetup(const WebKit::WebURL& url);
-
- // Called after asynchronous initialization of a data source completed.
- void DataSourceInitialized(const GURL& gurl, bool success);
-
- // Called when the data source is downloading or paused.
- void NotifyDownloading(bool is_downloading);
-
- // Finishes starting the pipeline due to a call to load().
- //
- // A non-null |media_source| will construct a Media Source pipeline.
- void StartPipeline(WebKit::WebMediaSource* media_source);
-
- // Helpers that set the network/ready state and notifies the client if
- // they've changed.
- void SetNetworkState(WebKit::WebMediaPlayer::NetworkState state);
- void SetReadyState(WebKit::WebMediaPlayer::ReadyState state);
-
- // Destroy resources held.
- void Destroy();
-
- // Getter method to |client_|.
- WebKit::WebMediaPlayerClient* GetClient();
-
- // Lets V8 know that player uses extra resources not managed by V8.
- void IncrementExternallyAllocatedMemory();
-
- // Actually do the work for generateKeyRequest/addKey so they can easily
- // report results to UMA.
- MediaKeyException GenerateKeyRequestInternal(
- const WebKit::WebString& key_system,
- const unsigned char* init_data,
- unsigned init_data_length);
- MediaKeyException AddKeyInternal(const WebKit::WebString& key_system,
- const unsigned char* key,
- unsigned key_length,
- const unsigned char* init_data,
- unsigned init_data_length,
- const WebKit::WebString& session_id);
- MediaKeyException CancelKeyRequestInternal(
- const WebKit::WebString& key_system,
- const WebKit::WebString& session_id);
-
- // Gets the duration value reported by the pipeline.
- double GetPipelineDuration() const;
-
- // Notifies WebKit of the duration change.
- void OnDurationChange();
-
- // Called by VideoRendererBase on its internal thread with the new frame to be
- // painted.
- void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
-
- WebKit::WebFrame* frame_;
-
- // TODO(hclam): get rid of these members and read from the pipeline directly.
- WebKit::WebMediaPlayer::NetworkState network_state_;
- WebKit::WebMediaPlayer::ReadyState ready_state_;
-
- // Keep a list of buffered time ranges.
- WebKit::WebTimeRanges buffered_;
-
- // Message loops for posting tasks on Chrome's main thread. Also used
- // for DCHECKs so methods calls won't execute in the wrong thread.
- const scoped_refptr<base::MessageLoopProxy> main_loop_;
-
- scoped_ptr<media::Pipeline> pipeline_;
- scoped_refptr<base::MessageLoopProxy> media_loop_;
-
- // The currently selected key system. Empty string means that no key system
- // has been selected.
- WebKit::WebString current_key_system_;
-
- // Playback state.
- //
- // TODO(scherkus): we have these because Pipeline favours the simplicity of a
- // single "playback rate" over worrying about paused/stopped etc... It forces
- // all clients to manage the pause+playback rate externally, but is that
- // really a bad thing?
- //
- // TODO(scherkus): since SetPlaybackRate(0) is asynchronous and we don't want
- // to hang the render thread during pause(), we record the time at the same
- // time we pause and then return that value in currentTime(). Otherwise our
- // clock can creep forward a little bit while the asynchronous
- // SetPlaybackRate(0) is being executed.
- bool paused_;
- bool seeking_;
- double playback_rate_;
- base::TimeDelta paused_time_;
-
- // Seek gets pending if another seek is in progress. Only last pending seek
- // will have effect.
- bool pending_seek_;
- double pending_seek_seconds_;
-
- WebKit::WebMediaPlayerClient* client_;
-
- base::WeakPtr<WebMediaPlayerDelegate> delegate_;
-
- MediaStreamClient* media_stream_client_;
-
- scoped_refptr<media::MediaLog> media_log_;
-
- // Since accelerated compositing status is only known after the first layout,
- // we delay reporting it to UMA until that time.
- bool accelerated_compositing_reported_;
-
- bool incremented_externally_allocated_memory_;
-
- // Factories for supporting GpuVideoDecoder. May be null.
- scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories_;
-
- // Routes audio playback to either AudioRendererSink or WebAudio.
- scoped_refptr<WebAudioSourceProviderImpl> audio_source_provider_;
-
- bool is_local_source_;
- bool supports_save_;
-
- // The decryptor that manages decryption keys and decrypts encrypted frames.
- scoped_ptr<ProxyDecryptor> decryptor_;
-
- bool starting_;
-
- // These two are mutually exclusive:
- // |data_source_| is used for regular resource loads.
- // |chunk_demuxer_| is used for Media Source resource loads.
- //
- // |demuxer_| will contain the appropriate demuxer based on which resource
- // load strategy we're using.
- scoped_ptr<BufferedDataSource> data_source_;
- scoped_ptr<media::Demuxer> demuxer_;
- media::ChunkDemuxer* chunk_demuxer_;
-
- // Temporary for EME v0.1. In the future the init data type should be passed
- // through GenerateKeyRequest() directly from WebKit.
- std::string init_data_type_;
-
- // Video frame rendering members.
- //
- // |lock_| protects |current_frame_| since new frames arrive on the video
- // rendering thread, yet are accessed for rendering on either the main thread
- // or compositing thread depending on whether accelerated compositing is used.
- base::Lock lock_;
- media::SkCanvasVideoRenderer skcanvas_video_renderer_;
- scoped_refptr<media::VideoFrame> current_frame_;
- bool pending_repaint_;
- bool pending_size_change_;
-
- // The compositor layer for displaying the video content when using composited
- // playback.
- scoped_ptr<webkit::WebLayerImpl> video_weblayer_;
-
- // A pointer back to the compositor to inform it about state changes. This is
- // not NULL while the compositor is actively using this webmediaplayer.
- cc::VideoFrameProvider::Client* video_frame_provider_client_;
-
- // Text track objects get a unique index value when they're created.
- int text_track_index_;
-
- DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
-};
-
-} // namespace webkit_media
-
-#endif // WEBKIT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698