summaryrefslogtreecommitdiffstats
path: root/chromium/content/renderer/media/android/media_source_delegate.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/media/android/media_source_delegate.h')
-rw-r--r--chromium/content/renderer/media/android/media_source_delegate.h72
1 files changed, 29 insertions, 43 deletions
diff --git a/chromium/content/renderer/media/android/media_source_delegate.h b/chromium/content/renderer/media/android/media_source_delegate.h
index 317ef6544df..28b18325938 100644
--- a/chromium/content/renderer/media/android/media_source_delegate.h
+++ b/chromium/content/renderer/media/android/media_source_delegate.h
@@ -67,13 +67,7 @@ class MediaSourceDelegate : public media::DemuxerHost {
const UpdateNetworkStateCB& update_network_state_cb,
const DurationChangeCB& duration_change_cb);
-#if defined(GOOGLE_TV)
- void InitializeMediaStream(
- media::Demuxer* demuxer,
- const UpdateNetworkStateCB& update_network_state_cb);
-#endif
-
- const blink::WebTimeRanges& Buffered();
+ blink::WebTimeRanges Buffered() const;
size_t DecodedFrameCount() const;
size_t DroppedFrameCount() const;
size_t AudioDecodedByteCount() const;
@@ -100,29 +94,23 @@ class MediaSourceDelegate : public media::DemuxerHost {
// cached data since last keyframe. See http://crbug.com/304234.
void Seek(const base::TimeDelta& seek_time, bool is_browser_seek);
- void NotifyKeyAdded(const std::string& key_system);
-
// Called when DemuxerStreamPlayer needs to read data from ChunkDemuxer.
void OnReadFromDemuxer(media::DemuxerStream::Type type);
- // Called when the player needs the new config data from ChunkDemuxer.
- void OnMediaConfigRequest();
-
// Called by the Destroyer to destroy an instance of this object.
void Destroy();
- private:
- typedef base::Callback<void(scoped_ptr<media::DemuxerData> data)>
- ReadFromDemuxerAckCB;
- typedef base::Callback<void(scoped_ptr<media::DemuxerConfigs> configs)>
- DemuxerReadyCB;
+ // Called on the main thread to check whether the video stream is encrypted.
+ bool IsVideoEncrypted();
+
+ // Gets the ChunkDemuxer timeline offset.
+ base::Time GetTimelineOffset() const;
+ private:
// This is private to enforce use of the Destroyer.
virtual ~MediaSourceDelegate();
// Methods inherited from DemuxerHost.
- virtual void SetTotalBytes(int64 total_bytes) OVERRIDE;
- virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE;
virtual void AddBufferedTimeRange(base::TimeDelta start,
base::TimeDelta end) OVERRIDE;
virtual void SetDuration(base::TimeDelta duration) OVERRIDE;
@@ -154,12 +142,15 @@ class MediaSourceDelegate : public media::DemuxerHost {
void ResetVideoDecryptingDemuxerStream();
void FinishResettingDecryptingDemuxerStreams();
+ // Callback for ChunkDemuxer::Stop() and helper for deleting |this| on the
+ // main thread.
void OnDemuxerStopDone();
+ void DeleteSelf();
+
void OnDemuxerOpened();
void OnNeedKey(const std::string& type,
const std::vector<uint8>& init_data);
void NotifyDemuxerReady();
- bool CanNotifyDemuxerReady();
void StopDemuxer();
void InitializeDemuxer();
@@ -176,9 +167,7 @@ class MediaSourceDelegate : public media::DemuxerHost {
const scoped_refptr<media::DecoderBuffer>& buffer);
// Helper function for calculating duration.
- int GetDurationMs();
-
- bool HasEncryptedStream();
+ base::TimeDelta GetDuration() const;
bool IsSeeking() const;
@@ -190,14 +179,10 @@ class MediaSourceDelegate : public media::DemuxerHost {
base::TimeDelta FindBufferedBrowserSeekTime_Locked(
const base::TimeDelta& seek_time) const;
- // Message loop for main renderer thread and corresponding weak pointer.
- const scoped_refptr<base::MessageLoopProxy> main_loop_;
- base::WeakPtrFactory<MediaSourceDelegate> main_weak_factory_;
- base::WeakPtr<MediaSourceDelegate> main_weak_this_;
-
- // Message loop for media thread and corresponding weak pointer.
- const scoped_refptr<base::MessageLoopProxy> media_loop_;
- base::WeakPtrFactory<MediaSourceDelegate> media_weak_factory_;
+ // Get the demuxer configs for a particular stream identified by |is_audio|.
+ // Returns true on success, of false otherwise.
+ bool GetDemuxerConfigFromStream(media::DemuxerConfigs* configs,
+ bool is_audio);
RendererDemuxerAndroid* demuxer_client_;
int demuxer_client_id_;
@@ -207,7 +192,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
DurationChangeCB duration_change_cb_;
scoped_ptr<media::ChunkDemuxer> chunk_demuxer_;
- media::Demuxer* demuxer_;
bool is_demuxer_ready_;
media::SetDecryptorReadyCB set_decryptor_ready_cb_;
@@ -220,16 +204,10 @@ class MediaSourceDelegate : public media::DemuxerHost {
media::PipelineStatistics statistics_;
media::Ranges<base::TimeDelta> buffered_time_ranges_;
- // Keep a list of buffered time ranges.
- blink::WebTimeRanges buffered_web_time_ranges_;
MediaSourceOpenedCB media_source_opened_cb_;
media::Demuxer::NeedKeyCB need_key_cb_;
- // The currently selected key system. Empty string means that no key system
- // has been selected.
- blink::WebString current_key_system_;
-
// 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_;
@@ -238,6 +216,10 @@ class MediaSourceDelegate : public media::DemuxerHost {
mutable base::Lock seeking_lock_;
bool seeking_;
+ // Lock used to serialize access for |is_video_encrypted_|.
+ mutable base::Lock is_video_encrypted_lock_;
+ bool is_video_encrypted_;
+
// Track if we are currently performing a browser seek, and track whether or
// not a regular seek is expected soon. If a regular seek is expected soon,
// then any in-progress browser seek will be canceled pending the
@@ -247,13 +229,17 @@ class MediaSourceDelegate : public media::DemuxerHost {
base::TimeDelta browser_seek_time_;
bool expecting_regular_seek_;
-#if defined(GOOGLE_TV)
- bool key_added_;
- std::string key_system_;
-#endif // defined(GOOGLE_TV)
-
size_t access_unit_size_;
+ // Message loop for main renderer and media threads.
+ const scoped_refptr<base::MessageLoopProxy> main_loop_;
+ const scoped_refptr<base::MessageLoopProxy> media_loop_;
+
+ // NOTE: Weak pointers must be invalidated before all other member variables.
+ base::WeakPtrFactory<MediaSourceDelegate> main_weak_factory_;
+ base::WeakPtrFactory<MediaSourceDelegate> media_weak_factory_;
+ base::WeakPtr<MediaSourceDelegate> main_weak_this_;
+
DISALLOW_COPY_AND_ASSIGN(MediaSourceDelegate);
};