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

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: Minor style 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
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())
469 return kReachedIdLimit;
470
471 source_id_ = id;
472 return kOk;
473 }
474
475 bool ChunkDemuxer::RemoveId(const std::string& id) {
476 DCHECK(!source_id_.empty());
477 DCHECK_EQ(source_id_, id);
478 source_id_ = "";
479 return true;
480 }
481
482 bool ChunkDemuxer::AppendData(const std::string& id,
483 const uint8* data,
484 size_t length) {
485 DVLOG(1) << "AppendData(" << id << ", " << length << ")";
486
487 // TODO(acolwell): Remove when http://webk.it/83788 fix lands.
488 if (source_id_.empty())
489 AddId(id, kDefaultSourceType);
490
491 DCHECK(!source_id_.empty());
492 DCHECK_EQ(source_id_, id);
493
494 if (id.empty() || !data || length == 0u)
462 return false; 495 return false;
scherkus (not reviewing) 2012/04/23 19:24:17 documentation states false is returned when in an
acolwell GONE FROM CHROMIUM 2012/04/23 22:15:23 Done.
463 496
464 int64 buffered_bytes = 0; 497 int64 buffered_bytes = 0;
465 base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1); 498 base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1);
466 499
467 PipelineStatusCB cb; 500 PipelineStatusCB cb;
468 { 501 {
469 base::AutoLock auto_lock(lock_); 502 base::AutoLock auto_lock(lock_);
470 503
471 byte_queue_.Push(data, length); 504 byte_queue_.Push(data, length);
472 505
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 if (!video_->CanAddBuffers(buffers)) 747 if (!video_->CanAddBuffers(buffers))
715 return false; 748 return false;
716 749
717 video_->AddBuffers(buffers); 750 video_->AddBuffers(buffers);
718 seek_waits_for_data_ = false; 751 seek_waits_for_data_ = false;
719 752
720 return true; 753 return true;
721 } 754 }
722 755
723 } // namespace media 756 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698