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 "base/logging.h" | 5 #include "base/logging.h" |
6 #include "mojo/services/media/common/cpp/linear_transform.h" | 6 #include "mojo/services/media/common/cpp/linear_transform.h" |
7 #include "mojo/services/media/common/cpp/local_time.h" | 7 #include "mojo/services/media/common/cpp/local_time.h" |
8 #include "services/media/factory_service/media_sink_impl.h" | 8 #include "services/media/factory_service/media_sink_impl.h" |
9 #include "services/media/framework/util/conversion_pipeline_builder.h" | 9 #include "services/media/framework/util/conversion_pipeline_builder.h" |
10 #include "services/media/framework_mojo/mojo_type_conversions.h" | 10 #include "services/media/framework_mojo/mojo_type_conversions.h" |
11 | 11 |
12 namespace mojo { | 12 namespace mojo { |
13 namespace media { | 13 namespace media { |
14 | 14 |
15 // static | 15 // static |
16 std::shared_ptr<MediaSinkImpl> MediaSinkImpl::Create( | 16 std::shared_ptr<MediaSinkImpl> MediaSinkImpl::Create( |
17 const String& destination_url, | 17 const String& destination_url, |
18 MediaTypePtr media_type, | 18 MediaTypePtr media_type, |
19 InterfaceRequest<MediaSink> request, | 19 InterfaceRequest<MediaSink> request, |
20 MediaFactoryService* owner) { | 20 MediaFactoryService* owner) { |
21 return std::shared_ptr<MediaSinkImpl>(new MediaSinkImpl( | 21 return std::shared_ptr<MediaSinkImpl>(new MediaSinkImpl( |
22 destination_url, media_type.Pass(), request.Pass(), owner)); | 22 destination_url, media_type.Pass(), request.Pass(), owner)); |
23 } | 23 } |
24 | 24 |
25 MediaSinkImpl::MediaSinkImpl(const String& destination_url, | 25 MediaSinkImpl::MediaSinkImpl(const String& destination_url, |
26 MediaTypePtr media_type, | 26 MediaTypePtr media_type, |
27 InterfaceRequest<MediaSink> request, | 27 InterfaceRequest<MediaSink> request, |
28 MediaFactoryService* owner) | 28 MediaFactoryService* owner) |
29 : MediaFactoryService::Product(owner), | 29 : MediaFactoryService::Product<MediaSink>(this, request.Pass(), owner), |
30 binding_(this, request.Pass()), | |
31 consumer_(MojoConsumer::Create()), | 30 consumer_(MojoConsumer::Create()), |
32 producer_(MojoProducer::Create()) { | 31 producer_(MojoProducer::Create()) { |
33 DCHECK(destination_url); | 32 DCHECK(destination_url); |
34 DCHECK(media_type); | 33 DCHECK(media_type); |
35 | 34 |
36 // Go away when the client is no longer connected. | |
37 binding_.set_connection_error_handler([this]() { ReleaseFromOwner(); }); | |
38 | |
39 status_publisher_.SetCallbackRunner( | 35 status_publisher_.SetCallbackRunner( |
40 [this](const GetStatusCallback& callback, uint64_t version) { | 36 [this](const GetStatusCallback& callback, uint64_t version) { |
41 MediaSinkStatusPtr status = MediaSinkStatus::New(); | 37 MediaSinkStatusPtr status = MediaSinkStatus::New(); |
42 status->state = (producer_state_ == MediaState::PAUSED && rate_ != 0.0) | 38 status->state = (producer_state_ == MediaState::PAUSED && rate_ != 0.0) |
43 ? MediaState::PLAYING | 39 ? MediaState::PLAYING |
44 : producer_state_; | 40 : producer_state_; |
45 status->timeline_transform = status_transform_.Clone(); | 41 status->timeline_transform = status_transform_.Clone(); |
46 callback.Run(version, status.Pass()); | 42 callback.Run(version, status.Pass()); |
47 }); | 43 }); |
48 | 44 |
(...skipping 27 matching lines...) Expand all Loading... |
76 | 72 |
77 // TODO(dalesat): Temporary, remove. | 73 // TODO(dalesat): Temporary, remove. |
78 if (destination_url == "nowhere") { | 74 if (destination_url == "nowhere") { |
79 // Throwing away the content. | 75 // Throwing away the content. |
80 graph_.ConnectParts(consumer_ref, producer_ref); | 76 graph_.ConnectParts(consumer_ref, producer_ref); |
81 graph_.Prepare(); | 77 graph_.Prepare(); |
82 ready_.Occur(); | 78 ready_.Occur(); |
83 return; | 79 return; |
84 } | 80 } |
85 | 81 |
86 if (destination_url != "mojo:audio_server") { | 82 RCHECK(destination_url == "mojo:audio_server"); |
87 LOG(ERROR) << "mojo:audio_server is the only supported destination"; | |
88 if (binding_.is_bound()) { | |
89 binding_.Close(); | |
90 } | |
91 return; | |
92 } | |
93 | 83 |
94 // TODO(dalesat): Once we have c++14, get rid of this shared pointer hack. | 84 // TODO(dalesat): Once we have c++14, get rid of this shared pointer hack. |
95 std::shared_ptr<StreamType> captured_stream_type( | 85 std::shared_ptr<StreamType> captured_stream_type( |
96 media_type.To<std::unique_ptr<StreamType>>().release()); | 86 media_type.To<std::unique_ptr<StreamType>>().release()); |
97 | 87 |
98 // An AudioTrackController knows how to talk to an audio track, interrogating | 88 // An AudioTrackController knows how to talk to an audio track, interrogating |
99 // it for supported stream types and configuring it for the chosen stream | 89 // it for supported stream types and configuring it for the chosen stream |
100 // type. | 90 // type. |
101 controller_.reset(new AudioTrackController(destination_url, app())); | 91 controller_.reset(new AudioTrackController(destination_url, app())); |
102 | 92 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 status_transform_->quad->target_delta = rate_frames_per_tick.denominator; | 253 status_transform_->quad->target_delta = rate_frames_per_tick.denominator; |
264 LinearTransform::Ratio::Reduce(&status_transform_->quad->reference_delta, | 254 LinearTransform::Ratio::Reduce(&status_transform_->quad->reference_delta, |
265 &status_transform_->quad->target_delta); | 255 &status_transform_->quad->target_delta); |
266 | 256 |
267 rate_ = target_rate_; | 257 rate_ = target_rate_; |
268 status_publisher_.SendUpdates(); | 258 status_publisher_.SendUpdates(); |
269 } | 259 } |
270 | 260 |
271 } // namespace media | 261 } // namespace media |
272 } // namespace mojo | 262 } // namespace mojo |
OLD | NEW |