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

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: 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),
74 rate_(1.0f),
75 audio_decoder_(nullptr),
76 video_decoder_(nullptr) {
24 } 77 }
25 78
26 AudioPipelineDevice* MediaPipelineBackendDefault::GetAudio() { 79 MediaPipelineBackendDefault::~MediaPipelineBackendDefault() {
27 if (!audio_) 80 delete audio_decoder_;
slan 2015/10/06 19:34:00 1) Since we already have //base deps, why not used
kmackay 2015/10/06 21:44:55 deleting nullptr is extremely valid.
slan 2015/10/06 22:15:05 TIL.
28 audio_.reset(new AudioPipelineDeviceDefault(params_, GetClock())); 81 delete video_decoder_;
29 return audio_.get();
30 } 82 }
31 83
32 VideoPipelineDevice* MediaPipelineBackendDefault::GetVideo() { 84 MediaPipelineBackend::AudioDecoder*
33 if (!video_) 85 MediaPipelineBackendDefault::CreateAudioDecoder() {
slan 2015/10/06 19:34:00 Don't the requirements state that the backend must
kmackay 2015/10/06 21:44:55 The requirement is that the vendor media shlib is
slan 2015/10/06 22:15:05 Ah much clearer, thanks!
34 video_.reset(new VideoPipelineDeviceDefault(params_, GetClock())); 86 DCHECK(!audio_decoder_);
35 return video_.get(); 87 audio_decoder_ = new AudioDecoderDefault();
88 return audio_decoder_;
89 }
90
91 MediaPipelineBackend::VideoDecoder*
92 MediaPipelineBackendDefault::CreateVideoDecoder() {
93 DCHECK(!video_decoder_);
94 video_decoder_ = new VideoDecoderDefault();
95 return video_decoder_;
96 }
97
98 bool MediaPipelineBackendDefault::Initialize(Delegate* delegate) {
99 DCHECK(delegate);
100 if (audio_decoder_)
101 audio_decoder_->SetDelegate(delegate);
102 if (video_decoder_)
103 video_decoder_->SetDelegate(delegate);
104 return true;
105 }
106
107 bool MediaPipelineBackendDefault::Start(int64_t start_pts) {
108 DCHECK(!running_);
109 start_pts_ = base::TimeDelta::FromMicroseconds(start_pts);
110 start_clock_ = base::TimeTicks::Now();
111 running_ = true;
112 return true;
113 }
114
115 bool MediaPipelineBackendDefault::Stop() {
116 running_ = false;
117 start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
slan 2015/10/06 19:34:00 You want to call this before setting running_ to f
kmackay 2015/10/06 21:44:55 Done.
118 return true;
119 }
120
121 bool MediaPipelineBackendDefault::Pause() {
122 DCHECK(running_);
123 running_ = false;
124 start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
125 return true;
126 }
127
128 bool MediaPipelineBackendDefault::Resume() {
129 DCHECK(!running_);
130 running_ = true;
131 start_clock_ = base::TimeTicks::Now();
132 return true;
133 }
134
135 int64_t MediaPipelineBackendDefault::GetCurrentPts() {
136 if (!running_)
137 return start_pts_.InMicroseconds();
138
139 base::TimeTicks now = base::TimeTicks::Now();
140 base::TimeDelta interpolated_media_time =
141 start_pts_ + (now - start_clock_) * rate_;
142 return interpolated_media_time.InMicroseconds();
143 }
144
145 bool MediaPipelineBackendDefault::SetPlaybackRate(float rate) {
146 DCHECK(rate != 0);
slan 2015/10/06 19:34:00 nit: rate > 0
kmackay 2015/10/06 21:44:55 0 is potentially valid here.
slan 2015/10/06 22:15:05 The comments in the header (pasted below) hold tha
kmackay 2015/10/07 16:37:58 Done.
147 start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts());
148 start_clock_ = base::TimeTicks::Now();
149 rate_ = rate;
150 return true;
36 } 151 }
37 152
38 } // namespace media 153 } // namespace media
39 } // namespace chromecast 154 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698