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

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

Issue 10164017: Implement sourceAddId() & sourceRemoveId() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address CR comments 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"
11 #include "media/base/data_buffer.h" 11 #include "media/base/data_buffer.h"
12 #include "media/base/video_decoder_config.h" 12 #include "media/base/video_decoder_config.h"
13 #include "media/filters/chunk_demuxer_client.h" 13 #include "media/filters/chunk_demuxer_client.h"
14 #include "media/webm/webm_stream_parser.h" 14 #include "media/webm/webm_stream_parser.h"
15 15
16 namespace media { 16 namespace media {
17 17
18 // TODO(acolwell): Remove this when fixing http://crbug.com/122909 .
19 const char* kDefaultSourceType = "video/webm; codecs=\"vp8, vorbis\"";
20
18 // Create an "end of stream" buffer. 21 // Create an "end of stream" buffer.
19 static Buffer* CreateEOSBuffer() { 22 static Buffer* CreateEOSBuffer() {
20 return new DataBuffer(0); 23 return new DataBuffer(0);
21 } 24 }
22 25
23 class ChunkDemuxerStream : public DemuxerStream { 26 class ChunkDemuxerStream : public DemuxerStream {
24 public: 27 public:
25 typedef std::deque<scoped_refptr<Buffer> > BufferQueue; 28 typedef std::deque<scoped_refptr<Buffer> > BufferQueue;
26 typedef std::deque<ReadCB> ReadCBQueue; 29 typedef std::deque<ReadCB> ReadCBQueue;
27 typedef std::deque<base::Closure> ClosureQueue; 30 typedef std::deque<base::Closure> ClosureQueue;
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 if (video_.get()) 451 if (video_.get())
449 video_->Flush(); 452 video_->Flush();
450 453
451 byte_queue_.Reset(); 454 byte_queue_.Reset();
452 stream_parser_->Flush(); 455 stream_parser_->Flush();
453 456
454 seek_waits_for_data_ = true; 457 seek_waits_for_data_ = true;
455 ChangeState_Locked(INITIALIZED); 458 ChangeState_Locked(INITIALIZED);
456 } 459 }
457 460
458 bool ChunkDemuxer::AppendData(const uint8* data, size_t length) { 461 ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id,
459 DVLOG(1) << "AppendData(" << length << ")"; 462 const std::string& type) {
463 // TODO(acolwell): Proper mimetype decoding and support for more than one ID
464 // will be added as part of http://crbug.com/122909
465 if (type != kDefaultSourceType)
466 return kNotSupported;
460 467
461 if (!data || length == 0u) 468 if (!source_id_.empty())
462 return false; 469 return kReachedIdLimit;
470
471 source_id_ = id;
472 return kOk;
473 }
474
475 void ChunkDemuxer::RemoveId(const std::string& id) {
476 CHECK(!source_id_.empty());
477 CHECK_EQ(source_id_, id);
478 source_id_ = "";
479 }
480
481 bool ChunkDemuxer::AppendData(const std::string& id,
482 const uint8* data,
483 size_t length) {
484 DVLOG(1) << "AppendData(" << id << ", " << length << ")";
485
486 // TODO(acolwell): Remove when http://webk.it/83788 fix lands.
487 if (source_id_.empty())
488 AddId(id, kDefaultSourceType);
489
490 DCHECK(!source_id_.empty());
491 DCHECK_EQ(source_id_, id);
492 DCHECK(!id.empty());
493 DCHECK(data);
494 DCHECK_GT(length, 0u);
463 495
464 int64 buffered_bytes = 0; 496 int64 buffered_bytes = 0;
465 base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1); 497 base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1);
466 498
467 PipelineStatusCB cb; 499 PipelineStatusCB cb;
468 { 500 {
469 base::AutoLock auto_lock(lock_); 501 base::AutoLock auto_lock(lock_);
470 502
471 byte_queue_.Push(data, length); 503 byte_queue_.Push(data, length);
472 504
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 if (!video_->CanAddBuffers(buffers)) 746 if (!video_->CanAddBuffers(buffers))
715 return false; 747 return false;
716 748
717 video_->AddBuffers(buffers); 749 video_->AddBuffers(buffers);
718 seek_waits_for_data_ = false; 750 seek_waits_for_data_ = false;
719 751
720 return true; 752 return true;
721 } 753 }
722 754
723 } // namespace media 755 } // 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