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

Side by Side Diff: media/filters/decoder_selector.cc

Issue 1447533006: media: Pass SetCdmReadyCB in {Audio|Video}Decoder::Initialize(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « media/filters/audio_decoder_unittest.cc ('k') | media/filters/decoder_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "decoder_selector.h" 5 #include "decoder_selector.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 InitializeDecryptingDecoder(); 118 InitializeDecryptingDecoder();
119 #else 119 #else
120 InitializeDecryptingDemuxerStream(); 120 InitializeDecryptingDemuxerStream();
121 #endif 121 #endif
122 } 122 }
123 123
124 #if !defined(OS_ANDROID) 124 #if !defined(OS_ANDROID)
125 template <DemuxerStream::Type StreamType> 125 template <DemuxerStream::Type StreamType>
126 void DecoderSelector<StreamType>::InitializeDecryptingDecoder() { 126 void DecoderSelector<StreamType>::InitializeDecryptingDecoder() {
127 decoder_.reset(new typename StreamTraits::DecryptingDecoderType( 127 decoder_.reset(new typename StreamTraits::DecryptingDecoderType(
128 task_runner_, media_log_, set_cdm_ready_cb_, 128 task_runner_, media_log_, waiting_for_decryption_key_cb_));
129 waiting_for_decryption_key_cb_));
130 129
131 DecoderStreamTraits<StreamType>::InitializeDecoder( 130 DecoderStreamTraits<StreamType>::InitializeDecoder(
132 decoder_.get(), input_stream_, 131 decoder_.get(), input_stream_, set_cdm_ready_cb_,
133 base::Bind(&DecoderSelector<StreamType>::DecryptingDecoderInitDone, 132 base::Bind(&DecoderSelector<StreamType>::DecryptingDecoderInitDone,
134 weak_ptr_factory_.GetWeakPtr()), 133 weak_ptr_factory_.GetWeakPtr()),
135 output_cb_); 134 output_cb_);
136 } 135 }
137 136
138 template <DemuxerStream::Type StreamType> 137 template <DemuxerStream::Type StreamType>
139 void DecoderSelector<StreamType>::DecryptingDecoderInitDone(bool success) { 138 void DecoderSelector<StreamType>::DecryptingDecoderInitDone(bool success) {
140 DVLOG(2) << __FUNCTION__; 139 DVLOG(2) << __FUNCTION__;
141 DCHECK(task_runner_->BelongsToCurrentThread()); 140 DCHECK(task_runner_->BelongsToCurrentThread());
142 141
143 if (success) { 142 if (success) {
144 base::ResetAndReturn(&select_decoder_cb_) 143 base::ResetAndReturn(&select_decoder_cb_)
145 .Run(decoder_.Pass(), scoped_ptr<DecryptingDemuxerStream>()); 144 .Run(decoder_.Pass(), scoped_ptr<DecryptingDemuxerStream>());
146 return; 145 return;
147 } 146 }
148 147
149 decoder_.reset(); 148 decoder_.reset();
150 149
151 // When we get here decrypt-and-decode is not supported. Try to use 150 // When we get here decrypt-and-decode is not supported. Try to use
152 // DecryptingDemuxerStream to do decrypt-only. 151 // DecryptingDemuxerStream to do decrypt-only.
153 InitializeDecryptingDemuxerStream(); 152 InitializeDecryptingDemuxerStream();
154 } 153 }
155 #endif // !defined(OS_ANDROID) 154 #endif // !defined(OS_ANDROID)
156 155
157 template <DemuxerStream::Type StreamType> 156 template <DemuxerStream::Type StreamType>
158 void DecoderSelector<StreamType>::InitializeDecryptingDemuxerStream() { 157 void DecoderSelector<StreamType>::InitializeDecryptingDemuxerStream() {
159 decrypted_stream_.reset( 158 decrypted_stream_.reset(new DecryptingDemuxerStream(
160 new DecryptingDemuxerStream(task_runner_, media_log_, set_cdm_ready_cb_, 159 task_runner_, media_log_, waiting_for_decryption_key_cb_));
161 waiting_for_decryption_key_cb_));
162 160
163 decrypted_stream_->Initialize( 161 decrypted_stream_->Initialize(
164 input_stream_, 162 input_stream_, set_cdm_ready_cb_,
165 base::Bind(&DecoderSelector<StreamType>::DecryptingDemuxerStreamInitDone, 163 base::Bind(&DecoderSelector<StreamType>::DecryptingDemuxerStreamInitDone,
166 weak_ptr_factory_.GetWeakPtr())); 164 weak_ptr_factory_.GetWeakPtr()));
167 } 165 }
168 166
169 template <DemuxerStream::Type StreamType> 167 template <DemuxerStream::Type StreamType>
170 void DecoderSelector<StreamType>::DecryptingDemuxerStreamInitDone( 168 void DecoderSelector<StreamType>::DecryptingDemuxerStreamInitDone(
171 PipelineStatus status) { 169 PipelineStatus status) {
172 DVLOG(2) << __FUNCTION__; 170 DVLOG(2) << __FUNCTION__;
173 DCHECK(task_runner_->BelongsToCurrentThread()); 171 DCHECK(task_runner_->BelongsToCurrentThread());
174 172
(...skipping 21 matching lines...) Expand all
196 194
197 if (decoders_.empty()) { 195 if (decoders_.empty()) {
198 ReturnNullDecoder(); 196 ReturnNullDecoder();
199 return; 197 return;
200 } 198 }
201 199
202 decoder_.reset(decoders_.front()); 200 decoder_.reset(decoders_.front());
203 decoders_.weak_erase(decoders_.begin()); 201 decoders_.weak_erase(decoders_.begin());
204 202
205 DecoderStreamTraits<StreamType>::InitializeDecoder( 203 DecoderStreamTraits<StreamType>::InitializeDecoder(
206 decoder_.get(), input_stream_, 204 decoder_.get(), input_stream_, set_cdm_ready_cb_,
207 base::Bind(&DecoderSelector<StreamType>::DecoderInitDone, 205 base::Bind(&DecoderSelector<StreamType>::DecoderInitDone,
208 weak_ptr_factory_.GetWeakPtr()), 206 weak_ptr_factory_.GetWeakPtr()),
209 output_cb_); 207 output_cb_);
210 } 208 }
211 209
212 template <DemuxerStream::Type StreamType> 210 template <DemuxerStream::Type StreamType>
213 void DecoderSelector<StreamType>::DecoderInitDone(bool success) { 211 void DecoderSelector<StreamType>::DecoderInitDone(bool success) {
214 DVLOG(2) << __FUNCTION__; 212 DVLOG(2) << __FUNCTION__;
215 DCHECK(task_runner_->BelongsToCurrentThread()); 213 DCHECK(task_runner_->BelongsToCurrentThread());
216 214
(...skipping 18 matching lines...) Expand all
235 233
236 // These forward declarations tell the compiler that we will use 234 // These forward declarations tell the compiler that we will use
237 // DecoderSelector with these arguments, allowing us to keep these definitions 235 // DecoderSelector with these arguments, allowing us to keep these definitions
238 // in our .cc without causing linker errors. This also means if anyone tries to 236 // in our .cc without causing linker errors. This also means if anyone tries to
239 // instantiate a DecoderSelector with anything but these two specializations 237 // instantiate a DecoderSelector with anything but these two specializations
240 // they'll most likely get linker errors. 238 // they'll most likely get linker errors.
241 template class DecoderSelector<DemuxerStream::AUDIO>; 239 template class DecoderSelector<DemuxerStream::AUDIO>;
242 template class DecoderSelector<DemuxerStream::VIDEO>; 240 template class DecoderSelector<DemuxerStream::VIDEO>;
243 241
244 } // namespace media 242 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/audio_decoder_unittest.cc ('k') | media/filters/decoder_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698