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

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

Issue 2387293007: Register MediaPlayerRenderer service (Closed)
Patch Set: Typo. 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
« no previous file with comments | « media/base/media_switches.cc ('k') | media/base/pipeline_metadata.h » ('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 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 DVLOG(1) << "Error: demuxer does not have an audio or a video stream.";
831 done_cb.Run(PIPELINE_ERROR_COULD_NOT_RENDER);
832 return;
833 }
834 break;
835
836 case DemuxerStreamProvider::Type::URL:
837 // NOTE: Empty GURL are not valid.
838 if (!demuxer_->GetUrl().is_valid()) {
839 DVLOG(1) << "Error: demuxer does not have a valid URL.";
840 done_cb.Run(PIPELINE_ERROR_COULD_NOT_RENDER);
841 return;
842 }
843 break;
830 } 844 }
831 845
832 if (cdm_context_) 846 if (cdm_context_)
833 shared_state_.renderer->SetCdm(cdm_context_, 847 shared_state_.renderer->SetCdm(cdm_context_,
834 base::Bind(&IgnoreCdmAttached)); 848 base::Bind(&IgnoreCdmAttached));
835 849
836 shared_state_.renderer->Initialize(demuxer_, this, done_cb); 850 shared_state_.renderer->Initialize(demuxer_, this, done_cb);
837 } 851 }
838 852
839 void PipelineImpl::RendererWrapper::DestroyRenderer() { 853 void PipelineImpl::RendererWrapper::DestroyRenderer() {
840 DCHECK(media_task_runner_->BelongsToCurrentThread()); 854 DCHECK(media_task_runner_->BelongsToCurrentThread());
841 855
842 // Destroy the renderer outside the lock scope to avoid holding the lock 856 // Destroy the renderer outside the lock scope to avoid holding the lock
843 // while renderer is being destroyed (in case Renderer destructor is costly). 857 // while renderer is being destroyed (in case Renderer destructor is costly).
844 std::unique_ptr<Renderer> renderer; 858 std::unique_ptr<Renderer> renderer;
845 { 859 {
846 base::AutoLock auto_lock(shared_state_lock_); 860 base::AutoLock auto_lock(shared_state_lock_);
847 renderer.swap(shared_state_.renderer); 861 renderer.swap(shared_state_.renderer);
848 } 862 }
849 } 863 }
850 864
851 void PipelineImpl::RendererWrapper::ReportMetadata() { 865 void PipelineImpl::RendererWrapper::ReportMetadata() {
852 DCHECK(media_task_runner_->BelongsToCurrentThread()); 866 DCHECK(media_task_runner_->BelongsToCurrentThread());
853 867
854 PipelineMetadata metadata; 868 PipelineMetadata metadata;
855 metadata.timeline_offset = demuxer_->GetTimelineOffset(); 869 DemuxerStream* stream;
856 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); 870
857 if (stream) { 871 switch (demuxer_->GetType()) {
858 metadata.has_video = true; 872 case DemuxerStreamProvider::Type::STREAM:
859 metadata.natural_size = stream->video_decoder_config().natural_size(); 873 metadata.timeline_offset = demuxer_->GetTimelineOffset();
860 metadata.video_rotation = stream->video_rotation(); 874 stream = demuxer_->GetStream(DemuxerStream::VIDEO);
861 metadata.video_decoder_config = stream->video_decoder_config(); 875 if (stream) {
862 } 876 metadata.has_video = true;
863 stream = demuxer_->GetStream(DemuxerStream::AUDIO); 877 metadata.natural_size = stream->video_decoder_config().natural_size();
864 if (stream) { 878 metadata.video_rotation = stream->video_rotation();
865 metadata.has_audio = true; 879 metadata.video_decoder_config = stream->video_decoder_config();
866 metadata.audio_decoder_config = stream->audio_decoder_config(); 880 }
881 stream = demuxer_->GetStream(DemuxerStream::AUDIO);
882 if (stream) {
883 metadata.has_audio = true;
884 metadata.audio_decoder_config = stream->audio_decoder_config();
885 }
886 break;
887
888 case DemuxerStreamProvider::Type::URL:
889 // We don't know if the MediaPlayerRender has Audio/Video until we start
890 // playing. Conservatively assume that they do.
891 metadata.has_video = true;
892 metadata.has_audio = true;
893 break;
867 } 894 }
868 895
869 main_task_runner_->PostTask(FROM_HERE, base::Bind(&PipelineImpl::OnMetadata, 896 main_task_runner_->PostTask(FROM_HERE, base::Bind(&PipelineImpl::OnMetadata,
870 weak_pipeline_, metadata)); 897 weak_pipeline_, metadata));
871 } 898 }
872 899
873 PipelineImpl::PipelineImpl( 900 PipelineImpl::PipelineImpl(
874 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, 901 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
875 MediaLog* media_log) 902 MediaLog* media_log)
876 : media_task_runner_(media_task_runner), 903 : media_task_runner_(media_task_runner),
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 void PipelineImpl::OnSuspendDone() { 1288 void PipelineImpl::OnSuspendDone() {
1262 DVLOG(3) << __func__; 1289 DVLOG(3) << __func__;
1263 DCHECK(thread_checker_.CalledOnValidThread()); 1290 DCHECK(thread_checker_.CalledOnValidThread());
1264 DCHECK(IsRunning()); 1291 DCHECK(IsRunning());
1265 1292
1266 DCHECK(!suspend_cb_.is_null()); 1293 DCHECK(!suspend_cb_.is_null());
1267 base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK); 1294 base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK);
1268 } 1295 }
1269 1296
1270 } // namespace media 1297 } // namespace media
OLDNEW
« no previous file with comments | « media/base/media_switches.cc ('k') | media/base/pipeline_metadata.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698