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

Unified Diff: media/filters/chunk_demuxer.cc

Issue 19649007: Update the WebMediaSourceClientImpl & ChunkDemuxer to received explicit end of stream cancellation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix build buster caused by rebase. Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: media/filters/chunk_demuxer.cc
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index a70868009b392c7bc1243aaba9b25f84bcc8b130..670a8b08343c34744c465e7304a876c481b34fe4 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -160,8 +160,8 @@ class ChunkDemuxerStream : public DemuxerStream {
bool UpdateAudioConfig(const AudioDecoderConfig& config, const LogCB& log_cb);
bool UpdateVideoConfig(const VideoDecoderConfig& config, const LogCB& log_cb);
- void EndOfStream();
- void CancelEndOfStream();
+ void MarkEndOfStream();
+ void UnmarkEndOfStream();
// DemuxerStream methods.
virtual void Read(const ReadCB& read_cb) OVERRIDE;
@@ -532,14 +532,14 @@ bool ChunkDemuxerStream::UpdateVideoConfig(const VideoDecoderConfig& config,
return stream_->UpdateVideoConfig(config);
}
-void ChunkDemuxerStream::EndOfStream() {
+void ChunkDemuxerStream::MarkEndOfStream() {
base::AutoLock auto_lock(lock_);
- stream_->EndOfStream();
+ stream_->MarkEndOfStream();
}
-void ChunkDemuxerStream::CancelEndOfStream() {
+void ChunkDemuxerStream::UnmarkEndOfStream() {
base::AutoLock auto_lock(lock_);
- stream_->CancelEndOfStream();
+ stream_->UnmarkEndOfStream();
}
// DemuxerStream methods.
@@ -882,21 +882,12 @@ void ChunkDemuxer::AppendData(const std::string& id,
{
base::AutoLock auto_lock(lock_);
+ DCHECK_NE(state_, ENDED);
// Capture if any of the SourceBuffers are waiting for data before we start
// parsing.
bool old_waiting_for_data = IsSeekWaitingForData_Locked();
- if (state_ == ENDED) {
- ChangeState_Locked(INITIALIZED);
-
- if (audio_)
- audio_->CancelEndOfStream();
-
- if (video_)
- video_->CancelEndOfStream();
- }
-
if (length == 0u)
return;
@@ -1022,8 +1013,8 @@ bool ChunkDemuxer::SetTimestampOffset(const std::string& id, TimeDelta offset) {
return source_state_map_[id]->SetTimestampOffset(offset);
}
-void ChunkDemuxer::EndOfStream(PipelineStatus status) {
- DVLOG(1) << "EndOfStream(" << status << ")";
+void ChunkDemuxer::MarkEndOfStream(PipelineStatus status) {
+ DVLOG(1) << "MarkEndOfStream(" << status << ")";
base::AutoLock auto_lock(lock_);
DCHECK_NE(state_, WAITING_FOR_INIT);
DCHECK_NE(state_, ENDED);
@@ -1038,10 +1029,10 @@ void ChunkDemuxer::EndOfStream(PipelineStatus status) {
bool old_waiting_for_data = IsSeekWaitingForData_Locked();
if (audio_)
- audio_->EndOfStream();
+ audio_->MarkEndOfStream();
if (video_)
- video_->EndOfStream();
+ video_->MarkEndOfStream();
CompletePendingReadsIfPossible();
@@ -1060,6 +1051,20 @@ void ChunkDemuxer::EndOfStream(PipelineStatus status) {
}
}
+void ChunkDemuxer::UnmarkEndOfStream() {
+ DVLOG(1) << "UnmarkEndOfStream()";
+ base::AutoLock auto_lock(lock_);
+ DCHECK_EQ(state_, ENDED);
+
+ ChangeState_Locked(INITIALIZED);
+
+ if (audio_)
+ audio_->UnmarkEndOfStream();
+
+ if (video_)
+ video_->UnmarkEndOfStream();
+}
+
void ChunkDemuxer::Shutdown() {
DVLOG(1) << "Shutdown()";
base::AutoLock auto_lock(lock_);

Powered by Google App Engine
This is Rietveld 408576698