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/ffmpeg_demuxer.h" | 5 #include "media/filters/ffmpeg_demuxer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 if (!key || !key->value) | 158 if (!key || !key->value) |
159 return; | 159 return; |
160 base::StringPiece base64_key_id(key->value); | 160 base::StringPiece base64_key_id(key->value); |
161 std::string enc_key_id; | 161 std::string enc_key_id; |
162 base::Base64Decode(base64_key_id, &enc_key_id); | 162 base::Base64Decode(base64_key_id, &enc_key_id); |
163 DCHECK(!enc_key_id.empty()); | 163 DCHECK(!enc_key_id.empty()); |
164 if (enc_key_id.empty()) | 164 if (enc_key_id.empty()) |
165 return; | 165 return; |
166 | 166 |
167 encryption_key_id_.assign(enc_key_id); | 167 encryption_key_id_.assign(enc_key_id); |
168 demuxer_->FireNeedKey(kWebMInitDataType, enc_key_id); | 168 demuxer_->OnEncryptedMediaInitData(kWebMInitDataType, enc_key_id); |
169 } | 169 } |
170 } | 170 } |
171 | 171 |
172 FFmpegDemuxerStream::~FFmpegDemuxerStream() { | 172 FFmpegDemuxerStream::~FFmpegDemuxerStream() { |
173 DCHECK(!demuxer_); | 173 DCHECK(!demuxer_); |
174 DCHECK(read_cb_.is_null()); | 174 DCHECK(read_cb_.is_null()); |
175 DCHECK(buffer_queue_.IsEmpty()); | 175 DCHECK(buffer_queue_.IsEmpty()); |
176 } | 176 } |
177 | 177 |
178 void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { | 178 void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 | 563 |
564 return ConvertFromTimeBase(time_base, timestamp); | 564 return ConvertFromTimeBase(time_base, timestamp); |
565 } | 565 } |
566 | 566 |
567 // | 567 // |
568 // FFmpegDemuxer | 568 // FFmpegDemuxer |
569 // | 569 // |
570 FFmpegDemuxer::FFmpegDemuxer( | 570 FFmpegDemuxer::FFmpegDemuxer( |
571 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 571 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
572 DataSource* data_source, | 572 DataSource* data_source, |
573 const NeedKeyCB& need_key_cb, | 573 const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, |
574 const scoped_refptr<MediaLog>& media_log) | 574 const scoped_refptr<MediaLog>& media_log) |
575 : host_(NULL), | 575 : host_(NULL), |
576 task_runner_(task_runner), | 576 task_runner_(task_runner), |
577 blocking_thread_("FFmpegDemuxer"), | 577 blocking_thread_("FFmpegDemuxer"), |
578 pending_read_(false), | 578 pending_read_(false), |
579 pending_seek_(false), | 579 pending_seek_(false), |
580 data_source_(data_source), | 580 data_source_(data_source), |
581 media_log_(media_log), | 581 media_log_(media_log), |
582 bitrate_(0), | 582 bitrate_(0), |
583 start_time_(kNoTimestamp()), | 583 start_time_(kNoTimestamp()), |
584 preferred_stream_for_seeking_(-1, kNoTimestamp()), | 584 preferred_stream_for_seeking_(-1, kNoTimestamp()), |
585 fallback_stream_for_seeking_(-1, kNoTimestamp()), | 585 fallback_stream_for_seeking_(-1, kNoTimestamp()), |
586 text_enabled_(false), | 586 text_enabled_(false), |
587 duration_known_(false), | 587 duration_known_(false), |
588 need_key_cb_(need_key_cb), | 588 encrypted_media_init_data_cb_(encrypted_media_init_data_cb), |
589 weak_factory_(this) { | 589 weak_factory_(this) { |
590 DCHECK(task_runner_.get()); | 590 DCHECK(task_runner_.get()); |
591 DCHECK(data_source_); | 591 DCHECK(data_source_); |
592 } | 592 } |
593 | 593 |
594 FFmpegDemuxer::~FFmpegDemuxer() {} | 594 FFmpegDemuxer::~FFmpegDemuxer() {} |
595 | 595 |
596 void FFmpegDemuxer::Stop() { | 596 void FFmpegDemuxer::Stop() { |
597 DCHECK(task_runner_->BelongsToCurrentThread()); | 597 DCHECK(task_runner_->BelongsToCurrentThread()); |
598 | 598 |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1244 void FFmpegDemuxer::StreamHasEnded() { | 1244 void FFmpegDemuxer::StreamHasEnded() { |
1245 DCHECK(task_runner_->BelongsToCurrentThread()); | 1245 DCHECK(task_runner_->BelongsToCurrentThread()); |
1246 StreamVector::iterator iter; | 1246 StreamVector::iterator iter; |
1247 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { | 1247 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { |
1248 if (!*iter) | 1248 if (!*iter) |
1249 continue; | 1249 continue; |
1250 (*iter)->SetEndOfStream(); | 1250 (*iter)->SetEndOfStream(); |
1251 } | 1251 } |
1252 } | 1252 } |
1253 | 1253 |
1254 void FFmpegDemuxer::FireNeedKey(const std::string& init_data_type, | 1254 void FFmpegDemuxer::OnEncryptedMediaInitData( |
1255 const std::string& encryption_key_id) { | 1255 const std::string& init_data_type, |
| 1256 const std::string& encryption_key_id) { |
1256 std::vector<uint8> key_id_local(encryption_key_id.begin(), | 1257 std::vector<uint8> key_id_local(encryption_key_id.begin(), |
1257 encryption_key_id.end()); | 1258 encryption_key_id.end()); |
1258 need_key_cb_.Run(init_data_type, key_id_local); | 1259 encrypted_media_init_data_cb_.Run(init_data_type, key_id_local); |
1259 } | 1260 } |
1260 | 1261 |
1261 void FFmpegDemuxer::NotifyCapacityAvailable() { | 1262 void FFmpegDemuxer::NotifyCapacityAvailable() { |
1262 DCHECK(task_runner_->BelongsToCurrentThread()); | 1263 DCHECK(task_runner_->BelongsToCurrentThread()); |
1263 ReadFrameIfNeeded(); | 1264 ReadFrameIfNeeded(); |
1264 } | 1265 } |
1265 | 1266 |
1266 void FFmpegDemuxer::NotifyBufferingChanged() { | 1267 void FFmpegDemuxer::NotifyBufferingChanged() { |
1267 DCHECK(task_runner_->BelongsToCurrentThread()); | 1268 DCHECK(task_runner_->BelongsToCurrentThread()); |
1268 Ranges<base::TimeDelta> buffered; | 1269 Ranges<base::TimeDelta> buffered; |
(...skipping 17 matching lines...) Expand all Loading... |
1286 | 1287 |
1287 void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) { | 1288 void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) { |
1288 DCHECK(task_runner_->BelongsToCurrentThread()); | 1289 DCHECK(task_runner_->BelongsToCurrentThread()); |
1289 for (const auto& stream : streams_) { // |stream| is a ref to a pointer. | 1290 for (const auto& stream : streams_) { // |stream| is a ref to a pointer. |
1290 if (stream) | 1291 if (stream) |
1291 stream->SetLiveness(liveness); | 1292 stream->SetLiveness(liveness); |
1292 } | 1293 } |
1293 } | 1294 } |
1294 | 1295 |
1295 } // namespace media | 1296 } // namespace media |
OLD | NEW |