OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "chromecast/browser/media/cast_renderer.h" | 5 #include "chromecast/browser/media/cast_renderer.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
9 #include "chromecast/base/task_runner_impl.h" | 9 #include "chromecast/base/task_runner_impl.h" |
10 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h" | 10 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 | 55 |
56 // Create pipeline backend. | 56 // Create pipeline backend. |
57 backend_task_runner_.reset(new TaskRunnerImpl()); | 57 backend_task_runner_.reset(new TaskRunnerImpl()); |
58 // TODO(erickung): crbug.com/443956. Need to provide right LoadType. | 58 // TODO(erickung): crbug.com/443956. Need to provide right LoadType. |
59 LoadType load_type = kLoadTypeMediaSource; | 59 LoadType load_type = kLoadTypeMediaSource; |
60 MediaPipelineDeviceParams::MediaSyncType sync_type = | 60 MediaPipelineDeviceParams::MediaSyncType sync_type = |
61 (load_type == kLoadTypeMediaStream) | 61 (load_type == kLoadTypeMediaStream) |
62 ? MediaPipelineDeviceParams::kModeIgnorePts | 62 ? MediaPipelineDeviceParams::kModeIgnorePts |
63 : MediaPipelineDeviceParams::kModeSyncPts; | 63 : MediaPipelineDeviceParams::kModeSyncPts; |
64 MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get()); | 64 MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get()); |
65 scoped_ptr<MediaPipelineBackend> backend = create_backend_cb_.Run(params); | 65 std::unique_ptr<MediaPipelineBackend> backend = |
| 66 create_backend_cb_.Run(params); |
66 | 67 |
67 // Create pipeline. | 68 // Create pipeline. |
68 MediaPipelineClient pipeline_client; | 69 MediaPipelineClient pipeline_client; |
69 pipeline_client.error_cb = error_cb; | 70 pipeline_client.error_cb = error_cb; |
70 pipeline_client.buffering_state_cb = buffering_state_cb; | 71 pipeline_client.buffering_state_cb = buffering_state_cb; |
71 pipeline_.reset(new MediaPipelineImpl); | 72 pipeline_.reset(new MediaPipelineImpl); |
72 pipeline_->SetClient(pipeline_client); | 73 pipeline_->SetClient(pipeline_client); |
73 pipeline_->Initialize(load_type, std::move(backend)); | 74 pipeline_->Initialize(load_type, std::move(backend)); |
74 | 75 |
75 // Initialize audio. | 76 // Initialize audio. |
76 ::media::DemuxerStream* audio_stream = | 77 ::media::DemuxerStream* audio_stream = |
77 demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO); | 78 demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO); |
78 if (audio_stream) { | 79 if (audio_stream) { |
79 AvPipelineClient audio_client; | 80 AvPipelineClient audio_client; |
80 audio_client.wait_for_key_cb = waiting_for_decryption_key_cb; | 81 audio_client.wait_for_key_cb = waiting_for_decryption_key_cb; |
81 audio_client.eos_cb = | 82 audio_client.eos_cb = |
82 base::Bind(&CastRenderer::OnEos, base::Unretained(this), STREAM_AUDIO); | 83 base::Bind(&CastRenderer::OnEos, base::Unretained(this), STREAM_AUDIO); |
83 audio_client.playback_error_cb = error_cb; | 84 audio_client.playback_error_cb = error_cb; |
84 audio_client.statistics_cb = statistics_cb; | 85 audio_client.statistics_cb = statistics_cb; |
85 scoped_ptr<CodedFrameProvider> frame_provider(new DemuxerStreamAdapter( | 86 std::unique_ptr<CodedFrameProvider> frame_provider(new DemuxerStreamAdapter( |
86 task_runner_, media_task_runner_factory_, audio_stream)); | 87 task_runner_, media_task_runner_factory_, audio_stream)); |
87 ::media::PipelineStatus status = | 88 ::media::PipelineStatus status = |
88 pipeline_->InitializeAudio(audio_stream->audio_decoder_config(), | 89 pipeline_->InitializeAudio(audio_stream->audio_decoder_config(), |
89 audio_client, std::move(frame_provider)); | 90 audio_client, std::move(frame_provider)); |
90 if (status != ::media::PIPELINE_OK) { | 91 if (status != ::media::PIPELINE_OK) { |
91 init_cb.Run(status); | 92 init_cb.Run(status); |
92 return; | 93 return; |
93 } | 94 } |
94 audio_stream->EnableBitstreamConverter(); | 95 audio_stream->EnableBitstreamConverter(); |
95 } | 96 } |
96 | 97 |
97 // Initialize video. | 98 // Initialize video. |
98 ::media::DemuxerStream* video_stream = | 99 ::media::DemuxerStream* video_stream = |
99 demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO); | 100 demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO); |
100 if (video_stream) { | 101 if (video_stream) { |
101 VideoPipelineClient video_client; | 102 VideoPipelineClient video_client; |
102 // TODO(alokp): Set VideoPipelineClient::natural_size_changed_cb. | 103 // TODO(alokp): Set VideoPipelineClient::natural_size_changed_cb. |
103 video_client.av_pipeline_client.wait_for_key_cb = | 104 video_client.av_pipeline_client.wait_for_key_cb = |
104 waiting_for_decryption_key_cb; | 105 waiting_for_decryption_key_cb; |
105 video_client.av_pipeline_client.eos_cb = | 106 video_client.av_pipeline_client.eos_cb = |
106 base::Bind(&CastRenderer::OnEos, base::Unretained(this), STREAM_VIDEO); | 107 base::Bind(&CastRenderer::OnEos, base::Unretained(this), STREAM_VIDEO); |
107 video_client.av_pipeline_client.playback_error_cb = error_cb; | 108 video_client.av_pipeline_client.playback_error_cb = error_cb; |
108 video_client.av_pipeline_client.statistics_cb = statistics_cb; | 109 video_client.av_pipeline_client.statistics_cb = statistics_cb; |
109 // TODO(alokp): Change MediaPipelineImpl API to accept a single config | 110 // TODO(alokp): Change MediaPipelineImpl API to accept a single config |
110 // after CmaRenderer is deprecated. | 111 // after CmaRenderer is deprecated. |
111 std::vector<::media::VideoDecoderConfig> video_configs; | 112 std::vector<::media::VideoDecoderConfig> video_configs; |
112 video_configs.push_back(video_stream->video_decoder_config()); | 113 video_configs.push_back(video_stream->video_decoder_config()); |
113 scoped_ptr<CodedFrameProvider> frame_provider(new DemuxerStreamAdapter( | 114 std::unique_ptr<CodedFrameProvider> frame_provider(new DemuxerStreamAdapter( |
114 task_runner_, media_task_runner_factory_, video_stream)); | 115 task_runner_, media_task_runner_factory_, video_stream)); |
115 ::media::PipelineStatus status = pipeline_->InitializeVideo( | 116 ::media::PipelineStatus status = pipeline_->InitializeVideo( |
116 video_configs, video_client, std::move(frame_provider)); | 117 video_configs, video_client, std::move(frame_provider)); |
117 if (status != ::media::PIPELINE_OK) { | 118 if (status != ::media::PIPELINE_OK) { |
118 init_cb.Run(status); | 119 init_cb.Run(status); |
119 return; | 120 return; |
120 } | 121 } |
121 video_stream->EnableBitstreamConverter(); | 122 video_stream->EnableBitstreamConverter(); |
122 } | 123 } |
123 | 124 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 DCHECK(!eos_[stream]); | 174 DCHECK(!eos_[stream]); |
174 eos_[stream] = true; | 175 eos_[stream] = true; |
175 CMALOG(kLogControl) << __FUNCTION__ << ": eos_audio=" << eos_[STREAM_AUDIO] | 176 CMALOG(kLogControl) << __FUNCTION__ << ": eos_audio=" << eos_[STREAM_AUDIO] |
176 << " eos_video=" << eos_[STREAM_VIDEO]; | 177 << " eos_video=" << eos_[STREAM_VIDEO]; |
177 if (eos_[STREAM_AUDIO] && eos_[STREAM_VIDEO]) | 178 if (eos_[STREAM_AUDIO] && eos_[STREAM_VIDEO]) |
178 ended_cb_.Run(); | 179 ended_cb_.Run(); |
179 } | 180 } |
180 | 181 |
181 } // namespace media | 182 } // namespace media |
182 } // namespace chromecast | 183 } // namespace chromecast |
OLD | NEW |