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

Unified Diff: chromecast/media/cma/backend/media_pipeline_backend_default.cc

Issue 1372393007: [Chromecast] Upgrade to new CMA backend API (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Address alokp@ comments Created 5 years, 2 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
Index: chromecast/media/cma/backend/media_pipeline_backend_default.cc
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_default.cc b/chromecast/media/cma/backend/media_pipeline_backend_default.cc
index 498c5be257b58ad781fdf6a94cc97ae6d8e0cc80..bb0cc1e70ec713b669056cf95a2ae7c862bbb8f0 100644
--- a/chromecast/media/cma/backend/media_pipeline_backend_default.cc
+++ b/chromecast/media/cma/backend/media_pipeline_backend_default.cc
@@ -4,35 +4,145 @@
#include "chromecast/media/cma/backend/media_pipeline_backend_default.h"
-#include "chromecast/media/cma/backend/audio_pipeline_device_default.h"
-#include "chromecast/media/cma/backend/media_clock_device_default.h"
-#include "chromecast/media/cma/backend/video_pipeline_device_default.h"
+#include "chromecast/public/media/cast_decoder_buffer.h"
namespace chromecast {
namespace media {
-MediaPipelineBackendDefault::MediaPipelineBackendDefault(
- const MediaPipelineDeviceParams& params)
- : params_(params) {}
+class MediaPipelineBackendDefault::AudioDecoderDefault
+ : public MediaPipelineBackend::AudioDecoder {
+ public:
+ AudioDecoderDefault() : delegate_(nullptr) {}
+ ~AudioDecoderDefault() override {}
-MediaPipelineBackendDefault::~MediaPipelineBackendDefault() {}
+ void SetDelegate(MediaPipelineBackend::Delegate* delegate) {
+ delegate_ = delegate;
+ }
-MediaClockDevice* MediaPipelineBackendDefault::GetClock() {
- if (!clock_)
- clock_.reset(new MediaClockDeviceDefault());
- return clock_.get();
+ // MediaPipelineBackend::AudioDecoder implementation:
+ BufferStatus PushBuffer(DecryptContext* decrypt_context,
+ CastDecoderBuffer* buffer) override {
+ if (buffer->end_of_stream())
+ delegate_->OnEndOfStream(this);
+ return MediaPipelineBackend::kBufferSuccess;
+ }
+
+ void GetStatistics(Statistics* statistics) override {}
+
+ bool SetConfig(const AudioConfig& config) override { return true; }
+
+ bool SetVolume(float multiplier) override { return true; }
+
+ RenderingDelay GetRenderingDelay() override { return RenderingDelay(); }
+
+ private:
+ MediaPipelineBackend::Delegate* delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(AudioDecoderDefault);
+};
+
+class MediaPipelineBackendDefault::VideoDecoderDefault
+ : public MediaPipelineBackend::VideoDecoder {
+ public:
+ VideoDecoderDefault() : delegate_(nullptr) {}
+ ~VideoDecoderDefault() override {}
+
+ void SetDelegate(MediaPipelineBackend::Delegate* delegate) {
+ delegate_ = delegate;
+ }
+
+ // MediaPipelineBackend::VideoDecoder implementation:
+ BufferStatus PushBuffer(DecryptContext* decrypt_context,
+ CastDecoderBuffer* buffer) override {
+ if (buffer->end_of_stream())
+ delegate_->OnEndOfStream(this);
+ return MediaPipelineBackend::kBufferSuccess;
+ }
+
+ void GetStatistics(Statistics* statistics) override {}
+
+ bool SetConfig(const VideoConfig& config) override { return true; }
+
+ private:
+ MediaPipelineBackend::Delegate* delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(VideoDecoderDefault);
+};
+
+MediaPipelineBackendDefault::MediaPipelineBackendDefault()
+ : running_(false), rate_(1.0f) {
+}
+
+MediaPipelineBackendDefault::~MediaPipelineBackendDefault() {
}
-AudioPipelineDevice* MediaPipelineBackendDefault::GetAudio() {
- if (!audio_)
- audio_.reset(new AudioPipelineDeviceDefault(params_, GetClock()));
- return audio_.get();
+MediaPipelineBackend::AudioDecoder*
+MediaPipelineBackendDefault::CreateAudioDecoder() {
+ DCHECK(!audio_decoder_);
+ audio_decoder_.reset(new AudioDecoderDefault());
+ return audio_decoder_.get();
+}
+
+MediaPipelineBackend::VideoDecoder*
+MediaPipelineBackendDefault::CreateVideoDecoder() {
+ DCHECK(!video_decoder_);
+ video_decoder_.reset(new VideoDecoderDefault());
+ return video_decoder_.get();
+}
+
+bool MediaPipelineBackendDefault::Initialize(Delegate* delegate) {
+ DCHECK(delegate);
+ if (audio_decoder_)
+ audio_decoder_->SetDelegate(delegate);
+ if (video_decoder_)
+ video_decoder_->SetDelegate(delegate);
+ return true;
+}
+
+bool MediaPipelineBackendDefault::Start(int64_t start_pts) {
+ DCHECK(!running_);
+ start_pts_ = base::TimeDelta::FromMicroseconds(start_pts);
+ start_clock_ = base::TimeTicks::Now();
+ running_ = true;
+ return true;
+}
+
+bool MediaPipelineBackendDefault::Stop() {
+ start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
+ running_ = false;
+ return true;
+}
+
+bool MediaPipelineBackendDefault::Pause() {
+ DCHECK(running_);
+ start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
+ running_ = false;
+ return true;
+}
+
+bool MediaPipelineBackendDefault::Resume() {
+ DCHECK(!running_);
+ running_ = true;
+ start_clock_ = base::TimeTicks::Now();
+ return true;
+}
+
+int64_t MediaPipelineBackendDefault::GetCurrentPts() {
+ if (!running_)
+ return start_pts_.InMicroseconds();
+
+ base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeDelta interpolated_media_time =
+ start_pts_ + (now - start_clock_) * rate_;
+ return interpolated_media_time.InMicroseconds();
}
-VideoPipelineDevice* MediaPipelineBackendDefault::GetVideo() {
- if (!video_)
- video_.reset(new VideoPipelineDeviceDefault(params_, GetClock()));
- return video_.get();
+bool MediaPipelineBackendDefault::SetPlaybackRate(float rate) {
+ DCHECK_GT(rate, 0.0f);
+ start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
+ start_clock_ = base::TimeTicks::Now();
+ rate_ = rate;
+ return true;
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698