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

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

Issue 2387293007: Register MediaPlayerRenderer service (Closed)
Patch Set: Created 4 years, 2 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 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 const PipelineStatusCB& done_cb) { 816 const PipelineStatusCB& done_cb) {
817 DCHECK(media_task_runner_->BelongsToCurrentThread()); 817 DCHECK(media_task_runner_->BelongsToCurrentThread());
818 818
819 demuxer_->Initialize(this, done_cb, !!text_renderer_); 819 demuxer_->Initialize(this, done_cb, !!text_renderer_);
820 } 820 }
821 821
822 void PipelineImpl::RendererWrapper::InitializeRenderer( 822 void PipelineImpl::RendererWrapper::InitializeRenderer(
823 const PipelineStatusCB& done_cb) { 823 const PipelineStatusCB& done_cb) {
824 DCHECK(media_task_runner_->BelongsToCurrentThread()); 824 DCHECK(media_task_runner_->BelongsToCurrentThread());
825 825
826 if (!demuxer_->GetStream(DemuxerStream::AUDIO) && 826 switch (demuxer_->GetType()) {
827 !demuxer_->GetStream(DemuxerStream::VIDEO)) { 827 case DemuxerStreamProvider::Type::STREAM:
828 done_cb.Run(PIPELINE_ERROR_COULD_NOT_RENDER); 828 if (!demuxer_->GetStream(DemuxerStream::AUDIO) &&
829 return; 829 !demuxer_->GetStream(DemuxerStream::VIDEO)) {
830 done_cb.Run(PIPELINE_ERROR_COULD_NOT_RENDER);
831 return;
832 }
833 break;
834
835 case DemuxerStreamProvider::Type::URL:
836 // N.B: Empty GURL are not valid.
837 if (!demuxer_->GetUrl().is_valid()) {
838 done_cb.Run(PIPELINE_ERROR_COULD_NOT_RENDER);
839 return;
840 }
841 break;
830 } 842 }
831 843
832 if (cdm_context_) 844 if (cdm_context_)
833 shared_state_.renderer->SetCdm(cdm_context_, 845 shared_state_.renderer->SetCdm(cdm_context_,
834 base::Bind(&IgnoreCdmAttached)); 846 base::Bind(&IgnoreCdmAttached));
835 847
836 shared_state_.renderer->Initialize(demuxer_, this, done_cb); 848 shared_state_.renderer->Initialize(demuxer_, this, done_cb);
837 } 849 }
838 850
839 void PipelineImpl::RendererWrapper::DestroyRenderer() { 851 void PipelineImpl::RendererWrapper::DestroyRenderer() {
840 DCHECK(media_task_runner_->BelongsToCurrentThread()); 852 DCHECK(media_task_runner_->BelongsToCurrentThread());
841 853
842 // Destroy the renderer outside the lock scope to avoid holding the lock 854 // Destroy the renderer outside the lock scope to avoid holding the lock
843 // while renderer is being destroyed (in case Renderer destructor is costly). 855 // while renderer is being destroyed (in case Renderer destructor is costly).
844 std::unique_ptr<Renderer> renderer; 856 std::unique_ptr<Renderer> renderer;
845 { 857 {
846 base::AutoLock auto_lock(shared_state_lock_); 858 base::AutoLock auto_lock(shared_state_lock_);
847 renderer.swap(shared_state_.renderer); 859 renderer.swap(shared_state_.renderer);
848 } 860 }
849 } 861 }
850 862
851 void PipelineImpl::RendererWrapper::ReportMetadata() { 863 void PipelineImpl::RendererWrapper::ReportMetadata() {
852 DCHECK(media_task_runner_->BelongsToCurrentThread()); 864 DCHECK(media_task_runner_->BelongsToCurrentThread());
853 865
854 PipelineMetadata metadata; 866 PipelineMetadata metadata;
855 metadata.timeline_offset = demuxer_->GetTimelineOffset(); 867 DemuxerStream* stream;
856 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); 868
857 if (stream) { 869 switch (demuxer_->GetType()) {
858 metadata.has_video = true; 870 case DemuxerStreamProvider::Type::STREAM:
859 metadata.natural_size = stream->video_decoder_config().natural_size(); 871 metadata.timeline_offset = demuxer_->GetTimelineOffset();
860 metadata.video_rotation = stream->video_rotation(); 872 stream = demuxer_->GetStream(DemuxerStream::VIDEO);
861 } 873 if (stream) {
862 if (demuxer_->GetStream(DemuxerStream::AUDIO)) { 874 metadata.has_video = true;
863 metadata.has_audio = true; 875 metadata.natural_size = stream->video_decoder_config().natural_size();
876 metadata.video_rotation = stream->video_rotation();
877 }
878 if (demuxer_->GetStream(DemuxerStream::AUDIO)) {
879 metadata.has_audio = true;
880 }
881 break;
882
883 case DemuxerStreamProvider::Type::URL:
884 // We don't know if the MediaPlayerRender has Audio/Video until we start
885 // playing. Conservatively assume that they do.
886 metadata.has_video = true;
887 metadata.has_audio = true;
888 break;
864 } 889 }
865 890
866 main_task_runner_->PostTask(FROM_HERE, base::Bind(&PipelineImpl::OnMetadata, 891 main_task_runner_->PostTask(FROM_HERE, base::Bind(&PipelineImpl::OnMetadata,
867 weak_pipeline_, metadata)); 892 weak_pipeline_, metadata));
868 } 893 }
869 894
870 PipelineImpl::PipelineImpl( 895 PipelineImpl::PipelineImpl(
871 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, 896 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
872 MediaLog* media_log) 897 MediaLog* media_log)
873 : media_task_runner_(media_task_runner), 898 : media_task_runner_(media_task_runner),
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
1258 void PipelineImpl::OnSuspendDone() { 1283 void PipelineImpl::OnSuspendDone() {
1259 DVLOG(3) << __func__; 1284 DVLOG(3) << __func__;
1260 DCHECK(thread_checker_.CalledOnValidThread()); 1285 DCHECK(thread_checker_.CalledOnValidThread());
1261 DCHECK(IsRunning()); 1286 DCHECK(IsRunning());
1262 1287
1263 DCHECK(!suspend_cb_.is_null()); 1288 DCHECK(!suspend_cb_.is_null());
1264 base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK); 1289 base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK);
1265 } 1290 }
1266 1291
1267 } // namespace media 1292 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698