| 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/public/cpp/application/connect.h" | 6 #include "mojo/public/cpp/application/connect.h" |
| 7 #include "mojo/services/media/common/cpp/timeline.h" | 7 #include "mojo/services/media/common/cpp/timeline.h" |
| 8 #include "services/media/factory_service/media_player_impl.h" | 8 #include "services/media/factory_service/media_player_impl.h" |
| 9 #include "services/media/framework/parts/reader.h" | 9 #include "services/media/framework/parts/reader.h" |
| 10 #include "services/media/framework/util/callback_joiner.h" | 10 #include "services/media/framework/util/callback_joiner.h" |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 target_position_ = position; | 289 target_position_ = position; |
| 290 Update(); | 290 Update(); |
| 291 } | 291 } |
| 292 | 292 |
| 293 void MediaPlayerImpl::PrepareStream(Stream* stream, | 293 void MediaPlayerImpl::PrepareStream(Stream* stream, |
| 294 size_t index, | 294 size_t index, |
| 295 const MediaTypePtr& input_media_type, | 295 const MediaTypePtr& input_media_type, |
| 296 const std::function<void()>& callback) { | 296 const std::function<void()>& callback) { |
| 297 DCHECK(factory_); | 297 DCHECK(factory_); |
| 298 | 298 |
| 299 demux_->GetProducer(index, GetProxy(&stream->encoded_producer_)); | 299 demux_->GetPacketProducer(index, GetProxy(&stream->encoded_producer_)); |
| 300 | 300 |
| 301 if (input_media_type->encoding != MediaType::kAudioEncodingLpcm && | 301 if (input_media_type->encoding != MediaType::kAudioEncodingLpcm && |
| 302 input_media_type->encoding != MediaType::kVideoEncodingUncompressed) { | 302 input_media_type->encoding != MediaType::kVideoEncodingUncompressed) { |
| 303 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create(); | 303 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create(); |
| 304 | 304 |
| 305 // Compressed media. Insert a decoder in front of the sink. The sink would | 305 // Compressed media. Insert a decoder in front of the sink. The sink would |
| 306 // add its own internal decoder, but we want to test the decoder. | 306 // add its own internal decoder, but we want to test the decoder. |
| 307 factory_->CreateDecoder(input_media_type.Clone(), | 307 factory_->CreateDecoder(input_media_type.Clone(), |
| 308 GetProxy(&stream->decoder_)); | 308 GetProxy(&stream->decoder_)); |
| 309 | 309 |
| 310 MediaConsumerPtr decoder_consumer; | 310 MediaPacketConsumerPtr decoder_consumer; |
| 311 stream->decoder_->GetConsumer(GetProxy(&decoder_consumer)); | 311 stream->decoder_->GetPacketConsumer(GetProxy(&decoder_consumer)); |
| 312 | 312 |
| 313 callback_joiner->Spawn(); | 313 callback_joiner->Spawn(); |
| 314 stream->encoded_producer_->Connect(decoder_consumer.Pass(), | 314 stream->encoded_producer_->Connect(decoder_consumer.Pass(), |
| 315 [stream, callback_joiner]() { | 315 [stream, callback_joiner]() { |
| 316 stream->encoded_producer_.reset(); | 316 stream->encoded_producer_.reset(); |
| 317 callback_joiner->Complete(); | 317 callback_joiner->Complete(); |
| 318 }); | 318 }); |
| 319 | 319 |
| 320 callback_joiner->Spawn(); | 320 callback_joiner->Spawn(); |
| 321 stream->decoder_->GetOutputType( | 321 stream->decoder_->GetOutputType([this, stream, callback_joiner]( |
| 322 [this, stream, callback_joiner](MediaTypePtr output_type) { | 322 MediaTypePtr output_type) { |
| 323 stream->decoder_->GetProducer(GetProxy(&stream->decoded_producer_)); | 323 stream->decoder_->GetPacketProducer(GetProxy(&stream->decoded_producer_)); |
| 324 CreateSink(stream, output_type, callback_joiner->NewCallback()); | 324 CreateSink(stream, output_type, callback_joiner->NewCallback()); |
| 325 callback_joiner->Complete(); | 325 callback_joiner->Complete(); |
| 326 }); | 326 }); |
| 327 | 327 |
| 328 callback_joiner->WhenJoined(callback); | 328 callback_joiner->WhenJoined(callback); |
| 329 } else { | 329 } else { |
| 330 // Uncompressed media. Connect the demux stream directly to the sink. This | 330 // Uncompressed media. Connect the demux stream directly to the sink. This |
| 331 // would work for compressed media as well (the sink would decode), but we | 331 // would work for compressed media as well (the sink would decode), but we |
| 332 // want to test the decoder. | 332 // want to test the decoder. |
| 333 stream->decoded_producer_ = stream->encoded_producer_.Pass(); | 333 stream->decoded_producer_ = stream->encoded_producer_.Pass(); |
| 334 CreateSink(stream, input_media_type, callback); | 334 CreateSink(stream, input_media_type, callback); |
| 335 } | 335 } |
| 336 } | 336 } |
| 337 | 337 |
| 338 void MediaPlayerImpl::CreateSink(Stream* stream, | 338 void MediaPlayerImpl::CreateSink(Stream* stream, |
| 339 const MediaTypePtr& input_media_type, | 339 const MediaTypePtr& input_media_type, |
| 340 const std::function<void()>& callback) { | 340 const std::function<void()>& callback) { |
| 341 DCHECK(input_media_type); | 341 DCHECK(input_media_type); |
| 342 DCHECK(stream->decoded_producer_); | 342 DCHECK(stream->decoded_producer_); |
| 343 DCHECK(factory_); | 343 DCHECK(factory_); |
| 344 | 344 |
| 345 factory_->CreateSink(stream->renderer_.Pass(), input_media_type.Clone(), | 345 factory_->CreateSink(stream->renderer_.Pass(), input_media_type.Clone(), |
| 346 GetProxy(&stream->sink_)); | 346 GetProxy(&stream->sink_)); |
| 347 | 347 |
| 348 MediaTimelineControlPointPtr timeline_control_point; | 348 MediaTimelineControlPointPtr timeline_control_point; |
| 349 stream->sink_->GetTimelineControlPoint(GetProxy(&timeline_control_point)); | 349 stream->sink_->GetTimelineControlPoint(GetProxy(&timeline_control_point)); |
| 350 | 350 |
| 351 timeline_controller_->AddControlPoint(timeline_control_point.Pass()); | 351 timeline_controller_->AddControlPoint(timeline_control_point.Pass()); |
| 352 | 352 |
| 353 MediaConsumerPtr consumer; | 353 MediaPacketConsumerPtr consumer; |
| 354 stream->sink_->GetConsumer(GetProxy(&consumer)); | 354 stream->sink_->GetPacketConsumer(GetProxy(&consumer)); |
| 355 | 355 |
| 356 stream->decoded_producer_->Connect(consumer.Pass(), | 356 stream->decoded_producer_->Connect(consumer.Pass(), |
| 357 [this, callback, stream]() { | 357 [this, callback, stream]() { |
| 358 stream->decoded_producer_.reset(); | 358 stream->decoded_producer_.reset(); |
| 359 callback(); | 359 callback(); |
| 360 }); | 360 }); |
| 361 } | 361 } |
| 362 | 362 |
| 363 void MediaPlayerImpl::HandleDemuxMetadataUpdates(uint64_t version, | 363 void MediaPlayerImpl::HandleDemuxMetadataUpdates(uint64_t version, |
| 364 MediaMetadataPtr metadata) { | 364 MediaMetadataPtr metadata) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 389 HandleTimelineControlPointStatusUpdates(version, status.Pass()); | 389 HandleTimelineControlPointStatusUpdates(version, status.Pass()); |
| 390 }); | 390 }); |
| 391 } | 391 } |
| 392 | 392 |
| 393 MediaPlayerImpl::Stream::Stream() {} | 393 MediaPlayerImpl::Stream::Stream() {} |
| 394 | 394 |
| 395 MediaPlayerImpl::Stream::~Stream() {} | 395 MediaPlayerImpl::Stream::~Stream() {} |
| 396 | 396 |
| 397 } // namespace media | 397 } // namespace media |
| 398 } // namespace mojo | 398 } // namespace mojo |
| OLD | NEW |