| 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 <cstdlib> | 7 #include <cstdlib> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 const base::TimeDelta& timestamp_2) { | 29 const base::TimeDelta& timestamp_2) { |
| 30 // Out of sync of 100ms would be pretty noticeable and we should keep any | 30 // Out of sync of 100ms would be pretty noticeable and we should keep any |
| 31 // drift below that. | 31 // drift below that. |
| 32 const int64 kOutOfSyncThresholdInMicroseconds = 100000; | 32 const int64 kOutOfSyncThresholdInMicroseconds = 100000; |
| 33 return std::abs(timestamp_1.InMicroseconds() - timestamp_2.InMicroseconds()) > | 33 return std::abs(timestamp_1.InMicroseconds() - timestamp_2.InMicroseconds()) > |
| 34 kOutOfSyncThresholdInMicroseconds; | 34 kOutOfSyncThresholdInMicroseconds; |
| 35 } | 35 } |
| 36 | 36 |
| 37 DecryptingAudioDecoder::DecryptingAudioDecoder( | 37 DecryptingAudioDecoder::DecryptingAudioDecoder( |
| 38 const scoped_refptr<base::MessageLoopProxy>& message_loop, | 38 const scoped_refptr<base::MessageLoopProxy>& message_loop, |
| 39 const RequestDecryptorNotificationCB& request_decryptor_notification_cb) | 39 const SetDecryptorReadyCB& set_decryptor_ready_cb) |
| 40 : message_loop_(message_loop), | 40 : message_loop_(message_loop), |
| 41 state_(kUninitialized), | 41 state_(kUninitialized), |
| 42 request_decryptor_notification_cb_(request_decryptor_notification_cb), | 42 set_decryptor_ready_cb_(set_decryptor_ready_cb), |
| 43 decryptor_(NULL), | 43 decryptor_(NULL), |
| 44 key_added_while_decode_pending_(false), | 44 key_added_while_decode_pending_(false), |
| 45 bits_per_channel_(0), | 45 bits_per_channel_(0), |
| 46 channel_layout_(CHANNEL_LAYOUT_NONE), | 46 channel_layout_(CHANNEL_LAYOUT_NONE), |
| 47 samples_per_second_(0), | 47 samples_per_second_(0), |
| 48 bytes_per_sample_(0), | 48 bytes_per_sample_(0), |
| 49 output_timestamp_base_(kNoTimestamp()), | 49 output_timestamp_base_(kNoTimestamp()), |
| 50 total_samples_decoded_(0) { | 50 total_samples_decoded_(0) { |
| 51 } | 51 } |
| 52 | 52 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 return; | 146 return; |
| 147 } | 147 } |
| 148 | 148 |
| 149 DCHECK(!demuxer_stream_); | 149 DCHECK(!demuxer_stream_); |
| 150 demuxer_stream_ = stream; | 150 demuxer_stream_ = stream; |
| 151 statistics_cb_ = statistics_cb; | 151 statistics_cb_ = statistics_cb; |
| 152 | 152 |
| 153 init_cb_ = status_cb; | 153 init_cb_ = status_cb; |
| 154 | 154 |
| 155 state_ = kDecryptorRequested; | 155 state_ = kDecryptorRequested; |
| 156 request_decryptor_notification_cb_.Run( | 156 set_decryptor_ready_cb_.Run( |
| 157 BIND_TO_LOOP(&DecryptingAudioDecoder::SetDecryptor)); | 157 BIND_TO_LOOP(&DecryptingAudioDecoder::SetDecryptor)); |
| 158 } | 158 } |
| 159 | 159 |
| 160 void DecryptingAudioDecoder::SetDecryptor(Decryptor* decryptor) { | 160 void DecryptingAudioDecoder::SetDecryptor(Decryptor* decryptor) { |
| 161 DVLOG(2) << "SetDecryptor()"; | 161 DVLOG(2) << "SetDecryptor()"; |
| 162 DCHECK(message_loop_->BelongsToCurrentThread()); | 162 DCHECK(message_loop_->BelongsToCurrentThread()); |
| 163 DCHECK_EQ(state_, kDecryptorRequested) << state_; | 163 DCHECK_EQ(state_, kDecryptorRequested) << state_; |
| 164 DCHECK(!init_cb_.is_null()); | 164 DCHECK(!init_cb_.is_null()); |
| 165 DCHECK(!request_decryptor_notification_cb_.is_null()); | 165 DCHECK(!set_decryptor_ready_cb_.is_null()); |
| 166 | 166 |
| 167 request_decryptor_notification_cb_.Reset(); | 167 set_decryptor_ready_cb_.Reset(); |
| 168 decryptor_ = decryptor; | 168 decryptor_ = decryptor; |
| 169 | 169 |
| 170 scoped_ptr<AudioDecoderConfig> scoped_config(new AudioDecoderConfig()); | 170 scoped_ptr<AudioDecoderConfig> scoped_config(new AudioDecoderConfig()); |
| 171 scoped_config->CopyFrom(demuxer_stream_->audio_decoder_config()); | 171 scoped_config->CopyFrom(demuxer_stream_->audio_decoder_config()); |
| 172 | 172 |
| 173 state_ = kPendingDecoderInit; | 173 state_ = kPendingDecoderInit; |
| 174 decryptor_->InitializeAudioDecoder( | 174 decryptor_->InitializeAudioDecoder( |
| 175 scoped_config.Pass(), | 175 scoped_config.Pass(), |
| 176 BIND_TO_LOOP(&DecryptingAudioDecoder::FinishInitialization)); | 176 BIND_TO_LOOP(&DecryptingAudioDecoder::FinishInitialization)); |
| 177 } | 177 } |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 | 452 |
| 453 base::TimeDelta DecryptingAudioDecoder::NumberOfSamplesToDuration( | 453 base::TimeDelta DecryptingAudioDecoder::NumberOfSamplesToDuration( |
| 454 int number_of_samples) const { | 454 int number_of_samples) const { |
| 455 DCHECK(samples_per_second_); | 455 DCHECK(samples_per_second_); |
| 456 return base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond * | 456 return base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond * |
| 457 number_of_samples / | 457 number_of_samples / |
| 458 samples_per_second_); | 458 samples_per_second_); |
| 459 } | 459 } |
| 460 | 460 |
| 461 } // namespace media | 461 } // namespace media |
| OLD | NEW |