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/decrypting_audio_decoder.h" | 5 #include "media/filters/decrypting_audio_decoder.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <cstdlib> | 9 #include <cstdlib> |
10 | 10 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 } | 51 } |
52 | 52 |
53 void DecryptingAudioDecoder::Initialize(const AudioDecoderConfig& config, | 53 void DecryptingAudioDecoder::Initialize(const AudioDecoderConfig& config, |
54 CdmContext* cdm_context, | 54 CdmContext* cdm_context, |
55 const InitCB& init_cb, | 55 const InitCB& init_cb, |
56 const OutputCB& output_cb) { | 56 const OutputCB& output_cb) { |
57 DVLOG(2) << "Initialize()"; | 57 DVLOG(2) << "Initialize()"; |
58 DCHECK(task_runner_->BelongsToCurrentThread()); | 58 DCHECK(task_runner_->BelongsToCurrentThread()); |
59 DCHECK(decode_cb_.is_null()); | 59 DCHECK(decode_cb_.is_null()); |
60 DCHECK(reset_cb_.is_null()); | 60 DCHECK(reset_cb_.is_null()); |
| 61 DCHECK(cdm_context); |
61 | 62 |
62 weak_this_ = weak_factory_.GetWeakPtr(); | 63 weak_this_ = weak_factory_.GetWeakPtr(); |
63 init_cb_ = BindToCurrentLoop(init_cb); | 64 init_cb_ = BindToCurrentLoop(init_cb); |
64 output_cb_ = BindToCurrentLoop(output_cb); | 65 output_cb_ = BindToCurrentLoop(output_cb); |
65 | 66 |
66 // TODO(xhwang): We should be able to DCHECK config.IsValidConfig(). | 67 // TODO(xhwang): We should be able to DCHECK config.IsValidConfig(). |
67 if (!config.IsValidConfig()) { | 68 if (!config.IsValidConfig()) { |
68 DLOG(ERROR) << "Invalid audio stream config."; | 69 DLOG(ERROR) << "Invalid audio stream config."; |
69 base::ResetAndReturn(&init_cb_).Run(false); | 70 base::ResetAndReturn(&init_cb_).Run(false); |
70 return; | 71 return; |
71 } | 72 } |
72 | 73 |
73 config_ = config; | 74 config_ = config; |
74 | 75 |
75 if (state_ == kUninitialized) { | 76 if (state_ == kUninitialized) { |
76 // DecoderSelector only chooses |this| when the stream is encrypted. | |
77 // TODO(xhwang): We may also select this decoder for clear stream if a CDM | |
78 // is attached. Then we need to update this. See http://crbug.com/597443 | |
79 DCHECK(config.is_encrypted()); | |
80 DCHECK(cdm_context); | |
81 if (!cdm_context->GetDecryptor()) { | 77 if (!cdm_context->GetDecryptor()) { |
82 MEDIA_LOG(DEBUG, media_log_) << GetDisplayName() << ": no decryptor"; | 78 MEDIA_LOG(DEBUG, media_log_) << GetDisplayName() << ": no decryptor"; |
83 base::ResetAndReturn(&init_cb_).Run(false); | 79 base::ResetAndReturn(&init_cb_).Run(false); |
84 return; | 80 return; |
85 } | 81 } |
86 | 82 |
87 decryptor_ = cdm_context->GetDecryptor(); | 83 decryptor_ = cdm_context->GetDecryptor(); |
88 } else { | 84 } else { |
89 // Reinitialization (i.e. upon a config change). The new config can be | 85 // Reinitialization (i.e. upon a config change). The new config can be |
90 // encrypted or clear. | 86 // encrypted or clear. |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 } | 350 } |
355 | 351 |
356 frame->set_timestamp(current_time); | 352 frame->set_timestamp(current_time); |
357 timestamp_helper_->AddFrames(frame->frame_count()); | 353 timestamp_helper_->AddFrames(frame->frame_count()); |
358 | 354 |
359 output_cb_.Run(frame); | 355 output_cb_.Run(frame); |
360 } | 356 } |
361 } | 357 } |
362 | 358 |
363 } // namespace media | 359 } // namespace media |
OLD | NEW |