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

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

Issue 1873513003: Add video-rendering to mojo media pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 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
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"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 DCHECK(seek_cb_.is_null()); 61 DCHECK(seek_cb_.is_null());
62 } 62 }
63 63
64 void PipelineImpl::Start(Demuxer* demuxer, 64 void PipelineImpl::Start(Demuxer* demuxer,
65 scoped_ptr<Renderer> renderer, 65 scoped_ptr<Renderer> renderer,
66 const base::Closure& ended_cb, 66 const base::Closure& ended_cb,
67 const PipelineStatusCB& error_cb, 67 const PipelineStatusCB& error_cb,
68 const PipelineStatusCB& seek_cb, 68 const PipelineStatusCB& seek_cb,
69 const PipelineMetadataCB& metadata_cb, 69 const PipelineMetadataCB& metadata_cb,
70 const BufferingStateCB& buffering_state_cb, 70 const BufferingStateCB& buffering_state_cb,
71 const NaturalSizeChangedCB& natural_size_changed_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());
76 DCHECK(!seek_cb.is_null()); 77 DCHECK(!seek_cb.is_null());
77 DCHECK(!metadata_cb.is_null()); 78 DCHECK(!metadata_cb.is_null());
78 DCHECK(!buffering_state_cb.is_null()); 79 DCHECK(!buffering_state_cb.is_null());
79 80
80 base::AutoLock auto_lock(lock_); 81 base::AutoLock auto_lock(lock_);
81 CHECK(!running_) << "Media pipeline is already running"; 82 CHECK(!running_) << "Media pipeline is already running";
82 running_ = true; 83 running_ = true;
83 84
84 demuxer_ = demuxer; 85 demuxer_ = demuxer;
85 renderer_ = std::move(renderer); 86 renderer_ = std::move(renderer);
86 ended_cb_ = ended_cb; 87 ended_cb_ = ended_cb;
87 error_cb_ = error_cb; 88 error_cb_ = error_cb;
88 seek_cb_ = seek_cb; 89 seek_cb_ = seek_cb;
89 metadata_cb_ = metadata_cb; 90 metadata_cb_ = metadata_cb;
90 buffering_state_cb_ = buffering_state_cb; 91 buffering_state_cb_ = buffering_state_cb;
92 natural_size_changed_cb_ = natural_size_changed_cb;
91 duration_change_cb_ = duration_change_cb; 93 duration_change_cb_ = duration_change_cb;
92 add_text_track_cb_ = add_text_track_cb; 94 add_text_track_cb_ = add_text_track_cb;
93 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; 95 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb;
94 96
95 task_runner_->PostTask(FROM_HERE, 97 task_runner_->PostTask(FROM_HERE,
96 base::Bind(&PipelineImpl::StartTask, weak_this_)); 98 base::Bind(&PipelineImpl::StartTask, weak_this_));
97 } 99 }
98 100
99 void PipelineImpl::Stop(const base::Closure& stop_cb) { 101 void PipelineImpl::Stop(const base::Closure& stop_cb) {
100 DVLOG(2) << __FUNCTION__; 102 DVLOG(2) << __FUNCTION__;
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 return; 837 return;
836 } 838 }
837 839
838 if (cdm_context_) 840 if (cdm_context_)
839 renderer_->SetCdm(cdm_context_, base::Bind(&IgnoreCdmAttached)); 841 renderer_->SetCdm(cdm_context_, base::Bind(&IgnoreCdmAttached));
840 842
841 renderer_->Initialize( 843 renderer_->Initialize(
842 demuxer_, done_cb, 844 demuxer_, done_cb,
843 base::Bind(&PipelineImpl::OnUpdateStatistics, weak_this_), 845 base::Bind(&PipelineImpl::OnUpdateStatistics, weak_this_),
844 base::Bind(&PipelineImpl::BufferingStateChanged, weak_this_), 846 base::Bind(&PipelineImpl::BufferingStateChanged, weak_this_),
847 base::Bind(&PipelineImpl::OnNaturalSizeChanged, weak_this_),
845 base::Bind(&PipelineImpl::OnRendererEnded, weak_this_), 848 base::Bind(&PipelineImpl::OnRendererEnded, weak_this_),
846 base::Bind(&PipelineImpl::OnError, weak_this_), 849 base::Bind(&PipelineImpl::OnError, weak_this_),
847 waiting_for_decryption_key_cb_); 850 waiting_for_decryption_key_cb_);
848 } 851 }
849 852
850 void PipelineImpl::ReportMetadata() { 853 void PipelineImpl::ReportMetadata() {
851 DCHECK(task_runner_->BelongsToCurrentThread()); 854 DCHECK(task_runner_->BelongsToCurrentThread());
852 PipelineMetadata metadata; 855 PipelineMetadata metadata;
853 metadata.timeline_offset = demuxer_->GetTimelineOffset(); 856 metadata.timeline_offset = demuxer_->GetTimelineOffset();
854 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); 857 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
855 if (stream) { 858 if (stream) {
856 metadata.has_video = true; 859 metadata.has_video = true;
857 metadata.natural_size = stream->video_decoder_config().natural_size(); 860 metadata.natural_size = stream->video_decoder_config().natural_size();
858 metadata.video_rotation = stream->video_rotation(); 861 metadata.video_rotation = stream->video_rotation();
859 } 862 }
860 if (demuxer_->GetStream(DemuxerStream::AUDIO)) { 863 if (demuxer_->GetStream(DemuxerStream::AUDIO)) {
861 metadata.has_audio = true; 864 metadata.has_audio = true;
862 } 865 }
863 metadata_cb_.Run(metadata); 866 metadata_cb_.Run(metadata);
864 } 867 }
865 868
866 void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) { 869 void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) {
867 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; 870 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") ";
868 DCHECK(task_runner_->BelongsToCurrentThread()); 871 DCHECK(task_runner_->BelongsToCurrentThread());
869 buffering_state_cb_.Run(new_buffering_state); 872 buffering_state_cb_.Run(new_buffering_state);
870 } 873 }
871 874
875 void PipelineImpl::OnNaturalSizeChanged(const gfx::Size& size) {
876 DVLOG(1) << __FUNCTION__ << "(" << size.ToString() << ")";
877 DCHECK(task_runner_->BelongsToCurrentThread());
878 natural_size_changed_cb_.Run(size);
879 }
880
872 } // namespace media 881 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698