Commit e796f7c5 authored by Ken MacKay's avatar Ken MacKay Committed by Commit Bot

[Chromecast] Add LogicalPause/Resume to CmaBackend

This avoid casting CmaBackend insteaces in MediaPipelineBackendManager,
which is unsafe since we don't know the real type.

Change-Id: I82ae529384575f2db5002ab1417de4a056eb3186
Reviewed-on: https://chromium-review.googlesource.com/1159221Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Reviewed-by: default avatarSergey Volk <servolk@chromium.org>
Commit-Queue: Kenneth MacKay <kmackay@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579938}
parent bf33defd
...@@ -195,6 +195,9 @@ class FakeCmaBackend : public CmaBackend { ...@@ -195,6 +195,9 @@ class FakeCmaBackend : public CmaBackend {
int64_t GetCurrentPts() override { return 0; } int64_t GetCurrentPts() override { return 0; }
bool SetPlaybackRate(float rate) override { return true; } bool SetPlaybackRate(float rate) override { return true; }
void LogicalPause() override {}
void LogicalResume() override {}
State state() const { return state_; } State state() const { return state_; }
FakeAudioDecoder* decoder() const { return audio_decoder_.get(); } FakeAudioDecoder* decoder() const { return audio_decoder_.get(); }
......
...@@ -90,6 +90,12 @@ class CmaBackend { ...@@ -90,6 +90,12 @@ class CmaBackend {
virtual bool Resume() = 0; virtual bool Resume() = 0;
virtual int64_t GetCurrentPts() = 0; virtual int64_t GetCurrentPts() = 0;
virtual bool SetPlaybackRate(float rate) = 0; virtual bool SetPlaybackRate(float rate) = 0;
// Logically pauses/resumes a backend instance, without actually pausing or
// resuming it. This is used by multiroom output to avoid playback stutter on
// resume.
virtual void LogicalPause() = 0;
virtual void LogicalResume() = 0;
}; };
} // namespace media } // namespace media
......
...@@ -149,18 +149,6 @@ void MediaPipelineBackendManager::RemoveAllowVolumeFeedbackObserver( ...@@ -149,18 +149,6 @@ void MediaPipelineBackendManager::RemoveAllowVolumeFeedbackObserver(
allow_volume_feedback_observers_->RemoveObserver(observer); allow_volume_feedback_observers_->RemoveObserver(observer);
} }
void MediaPipelineBackendManager::LogicalPause(CmaBackend* backend) {
MediaPipelineBackendWrapper* wrapper =
static_cast<MediaPipelineBackendWrapper*>(backend);
wrapper->LogicalPause();
}
void MediaPipelineBackendManager::LogicalResume(CmaBackend* backend) {
MediaPipelineBackendWrapper* wrapper =
static_cast<MediaPipelineBackendWrapper*>(backend);
wrapper->LogicalResume();
}
void MediaPipelineBackendManager::AddExtraPlayingStream(bool sfx) { void MediaPipelineBackendManager::AddExtraPlayingStream(bool sfx) {
UpdatePlayingAudioCount(sfx, 1); UpdatePlayingAudioCount(sfx, 1);
} }
......
...@@ -99,13 +99,6 @@ class MediaPipelineBackendManager { ...@@ -99,13 +99,6 @@ class MediaPipelineBackendManager {
void AddAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer); void AddAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer);
void RemoveAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer); void RemoveAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer);
// Logically pauses/resumes a backend instance, without actually pausing or
// resuming it. This is used by multiroom output to avoid playback stutter on
// resume. |backend| must have been created via a call to this instance's
// CreateCmaBackend().
void LogicalPause(CmaBackend* backend);
void LogicalResume(CmaBackend* backend);
// Add/remove a playing audio stream that is not accounted for by a // Add/remove a playing audio stream that is not accounted for by a
// CmaBackend instance (for example, direct audio output using // CmaBackend instance (for example, direct audio output using
// CastMediaShlib::AddDirectAudioSource()). |sfx| indicates whether or not // CastMediaShlib::AddDirectAudioSource()). |sfx| indicates whether or not
......
...@@ -30,9 +30,6 @@ class MediaPipelineBackendWrapper : public CmaBackend { ...@@ -30,9 +30,6 @@ class MediaPipelineBackendWrapper : public CmaBackend {
MediaPipelineBackendManager* backend_manager); MediaPipelineBackendManager* backend_manager);
~MediaPipelineBackendWrapper() override; ~MediaPipelineBackendWrapper() override;
void LogicalPause();
void LogicalResume();
// CmaBackend implementation: // CmaBackend implementation:
AudioDecoder* CreateAudioDecoder() override; AudioDecoder* CreateAudioDecoder() override;
VideoDecoder* CreateVideoDecoder() override; VideoDecoder* CreateVideoDecoder() override;
...@@ -43,6 +40,8 @@ class MediaPipelineBackendWrapper : public CmaBackend { ...@@ -43,6 +40,8 @@ class MediaPipelineBackendWrapper : public CmaBackend {
bool Resume() override; bool Resume() override;
int64_t GetCurrentPts() override; int64_t GetCurrentPts() override;
bool SetPlaybackRate(float rate) override; bool SetPlaybackRate(float rate) override;
void LogicalPause() override;
void LogicalResume() override;
private: private:
void SetPlaying(bool playing); void SetPlaying(bool playing);
......
...@@ -64,6 +64,8 @@ class MockCmaBackend : public CmaBackend { ...@@ -64,6 +64,8 @@ class MockCmaBackend : public CmaBackend {
MOCK_METHOD0(Resume, bool()); MOCK_METHOD0(Resume, bool());
MOCK_METHOD0(GetCurrentPts, int64_t()); MOCK_METHOD0(GetCurrentPts, int64_t());
MOCK_METHOD1(SetPlaybackRate, bool(float)); MOCK_METHOD1(SetPlaybackRate, bool(float));
MOCK_METHOD0(LogicalPause, void());
MOCK_METHOD0(LogicalResume, void());
}; };
} // namespace media } // namespace media
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment