| 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 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 text_enabled_(false), | 548 text_enabled_(false), |
| 549 duration_known_(false), | 549 duration_known_(false), |
| 550 need_key_cb_(need_key_cb), | 550 need_key_cb_(need_key_cb), |
| 551 weak_factory_(this) { | 551 weak_factory_(this) { |
| 552 DCHECK(task_runner_.get()); | 552 DCHECK(task_runner_.get()); |
| 553 DCHECK(data_source_); | 553 DCHECK(data_source_); |
| 554 } | 554 } |
| 555 | 555 |
| 556 FFmpegDemuxer::~FFmpegDemuxer() {} | 556 FFmpegDemuxer::~FFmpegDemuxer() {} |
| 557 | 557 |
| 558 void FFmpegDemuxer::Stop(const base::Closure& callback) { | 558 void FFmpegDemuxer::Stop() { |
| 559 DCHECK(task_runner_->BelongsToCurrentThread()); | 559 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 560 url_protocol_->Abort(); | 560 url_protocol_->Abort(); |
| 561 data_source_->Stop(); | 561 data_source_->Stop(); |
| 562 | 562 |
| 563 // This will block until all tasks complete. Note that after this returns it's | 563 // This will block until all tasks complete. Note that after this returns it's |
| 564 // possible for reply tasks (e.g., OnReadFrameDone()) to be queued on this | 564 // possible for reply tasks (e.g., OnReadFrameDone()) to be queued on this |
| 565 // thread. Each of the reply task methods must check whether we've stopped the | 565 // thread. Each of the reply task methods must check whether we've stopped the |
| 566 // thread and drop their results on the floor. | 566 // thread and drop their results on the floor. |
| 567 blocking_thread_.Stop(); | 567 blocking_thread_.Stop(); |
| 568 | 568 |
| 569 StreamVector::iterator iter; | 569 StreamVector::iterator iter; |
| 570 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { | 570 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { |
| 571 if (*iter) | 571 if (*iter) |
| 572 (*iter)->Stop(); | 572 (*iter)->Stop(); |
| 573 } | 573 } |
| 574 | 574 |
| 575 data_source_ = NULL; | 575 data_source_ = NULL; |
| 576 task_runner_->PostTask(FROM_HERE, callback); | |
| 577 } | 576 } |
| 578 | 577 |
| 579 void FFmpegDemuxer::Seek(base::TimeDelta time, const PipelineStatusCB& cb) { | 578 void FFmpegDemuxer::Seek(base::TimeDelta time, const PipelineStatusCB& cb) { |
| 580 DCHECK(task_runner_->BelongsToCurrentThread()); | 579 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 581 CHECK(!pending_seek_); | 580 CHECK(!pending_seek_); |
| 582 | 581 |
| 583 // TODO(scherkus): Inspect |pending_read_| and cancel IO via |blocking_url_|, | 582 // TODO(scherkus): Inspect |pending_read_| and cancel IO via |blocking_url_|, |
| 584 // otherwise we can end up waiting for a pre-seek read to complete even though | 583 // otherwise we can end up waiting for a pre-seek read to complete even though |
| 585 // we know we're going to drop it on the floor. | 584 // we know we're going to drop it on the floor. |
| 586 | 585 |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1227 } | 1226 } |
| 1228 for (size_t i = 0; i < buffered.size(); ++i) | 1227 for (size_t i = 0; i < buffered.size(); ++i) |
| 1229 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); | 1228 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); |
| 1230 } | 1229 } |
| 1231 | 1230 |
| 1232 void FFmpegDemuxer::OnDataSourceError() { | 1231 void FFmpegDemuxer::OnDataSourceError() { |
| 1233 host_->OnDemuxerError(PIPELINE_ERROR_READ); | 1232 host_->OnDemuxerError(PIPELINE_ERROR_READ); |
| 1234 } | 1233 } |
| 1235 | 1234 |
| 1236 } // namespace media | 1235 } // namespace media |
| OLD | NEW |