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

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

Issue 1906423005: Replace scoped_ptr with std::unique_ptr in //media/base. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptr-media-base: android Created 4 years, 7 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
« no previous file with comments | « media/base/pipeline_impl.h ('k') | media/base/pipeline_impl_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/base/pipeline_impl.h" 5 #include "media/base/pipeline_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/callback_helpers.h" 13 #include "base/callback_helpers.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/location.h" 16 #include "base/location.h"
17 #include "base/memory/ptr_util.h"
17 #include "base/metrics/histogram.h" 18 #include "base/metrics/histogram.h"
18 #include "base/single_thread_task_runner.h" 19 #include "base/single_thread_task_runner.h"
19 #include "base/stl_util.h" 20 #include "base/stl_util.h"
20 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
21 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
22 #include "base/synchronization/condition_variable.h" 23 #include "base/synchronization/condition_variable.h"
23 #include "media/base/media_log.h" 24 #include "media/base/media_log.h"
24 #include "media/base/media_switches.h" 25 #include "media/base/media_switches.h"
25 #include "media/base/renderer.h" 26 #include "media/base/renderer.h"
26 #include "media/base/text_renderer.h" 27 #include "media/base/text_renderer.h"
(...skipping 28 matching lines...) Expand all
55 56
56 PipelineImpl::~PipelineImpl() { 57 PipelineImpl::~PipelineImpl() {
57 DCHECK(thread_checker_.CalledOnValidThread()) 58 DCHECK(thread_checker_.CalledOnValidThread())
58 << "Pipeline must be destroyed on same thread that created it"; 59 << "Pipeline must be destroyed on same thread that created it";
59 DCHECK(!running_) << "Stop() must complete before destroying object"; 60 DCHECK(!running_) << "Stop() must complete before destroying object";
60 DCHECK(stop_cb_.is_null()); 61 DCHECK(stop_cb_.is_null());
61 DCHECK(seek_cb_.is_null()); 62 DCHECK(seek_cb_.is_null());
62 } 63 }
63 64
64 void PipelineImpl::Start(Demuxer* demuxer, 65 void PipelineImpl::Start(Demuxer* demuxer,
65 scoped_ptr<Renderer> renderer, 66 std::unique_ptr<Renderer> renderer,
66 const base::Closure& ended_cb, 67 const base::Closure& ended_cb,
67 const PipelineStatusCB& error_cb, 68 const PipelineStatusCB& error_cb,
68 const PipelineStatusCB& seek_cb, 69 const PipelineStatusCB& seek_cb,
69 const PipelineMetadataCB& metadata_cb, 70 const PipelineMetadataCB& metadata_cb,
70 const BufferingStateCB& buffering_state_cb, 71 const BufferingStateCB& buffering_state_cb,
71 const base::Closure& duration_change_cb, 72 const base::Closure& duration_change_cb,
72 const AddTextTrackCB& add_text_track_cb, 73 const AddTextTrackCB& add_text_track_cb,
73 const base::Closure& waiting_for_decryption_key_cb) { 74 const base::Closure& waiting_for_decryption_key_cb) {
74 DCHECK(!ended_cb.is_null()); 75 DCHECK(!ended_cb.is_null());
75 DCHECK(!error_cb.is_null()); 76 DCHECK(!error_cb.is_null());
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 base::Bind(&PipelineImpl::PlaybackRateChangedTask, 135 base::Bind(&PipelineImpl::PlaybackRateChangedTask,
135 weak_this_, playback_rate)); 136 weak_this_, playback_rate));
136 } 137 }
137 } 138 }
138 139
139 void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) { 140 void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) {
140 task_runner_->PostTask(FROM_HERE, base::Bind(&PipelineImpl::SuspendTask, 141 task_runner_->PostTask(FROM_HERE, base::Bind(&PipelineImpl::SuspendTask,
141 weak_this_, suspend_cb)); 142 weak_this_, suspend_cb));
142 } 143 }
143 144
144 void PipelineImpl::Resume(scoped_ptr<Renderer> renderer, 145 void PipelineImpl::Resume(std::unique_ptr<Renderer> renderer,
145 base::TimeDelta timestamp, 146 base::TimeDelta timestamp,
146 const PipelineStatusCB& seek_cb) { 147 const PipelineStatusCB& seek_cb) {
147 task_runner_->PostTask( 148 task_runner_->PostTask(
148 FROM_HERE, base::Bind(&PipelineImpl::ResumeTask, weak_this_, 149 FROM_HERE, base::Bind(&PipelineImpl::ResumeTask, weak_this_,
149 base::Passed(&renderer), timestamp, seek_cb)); 150 base::Passed(&renderer), timestamp, seek_cb));
150 } 151 }
151 152
152 float PipelineImpl::GetVolume() const { 153 float PipelineImpl::GetVolume() const {
153 base::AutoLock auto_lock(lock_); 154 base::AutoLock auto_lock(lock_);
154 return volume_; 155 return volume_;
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb); 432 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb);
432 } 433 }
433 434
434 void PipelineImpl::DoStop(const PipelineStatusCB& done_cb) { 435 void PipelineImpl::DoStop(const PipelineStatusCB& done_cb) {
435 DVLOG(2) << __FUNCTION__; 436 DVLOG(2) << __FUNCTION__;
436 DCHECK(task_runner_->BelongsToCurrentThread()); 437 DCHECK(task_runner_->BelongsToCurrentThread());
437 DCHECK(!pending_callbacks_.get()); 438 DCHECK(!pending_callbacks_.get());
438 439
439 // TODO(scherkus): Enforce that Renderer is only called on a single thread, 440 // TODO(scherkus): Enforce that Renderer is only called on a single thread,
440 // even for accessing media time http://crbug.com/370634 441 // even for accessing media time http://crbug.com/370634
441 scoped_ptr<Renderer> renderer; 442 std::unique_ptr<Renderer> renderer;
442 { 443 {
443 base::AutoLock auto_lock(lock_); 444 base::AutoLock auto_lock(lock_);
444 renderer.swap(renderer_); 445 renderer.swap(renderer_);
445 } 446 }
446 renderer.reset(); 447 renderer.reset();
447 text_renderer_.reset(); 448 text_renderer_.reset();
448 449
449 if (demuxer_) { 450 if (demuxer_) {
450 demuxer_->Stop(); 451 demuxer_->Stop();
451 demuxer_ = NULL; 452 demuxer_ = NULL;
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 677
677 if (text_renderer_) { 678 if (text_renderer_) {
678 fns.Push(base::Bind(&TextRenderer::Flush, 679 fns.Push(base::Bind(&TextRenderer::Flush,
679 base::Unretained(text_renderer_.get()))); 680 base::Unretained(text_renderer_.get())));
680 } 681 }
681 682
682 pending_callbacks_ = SerialRunner::Run( 683 pending_callbacks_ = SerialRunner::Run(
683 fns, base::Bind(&PipelineImpl::StateTransitionTask, weak_this_)); 684 fns, base::Bind(&PipelineImpl::StateTransitionTask, weak_this_));
684 } 685 }
685 686
686 void PipelineImpl::ResumeTask(scoped_ptr<Renderer> renderer, 687 void PipelineImpl::ResumeTask(std::unique_ptr<Renderer> renderer,
687 base::TimeDelta timestamp, 688 base::TimeDelta timestamp,
688 const PipelineStatusCB& seek_cb) { 689 const PipelineStatusCB& seek_cb) {
689 DCHECK(task_runner_->BelongsToCurrentThread()); 690 DCHECK(task_runner_->BelongsToCurrentThread());
690 691
691 // Suppress resuming if we're not suspended. 692 // Suppress resuming if we're not suspended.
692 if (state_ != kSuspended) { 693 if (state_ != kSuspended) {
693 DCHECK(state_ == kStopping || state_ == kStopped) 694 DCHECK(state_ == kStopping || state_ == kStopped)
694 << "Receive resume in unexpected state: " << state_; 695 << "Receive resume in unexpected state: " << state_;
695 seek_cb.Run(PIPELINE_ERROR_INVALID_STATE); 696 seek_cb.Run(PIPELINE_ERROR_INVALID_STATE);
696 return; 697 return;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 if (renderer_ && !renderer_ended_) 779 if (renderer_ && !renderer_ended_)
779 return; 780 return;
780 781
781 if (text_renderer_ && text_renderer_->HasTracks() && !text_renderer_ended_) 782 if (text_renderer_ && text_renderer_->HasTracks() && !text_renderer_ended_)
782 return; 783 return;
783 784
784 DCHECK_EQ(status_, PIPELINE_OK); 785 DCHECK_EQ(status_, PIPELINE_OK);
785 ended_cb_.Run(); 786 ended_cb_.Run();
786 } 787 }
787 788
788 scoped_ptr<TextRenderer> PipelineImpl::CreateTextRenderer() { 789 std::unique_ptr<TextRenderer> PipelineImpl::CreateTextRenderer() {
789 DCHECK(task_runner_->BelongsToCurrentThread()); 790 DCHECK(task_runner_->BelongsToCurrentThread());
790 791
791 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); 792 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
792 if (!cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) 793 if (!cmd_line->HasSwitch(switches::kEnableInbandTextTracks))
793 return scoped_ptr<media::TextRenderer>(); 794 return nullptr;
794 795
795 return scoped_ptr<media::TextRenderer>(new media::TextRenderer( 796 return base::WrapUnique(new media::TextRenderer(
796 task_runner_, base::Bind(&PipelineImpl::OnAddTextTrack, weak_this_))); 797 task_runner_, base::Bind(&PipelineImpl::OnAddTextTrack, weak_this_)));
797 } 798 }
798 799
799 void PipelineImpl::AddTextStreamTask(DemuxerStream* text_stream, 800 void PipelineImpl::AddTextStreamTask(DemuxerStream* text_stream,
800 const TextTrackConfig& config) { 801 const TextTrackConfig& config) {
801 DCHECK(task_runner_->BelongsToCurrentThread()); 802 DCHECK(task_runner_->BelongsToCurrentThread());
802 // TODO(matthewjheaney): fix up text_ended_ when text stream 803 // TODO(matthewjheaney): fix up text_ended_ when text stream
803 // is added (http://crbug.com/321446). 804 // is added (http://crbug.com/321446).
804 if (text_renderer_) 805 if (text_renderer_)
805 text_renderer_->AddTextStream(text_stream, config); 806 text_renderer_->AddTextStream(text_stream, config);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 metadata_cb_.Run(metadata); 864 metadata_cb_.Run(metadata);
864 } 865 }
865 866
866 void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) { 867 void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) {
867 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; 868 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") ";
868 DCHECK(task_runner_->BelongsToCurrentThread()); 869 DCHECK(task_runner_->BelongsToCurrentThread());
869 buffering_state_cb_.Run(new_buffering_state); 870 buffering_state_cb_.Run(new_buffering_state);
870 } 871 }
871 872
872 } // namespace media 873 } // namespace media
OLDNEW
« no previous file with comments | « media/base/pipeline_impl.h ('k') | media/base/pipeline_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698