| Index: media/renderers/renderer_impl.h
|
| diff --git a/media/renderers/renderer_impl.h b/media/renderers/renderer_impl.h
|
| index f55a7635e22707644c5b818813542d23a49544c0..1a5849746bb8ad363321edd195c938d7425e61e3 100644
|
| --- a/media/renderers/renderer_impl.h
|
| +++ b/media/renderers/renderer_impl.h
|
| @@ -61,10 +61,6 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
|
| void SetVolume(float volume) final;
|
| base::TimeDelta GetMediaTime() final;
|
|
|
| - void OnStreamStatusChanged(DemuxerStream* stream,
|
| - bool enabled,
|
| - base::TimeDelta time);
|
| -
|
| // Helper functions for testing purposes. Must be called before Initialize().
|
| void DisableUnderflowForTesting();
|
| void EnableClocklessVideoPlaybackForTesting();
|
| @@ -106,8 +102,36 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
|
| void FlushVideoRenderer();
|
| void OnVideoRendererFlushDone();
|
|
|
| - void RestartAudioRenderer(base::TimeDelta time);
|
| - void RestartVideoRenderer(base::TimeDelta time);
|
| + // This function notifies the renderer that the status of the demuxer |stream|
|
| + // has been changed, the new status is |enabled| and the change occured while
|
| + // playback position was |time|.
|
| + void OnStreamStatusChanged(DemuxerStream* stream,
|
| + bool enabled,
|
| + base::TimeDelta time);
|
| +
|
| + // Reinitialize audio/video renderer during a demuxer stream switching. The
|
| + // renderer must be flushed first, and when the re-init is completed the
|
| + // corresponding callback will be invoked to restart playback.
|
| + // The |stream| parameter specifies the new demuxer stream, and the |time|
|
| + // parameter specifies the time on media timeline where the switch occured.
|
| + void ReinitializeAudioRenderer(DemuxerStream* stream, base::TimeDelta time);
|
| + void OnAudioRendererReinitialized(DemuxerStream* stream,
|
| + base::TimeDelta time,
|
| + PipelineStatus status);
|
| + void ReinitializeVideoRenderer(DemuxerStream* stream, base::TimeDelta time);
|
| + void OnVideoRendererReinitialized(DemuxerStream* stream,
|
| + base::TimeDelta time,
|
| + PipelineStatus status);
|
| +
|
| + // Restart audio/video renderer playback after a demuxer stream switch or
|
| + // after a demuxer stream has been disabled and re-enabled. The |stream|
|
| + // parameter specifies which stream needs to be restarted. The |time|
|
| + // parameter specifies the position on the media timeline where the playback
|
| + // needs to be restarted. It is necessary for demuxers with independent
|
| + // streams (e.g. MSE / ChunkDemuxer) to synchronize data reading between those
|
| + // streams.
|
| + void RestartAudioRenderer(DemuxerStream* stream, base::TimeDelta time);
|
| + void RestartVideoRenderer(DemuxerStream* stream, base::TimeDelta time);
|
|
|
| // Callback executed by filters to update statistics.
|
| void OnStatisticsUpdate(const PipelineStatistics& stats);
|
| @@ -123,6 +147,7 @@ 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
|
| @@ -132,6 +157,7 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
|
| bool HandleRestartedStreamBufferingChanges(
|
| DemuxerStream::Type type,
|
| BufferingState new_buffering_state);
|
| +
|
| bool WaitingForEnoughData() const;
|
| void PausePlayback();
|
| void StartPlayback();
|
| @@ -166,6 +192,9 @@ class MEDIA_EXPORT RendererImpl : public Renderer {
|
| std::unique_ptr<AudioRenderer> audio_renderer_;
|
| std::unique_ptr<VideoRenderer> video_renderer_;
|
|
|
| + DemuxerStream* current_audio_stream_;
|
| + DemuxerStream* current_video_stream_;
|
| +
|
| // Renderer-provided time source used to control playback.
|
| TimeSource* time_source_;
|
| std::unique_ptr<WallClockTimeSource> wall_clock_time_source_;
|
|
|