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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromecast/media/cma/backend/media_pipeline_backend_default.h" 5 #include "chromecast/media/cma/backend/media_pipeline_backend_default.h"
6 6
7 #include "chromecast/media/cma/backend/audio_pipeline_device_default.h" 7 #include "chromecast/public/media/cast_decoder_buffer.h"
8 #include "chromecast/media/cma/backend/media_clock_device_default.h"
9 #include "chromecast/media/cma/backend/video_pipeline_device_default.h"
10 8
11 namespace chromecast { 9 namespace chromecast {
12 namespace media { 10 namespace media {
13 11
14 MediaPipelineBackendDefault::MediaPipelineBackendDefault( 12 class MediaPipelineBackendDefault::AudioDecoderDefault
15 const MediaPipelineDeviceParams& params) 13 : public MediaPipelineBackend::AudioDecoder {
16 : params_(params) {} 14 public:
15 AudioDecoderDefault() : delegate_(nullptr) {}
16 ~AudioDecoderDefault() override {}
17 17
18 MediaPipelineBackendDefault::~MediaPipelineBackendDefault() {} 18 void SetDelegate(MediaPipelineBackend::Delegate* delegate) {
19 delegate_ = delegate;
20 }
19 21
20 MediaClockDevice* MediaPipelineBackendDefault::GetClock() { 22 // MediaPipelineBackend::AudioDecoder implementation:
21 if (!clock_) 23 BufferStatus PushBuffer(DecryptContext* decrypt_context,
22 clock_.reset(new MediaClockDeviceDefault()); 24 CastDecoderBuffer* buffer) override {
23 return clock_.get(); 25 if (buffer->end_of_stream())
26 delegate_->OnEndOfStream(this);
27 return MediaPipelineBackend::kBufferSuccess;
28 }
29
30 void GetStatistics(Statistics* statistics) override {}
31
32 bool SetConfig(const AudioConfig& config) override { return true; }
33
34 bool SetVolume(float multiplier) override { return true; }
35
36 RenderingDelay GetRenderingDelay() override { return RenderingDelay(); }
37
38 private:
39 MediaPipelineBackend::Delegate* delegate_;
40
41 DISALLOW_COPY_AND_ASSIGN(AudioDecoderDefault);
42 };
43
44 class MediaPipelineBackendDefault::VideoDecoderDefault
45 : public MediaPipelineBackend::VideoDecoder {
46 public:
47 VideoDecoderDefault() : delegate_(nullptr) {}
48 ~VideoDecoderDefault() override {}
49
50 void SetDelegate(MediaPipelineBackend::Delegate* delegate) {
51 delegate_ = delegate;
52 }
53
54 // MediaPipelineBackend::VideoDecoder implementation:
55 BufferStatus PushBuffer(DecryptContext* decrypt_context,
56 CastDecoderBuffer* buffer) override {
57 if (buffer->end_of_stream())
58 delegate_->OnEndOfStream(this);
59 return MediaPipelineBackend::kBufferSuccess;
60 }
61
62 void GetStatistics(Statistics* statistics) override {}
63
64 bool SetConfig(const VideoConfig& config) override { return true; }
65
66 private:
67 MediaPipelineBackend::Delegate* delegate_;
68
69 DISALLOW_COPY_AND_ASSIGN(VideoDecoderDefault);
70 };
71
72 MediaPipelineBackendDefault::MediaPipelineBackendDefault()
73 : running_(false), rate_(1.0f) {
24 } 74 }
25 75
26 AudioPipelineDevice* MediaPipelineBackendDefault::GetAudio() { 76 MediaPipelineBackendDefault::~MediaPipelineBackendDefault() {
27 if (!audio_)
28 audio_.reset(new AudioPipelineDeviceDefault(params_, GetClock()));
29 return audio_.get();
30 } 77 }
31 78
32 VideoPipelineDevice* MediaPipelineBackendDefault::GetVideo() { 79 MediaPipelineBackend::AudioDecoder*
33 if (!video_) 80 MediaPipelineBackendDefault::CreateAudioDecoder() {
34 video_.reset(new VideoPipelineDeviceDefault(params_, GetClock())); 81 DCHECK(!audio_decoder_);
35 return video_.get(); 82 audio_decoder_.reset(new AudioDecoderDefault());
83 return audio_decoder_.get();
84 }
85
86 MediaPipelineBackend::VideoDecoder*
87 MediaPipelineBackendDefault::CreateVideoDecoder() {
88 DCHECK(!video_decoder_);
89 video_decoder_.reset(new VideoDecoderDefault());
90 return video_decoder_.get();
91 }
92
93 bool MediaPipelineBackendDefault::Initialize(Delegate* delegate) {
94 DCHECK(delegate);
95 if (audio_decoder_)
96 audio_decoder_->SetDelegate(delegate);
97 if (video_decoder_)
98 video_decoder_->SetDelegate(delegate);
99 return true;
100 }
101
102 bool MediaPipelineBackendDefault::Start(int64_t start_pts) {
103 DCHECK(!running_);
104 start_pts_ = base::TimeDelta::FromMicroseconds(start_pts);
105 start_clock_ = base::TimeTicks::Now();
106 running_ = true;
107 return true;
108 }
109
110 bool MediaPipelineBackendDefault::Stop() {
111 start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
112 running_ = false;
113 return true;
114 }
115
116 bool MediaPipelineBackendDefault::Pause() {
117 DCHECK(running_);
118 start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
119 running_ = false;
120 return true;
121 }
122
123 bool MediaPipelineBackendDefault::Resume() {
124 DCHECK(!running_);
125 running_ = true;
126 start_clock_ = base::TimeTicks::Now();
127 return true;
128 }
129
130 int64_t MediaPipelineBackendDefault::GetCurrentPts() {
131 if (!running_)
132 return start_pts_.InMicroseconds();
133
134 base::TimeTicks now = base::TimeTicks::Now();
135 base::TimeDelta interpolated_media_time =
136 start_pts_ + (now - start_clock_) * rate_;
137 return interpolated_media_time.InMicroseconds();
138 }
139
140 bool MediaPipelineBackendDefault::SetPlaybackRate(float rate) {
141 DCHECK_GT(rate, 0.0f);
142 start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
143 start_clock_ = base::TimeTicks::Now();
144 rate_ = rate;
145 return true;
36 } 146 }
37 147
38 } // namespace media 148 } // namespace media
39 } // namespace chromecast 149 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698