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

Unified Diff: media/renderers/renderer_impl.h

Issue 1935873002: Implement disabling and enabling media tracks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@track-control2
Patch Set: rebase Created 4 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
« no previous file with comments | « media/renderers/audio_renderer_impl.cc ('k') | media/renderers/renderer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/renderer_impl.h
diff --git a/media/renderers/renderer_impl.h b/media/renderers/renderer_impl.h
index 9eb1d4f6e650e9f840832e751fc476c31653a4e0..76c496a125d462ecd6d2a2086270ff6f1339ad71 100644
--- a/media/renderers/renderer_impl.h
+++ b/media/renderers/renderer_impl.h
@@ -62,6 +62,8 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
bool HasAudio() final;
bool HasVideo() final;
+ void RestartStreamPlayback(DemuxerStream* stream, base::TimeDelta time);
+
// Helper functions for testing purposes. Must be called before Initialize().
void DisableUnderflowForTesting();
void EnableClocklessVideoPlaybackForTesting();
@@ -103,6 +105,9 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
void FlushVideoRenderer();
void OnVideoRendererFlushDone();
+ void RestartAudioRenderer(base::TimeDelta time);
+ void RestartVideoRenderer(base::TimeDelta time);
+
// Callback executed by filters to update statistics.
void OnStatisticsUpdate(const PipelineStatistics& stats);
@@ -117,6 +122,15 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
// and PausePlayback() should be called
void OnBufferingStateChange(DemuxerStream::Type type,
BufferingState new_buffering_state);
+ // Handles the buffering notifications that we might get while an audio or a
+ // video stream is being restarted. In those cases we don't want to report
+ // underflows immediately and instead give decoders a chance to catch up with
+ // currently playing stream. Returns true if the buffering nofication has been
+ // handled and no further processing is necessary, returns false to indicate
+ // that we should fall back to the regular OnBufferingStateChange logic.
+ bool HandleRestartedStreamBufferingChanges(
+ DemuxerStream::Type type,
+ BufferingState new_buffering_state);
bool WaitingForEnoughData() const;
void PausePlayback();
void StartPlayback();
@@ -172,12 +186,18 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
bool clockless_video_playback_enabled_for_testing_;
// Used to defer underflow for video when audio is present.
- base::CancelableClosure deferred_underflow_cb_;
+ base::CancelableClosure deferred_video_underflow_cb_;
+
+ // Used to defer underflow for audio when restarting audio playback.
+ base::CancelableClosure deferred_audio_restart_underflow_cb_;
// The amount of time to wait before declaring underflow if the video renderer
// runs out of data but the audio renderer still has enough.
base::TimeDelta video_underflow_threshold_;
+ bool restarting_audio_ = false;
+ bool restarting_video_ = false;
+
base::WeakPtr<RendererImpl> weak_this_;
base::WeakPtrFactory<RendererImpl> weak_factory_;
« no previous file with comments | « media/renderers/audio_renderer_impl.cc ('k') | media/renderers/renderer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698