OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/filters/vpx_video_decoder.h" | 5 #include "media/filters/vpx_video_decoder.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 DCHECK(task_runner_->BelongsToCurrentThread()); | 202 DCHECK(task_runner_->BelongsToCurrentThread()); |
203 CloseDecoder(); | 203 CloseDecoder(); |
204 } | 204 } |
205 | 205 |
206 std::string VpxVideoDecoder::GetDisplayName() const { | 206 std::string VpxVideoDecoder::GetDisplayName() const { |
207 return "VpxVideoDecoder"; | 207 return "VpxVideoDecoder"; |
208 } | 208 } |
209 | 209 |
210 void VpxVideoDecoder::Initialize(const VideoDecoderConfig& config, | 210 void VpxVideoDecoder::Initialize(const VideoDecoderConfig& config, |
211 bool low_delay, | 211 bool low_delay, |
212 const PipelineStatusCB& status_cb, | 212 const InitCB& init_cb, |
213 const OutputCB& output_cb) { | 213 const OutputCB& output_cb) { |
214 DCHECK(task_runner_->BelongsToCurrentThread()); | 214 DCHECK(task_runner_->BelongsToCurrentThread()); |
215 DCHECK(config.IsValidConfig()); | 215 DCHECK(config.IsValidConfig()); |
216 DCHECK(!config.is_encrypted()); | 216 DCHECK(!config.is_encrypted()); |
217 DCHECK(decode_cb_.is_null()); | 217 DCHECK(decode_cb_.is_null()); |
218 | 218 |
| 219 InitCB bound_init_cb = BindToCurrentLoop(init_cb); |
| 220 |
219 if (!ConfigureDecoder(config)) { | 221 if (!ConfigureDecoder(config)) { |
220 status_cb.Run(DECODER_ERROR_NOT_SUPPORTED); | 222 bound_init_cb.Run(false); |
221 return; | 223 return; |
222 } | 224 } |
223 | 225 |
224 // Success! | 226 // Success! |
225 config_ = config; | 227 config_ = config; |
226 state_ = kNormal; | 228 state_ = kNormal; |
227 output_cb_ = BindToCurrentLoop(output_cb); | 229 output_cb_ = BindToCurrentLoop(output_cb); |
228 status_cb.Run(PIPELINE_OK); | 230 bound_init_cb.Run(true); |
229 } | 231 } |
230 | 232 |
231 static vpx_codec_ctx* InitializeVpxContext(vpx_codec_ctx* context, | 233 static vpx_codec_ctx* InitializeVpxContext(vpx_codec_ctx* context, |
232 const VideoDecoderConfig& config) { | 234 const VideoDecoderConfig& config) { |
233 context = new vpx_codec_ctx(); | 235 context = new vpx_codec_ctx(); |
234 vpx_codec_dec_cfg_t vpx_config = {0}; | 236 vpx_codec_dec_cfg_t vpx_config = {0}; |
235 vpx_config.w = config.coded_size().width(); | 237 vpx_config.w = config.coded_size().width(); |
236 vpx_config.h = config.coded_size().height(); | 238 vpx_config.h = config.coded_size().height(); |
237 vpx_config.threads = GetThreadCount(config); | 239 vpx_config.threads = GetThreadCount(config); |
238 | 240 |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 vpx_image->stride[VPX_PLANE_Y], vpx_image->d_h, video_frame->get()); | 526 vpx_image->stride[VPX_PLANE_Y], vpx_image->d_h, video_frame->get()); |
525 return; | 527 return; |
526 } | 528 } |
527 CopyAPlane(vpx_image_alpha->planes[VPX_PLANE_Y], | 529 CopyAPlane(vpx_image_alpha->planes[VPX_PLANE_Y], |
528 vpx_image_alpha->stride[VPX_PLANE_Y], | 530 vpx_image_alpha->stride[VPX_PLANE_Y], |
529 vpx_image_alpha->d_h, | 531 vpx_image_alpha->d_h, |
530 video_frame->get()); | 532 video_frame->get()); |
531 } | 533 } |
532 | 534 |
533 } // namespace media | 535 } // namespace media |
OLD | NEW |