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

Side by Side Diff: media/base/pipeline.cc

Issue 710693003: Report PIPELINE_ERROR_DECODE when SourceState::Append fails. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 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
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/base/pipeline.h" 5 #include "media/base/pipeline.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 21 matching lines...) Expand all
32 Pipeline::Pipeline( 32 Pipeline::Pipeline(
33 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 33 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
34 MediaLog* media_log) 34 MediaLog* media_log)
35 : task_runner_(task_runner), 35 : task_runner_(task_runner),
36 media_log_(media_log), 36 media_log_(media_log),
37 running_(false), 37 running_(false),
38 did_loading_progress_(false), 38 did_loading_progress_(false),
39 volume_(1.0f), 39 volume_(1.0f),
40 playback_rate_(0.0f), 40 playback_rate_(0.0f),
41 status_(PIPELINE_OK), 41 status_(PIPELINE_OK),
42 is_initialized_(false),
43 state_(kCreated), 42 state_(kCreated),
44 renderer_ended_(false), 43 renderer_ended_(false),
45 text_renderer_ended_(false), 44 text_renderer_ended_(false),
46 demuxer_(NULL), 45 demuxer_(NULL),
47 pending_cdm_context_(nullptr), 46 pending_cdm_context_(nullptr),
48 weak_factory_(this) { 47 weak_factory_(this) {
49 media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(kCreated)); 48 media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(kCreated));
50 media_log_->AddEvent( 49 media_log_->AddEvent(
51 media_log_->CreateEvent(MediaLogEvent::PIPELINE_CREATED)); 50 media_log_->CreateEvent(MediaLogEvent::PIPELINE_CREATED));
52 } 51 }
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 PipelineStatusCB done_cb = 327 PipelineStatusCB done_cb =
329 base::Bind(&Pipeline::StateTransitionTask, weak_factory_.GetWeakPtr()); 328 base::Bind(&Pipeline::StateTransitionTask, weak_factory_.GetWeakPtr());
330 329
331 // Switch states, performing any entrance actions for the new state as well. 330 // Switch states, performing any entrance actions for the new state as well.
332 SetState(GetNextState()); 331 SetState(GetNextState());
333 switch (state_) { 332 switch (state_) {
334 case kInitDemuxer: 333 case kInitDemuxer:
335 return InitializeDemuxer(done_cb); 334 return InitializeDemuxer(done_cb);
336 335
337 case kInitRenderer: 336 case kInitRenderer:
337 // When the state_ transfers to kInitRenderer, it means the demuxer has
338 // finished parsing the init info. It should call ReportMetadata in case
339 // meeting 'decode' error when passing media segment but WebMediaPlayer's
340 // ready_state_ is still ReadyStateHaveNothing. In that case, it will
341 // treat it as NetworkStateFormatError not NetworkStateDecodeError.
342 ReportMetadata();
343 start_timestamp_ = demuxer_->GetStartTime();
344
338 return InitializeRenderer(base::Bind(done_cb, PIPELINE_OK)); 345 return InitializeRenderer(base::Bind(done_cb, PIPELINE_OK));
339 346
340 case kPlaying: 347 case kPlaying:
341 // Report metadata the first time we enter the playing state.
342 if (!is_initialized_) {
343 is_initialized_ = true;
344 ReportMetadata();
345 start_timestamp_ = demuxer_->GetStartTime();
346 }
347
348 DCHECK(start_timestamp_ >= base::TimeDelta()); 348 DCHECK(start_timestamp_ >= base::TimeDelta());
349 renderer_->StartPlayingFrom(start_timestamp_); 349 renderer_->StartPlayingFrom(start_timestamp_);
350 350
351 if (text_renderer_) 351 if (text_renderer_)
352 text_renderer_->StartPlaying(); 352 text_renderer_->StartPlaying();
353 353
354 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); 354 base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
355 355
356 PlaybackRateChangedTask(GetPlaybackRate()); 356 PlaybackRateChangedTask(GetPlaybackRate());
357 VolumeChangedTask(GetVolume()); 357 VolumeChangedTask(GetVolume());
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 base::Bind(&Pipeline::OnUpdateStatistics, weak_this), 722 base::Bind(&Pipeline::OnUpdateStatistics, weak_this),
723 base::Bind(&Pipeline::BufferingStateChanged, weak_this), 723 base::Bind(&Pipeline::BufferingStateChanged, weak_this),
724 base::ResetAndReturn(&paint_cb_), 724 base::ResetAndReturn(&paint_cb_),
725 base::Bind(&Pipeline::OnRendererEnded, weak_this), 725 base::Bind(&Pipeline::OnRendererEnded, weak_this),
726 base::Bind(&Pipeline::OnError, weak_this)); 726 base::Bind(&Pipeline::OnError, weak_this));
727 } 727 }
728 728
729 void Pipeline::ReportMetadata() { 729 void Pipeline::ReportMetadata() {
730 DCHECK(task_runner_->BelongsToCurrentThread()); 730 DCHECK(task_runner_->BelongsToCurrentThread());
731 PipelineMetadata metadata; 731 PipelineMetadata metadata;
732 metadata.has_audio = renderer_->HasAudio();
733 metadata.has_video = renderer_->HasVideo();
734 metadata.timeline_offset = demuxer_->GetTimelineOffset(); 732 metadata.timeline_offset = demuxer_->GetTimelineOffset();
735 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); 733 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
736 if (stream) { 734 if (stream) {
735 metadata.has_video = true;
737 metadata.natural_size = stream->video_decoder_config().natural_size(); 736 metadata.natural_size = stream->video_decoder_config().natural_size();
738 metadata.video_rotation = stream->video_rotation(); 737 metadata.video_rotation = stream->video_rotation();
739 } 738 }
739 if (demuxer_->GetStream(DemuxerStream::AUDIO)) {
740 metadata.has_audio = true;
741 }
740 metadata_cb_.Run(metadata); 742 metadata_cb_.Run(metadata);
741 } 743 }
742 744
743 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { 745 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) {
744 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; 746 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") ";
745 DCHECK(task_runner_->BelongsToCurrentThread()); 747 DCHECK(task_runner_->BelongsToCurrentThread());
746 buffering_state_cb_.Run(new_buffering_state); 748 buffering_state_cb_.Run(new_buffering_state);
747 } 749 }
748 750
749 } // namespace media 751 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698