Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(368)

Side by Side Diff: media/filters/chunk_demuxer.cc

Issue 9968117: Move Demuxer::set_host() to Initialize(). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: fixes Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/chunk_demuxer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/chunk_demuxer.h" 5 #include "media/filters/chunk_demuxer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "media/base/audio_decoder_config.h" 10 #include "media/base/audio_decoder_config.h"
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 while (!read_cbs_.empty()) { 326 while (!read_cbs_.empty()) {
327 closures->push_back(base::Bind(read_cbs_.front(), end_of_stream_buffer)); 327 closures->push_back(base::Bind(read_cbs_.front(), end_of_stream_buffer));
328 read_cbs_.pop_front(); 328 read_cbs_.pop_front();
329 } 329 }
330 330
331 ChangeState_Locked(RETURNING_EOS_FOR_READS); 331 ChangeState_Locked(RETURNING_EOS_FOR_READS);
332 } 332 }
333 333
334 ChunkDemuxer::ChunkDemuxer(ChunkDemuxerClient* client) 334 ChunkDemuxer::ChunkDemuxer(ChunkDemuxerClient* client)
335 : state_(WAITING_FOR_INIT), 335 : state_(WAITING_FOR_INIT),
336 host_(NULL),
336 client_(client), 337 client_(client),
337 buffered_bytes_(0), 338 buffered_bytes_(0),
338 seek_waits_for_data_(true) { 339 seek_waits_for_data_(true) {
339 DCHECK(client); 340 DCHECK(client);
340 } 341 }
341 342
342 ChunkDemuxer::~ChunkDemuxer() { 343 ChunkDemuxer::~ChunkDemuxer() {
343 DCHECK_NE(state_, INITIALIZED); 344 DCHECK_NE(state_, INITIALIZED);
344 } 345 }
345 346
346 void ChunkDemuxer::Initialize(const PipelineStatusCB& cb) { 347 void ChunkDemuxer::Initialize(DemuxerHost* host,
348 const PipelineStatusCB& cb) {
347 DVLOG(1) << "Init()"; 349 DVLOG(1) << "Init()";
348 { 350 {
349 base::AutoLock auto_lock(lock_); 351 base::AutoLock auto_lock(lock_);
350 DCHECK_EQ(state_, WAITING_FOR_INIT); 352 DCHECK_EQ(state_, WAITING_FOR_INIT);
353 host_ = host;
351 354
352 ChangeState_Locked(INITIALIZING); 355 ChangeState_Locked(INITIALIZING);
353 init_cb_ = cb; 356 init_cb_ = cb;
354 stream_parser_.reset(new WebMStreamParser()); 357 stream_parser_.reset(new WebMStreamParser());
355 358
356 stream_parser_->Init( 359 stream_parser_->Init(
357 base::Bind(&ChunkDemuxer::OnStreamParserInitDone, this), 360 base::Bind(&ChunkDemuxer::OnStreamParserInitDone, this),
358 this); 361 this);
359 } 362 }
360 363
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 533
531 if (video_.get() && video_->GetLastBufferTimestamp(&tmp) && 534 if (video_.get() && video_->GetLastBufferTimestamp(&tmp) &&
532 tmp > buffered_ts) { 535 tmp > buffered_ts) {
533 buffered_ts = tmp; 536 buffered_ts = tmp;
534 } 537 }
535 538
536 buffered_bytes = buffered_bytes_; 539 buffered_bytes = buffered_bytes_;
537 } 540 }
538 541
539 // Notify the host of 'network activity' because we got data. 542 // Notify the host of 'network activity' because we got data.
540 host()->SetBufferedBytes(buffered_bytes); 543 host_->SetBufferedBytes(buffered_bytes);
541 544
542 if (buffered_ts.InSeconds() >= 0) { 545 if (buffered_ts.InSeconds() >= 0) {
543 host()->SetBufferedTime(buffered_ts); 546 host_->SetBufferedTime(buffered_ts);
544 } 547 }
545 548
546 host()->SetNetworkActivity(true); 549 host_->SetNetworkActivity(true);
547 550
548 if (!cb.is_null()) 551 if (!cb.is_null())
549 cb.Run(PIPELINE_OK); 552 cb.Run(PIPELINE_OK);
550 553
551 return true; 554 return true;
552 } 555 }
553 556
554 void ChunkDemuxer::EndOfStream(PipelineStatus status) { 557 void ChunkDemuxer::EndOfStream(PipelineStatus status) {
555 DVLOG(1) << "EndOfStream(" << status << ")"; 558 DVLOG(1) << "EndOfStream(" << status << ")";
556 base::AutoLock auto_lock(lock_); 559 base::AutoLock auto_lock(lock_);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 video_->Shutdown(); 645 video_->Shutdown();
643 } 646 }
644 647
645 if (!cb.is_null()) { 648 if (!cb.is_null()) {
646 base::AutoUnlock auto_unlock(lock_); 649 base::AutoUnlock auto_unlock(lock_);
647 cb.Run(error); 650 cb.Run(error);
648 return; 651 return;
649 } 652 }
650 653
651 base::AutoUnlock auto_unlock(lock_); 654 base::AutoUnlock auto_unlock(lock_);
652 host()->OnDemuxerError(error); 655 host_->OnDemuxerError(error);
653 } 656 }
654 657
655 void ChunkDemuxer::OnStreamParserInitDone(bool success, 658 void ChunkDemuxer::OnStreamParserInitDone(bool success,
656 base::TimeDelta duration) { 659 base::TimeDelta duration) {
657 lock_.AssertAcquired(); 660 lock_.AssertAcquired();
658 DCHECK_EQ(state_, INITIALIZING); 661 DCHECK_EQ(state_, INITIALIZING);
659 if (!success || (!audio_.get() && !video_.get())) { 662 if (!success || (!audio_.get() && !video_.get())) {
660 ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); 663 ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN);
661 return; 664 return;
662 } 665 }
663 666
664 duration_ = duration; 667 duration_ = duration;
665 host()->SetDuration(duration_); 668 host_->SetDuration(duration_);
666 host()->SetCurrentReadPosition(0); 669 host_->SetCurrentReadPosition(0);
667 670
668 ChangeState_Locked(INITIALIZED); 671 ChangeState_Locked(INITIALIZED);
669 PipelineStatusCB cb; 672 PipelineStatusCB cb;
670 std::swap(cb, init_cb_); 673 std::swap(cb, init_cb_);
671 cb.Run(PIPELINE_OK); 674 cb.Run(PIPELINE_OK);
672 } 675 }
673 676
674 bool ChunkDemuxer::OnNewAudioConfig(const AudioDecoderConfig& config) { 677 bool ChunkDemuxer::OnNewAudioConfig(const AudioDecoderConfig& config) {
675 lock_.AssertAcquired(); 678 lock_.AssertAcquired();
676 // Only allow a single audio config for now. 679 // Only allow a single audio config for now.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 if (!video_->CanAddBuffers(buffers)) 714 if (!video_->CanAddBuffers(buffers))
712 return false; 715 return false;
713 716
714 video_->AddBuffers(buffers); 717 video_->AddBuffers(buffers);
715 seek_waits_for_data_ = false; 718 seek_waits_for_data_ = false;
716 719
717 return true; 720 return true;
718 } 721 }
719 722
720 } // namespace media 723 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/chunk_demuxer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698