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 {
int64_t GetCurrentPts() override { return 0; }
bool SetPlaybackRate(float rate) override { return true; }
void LogicalPause() override {}
void LogicalResume() override {}
State state() const { return state_; }
FakeAudioDecoder* decoder() const { return audio_decoder_.get(); }
......
......@@ -90,6 +90,12 @@ class CmaBackend {
virtual bool Resume() = 0;
virtual int64_t GetCurrentPts() = 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
......
......@@ -149,18 +149,6 @@ void MediaPipelineBackendManager::RemoveAllowVolumeFeedbackObserver(
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) {
UpdatePlayingAudioCount(sfx, 1);
}
......
......@@ -99,13 +99,6 @@ class MediaPipelineBackendManager {
void AddAllowVolumeFeedbackObserver(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
// CmaBackend instance (for example, direct audio output using
// CastMediaShlib::AddDirectAudioSource()). |sfx| indicates whether or not
......
......@@ -30,9 +30,6 @@ class MediaPipelineBackendWrapper : public CmaBackend {
MediaPipelineBackendManager* backend_manager);
~MediaPipelineBackendWrapper() override;
void LogicalPause();
void LogicalResume();
// CmaBackend implementation:
AudioDecoder* CreateAudioDecoder() override;
VideoDecoder* CreateVideoDecoder() override;
......@@ -43,6 +40,8 @@ class MediaPipelineBackendWrapper : public CmaBackend {
bool Resume() override;
int64_t GetCurrentPts() override;
bool SetPlaybackRate(float rate) override;
void LogicalPause() override;
void LogicalResume() override;
private:
void SetPlaying(bool playing);
......
......@@ -64,6 +64,8 @@ class MockCmaBackend : public CmaBackend {
MOCK_METHOD0(Resume, bool());
MOCK_METHOD0(GetCurrentPts, int64_t());
MOCK_METHOD1(SetPlaybackRate, bool(float));
MOCK_METHOD0(LogicalPause, void());
MOCK_METHOD0(LogicalResume, void());
};
} // 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