Index: media/renderers/renderer_impl.h |
diff --git a/media/renderers/renderer_impl.h b/media/renderers/renderer_impl.h |
index f55a7635e22707644c5b818813542d23a49544c0..b8d2fcf87e142ee70d33f5c05839ec0c3577c6a2 100644 |
--- a/media/renderers/renderer_impl.h |
+++ b/media/renderers/renderer_impl.h |
@@ -106,8 +106,29 @@ class MEDIA_EXPORT RendererImpl : public Renderer { |
void FlushVideoRenderer(); |
void OnVideoRendererFlushDone(); |
- void RestartAudioRenderer(base::TimeDelta time); |
- void RestartVideoRenderer(base::TimeDelta time); |
+ // Restart audio/video renderer playback after a media track switch or after a |
+ // media track has been disabled and re-enabled. The |stream| parameter |
+ // specifies which stream needs to be restarted. If it's the same as the most |
+ // recently playing stream of that type, then the renderer is only restarted. |
+ // But if it differs from the most recent stream, then the renderer is |
+ // completely reinitialized, i.e. the corresponding DecoderStream is recreated |
+ // and decoder is reinitialized too. |
+ // 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); |
+ |
+ // These callbacks are invoked when the corresponding renderer has been |
+ // reinitialized. If the |status| indicates success, then playback of the |
+ // |stream| should be resumed from media position specified by |time|. |
+ void OnAudioRendererReinitCompleted(DemuxerStream* stream, |
xhwang
2017/03/27 19:13:53
nit: OnAudioRendererReinitialized, or OnAudioRende
servolk
2017/03/27 22:34:13
Done.
|
+ base::TimeDelta time, |
+ PipelineStatus status); |
+ void OnVideoRendererReinitCompleted(DemuxerStream* stream, |
+ base::TimeDelta time, |
+ PipelineStatus status); |
// Callback executed by filters to update statistics. |
void OnStatisticsUpdate(const PipelineStatistics& stats); |
@@ -166,6 +187,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_; |