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

Side by Side Diff: services/media/factory_service/media_player_impl.cc

Issue 1902183002: Motown: Change media type (stream type) representation (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Changes per review feedback. Created 4 years, 8 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 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 "services/media/factory_service/media_player_impl.h" 6 #include "services/media/factory_service/media_player_impl.h"
7 #include "services/media/framework/callback_joiner.h" 7 #include "services/media/framework/callback_joiner.h"
8 #include "services/media/framework/parts/reader.h" 8 #include "services/media/framework/parts/reader.h"
9 9
10 namespace mojo { 10 namespace mojo {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 HandleDemuxMetadataUpdates(); 46 HandleDemuxMetadataUpdates();
47 47
48 demux_->Describe([this](mojo::Array<MediaTypePtr> stream_types) { 48 demux_->Describe([this](mojo::Array<MediaTypePtr> stream_types) {
49 // Populate streams_ and enable the streams we want. 49 // Populate streams_ and enable the streams we want.
50 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create(); 50 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create();
51 51
52 for (MediaTypePtr& stream_type : stream_types) { 52 for (MediaTypePtr& stream_type : stream_types) {
53 streams_.push_back(std::unique_ptr<Stream>( 53 streams_.push_back(std::unique_ptr<Stream>(
54 new Stream(streams_.size(), stream_type.Pass()))); 54 new Stream(streams_.size(), stream_type.Pass())));
55 Stream& stream = *streams_.back(); 55 Stream& stream = *streams_.back();
56 switch (stream.media_type_->scheme) { 56 switch (stream.media_type_->medium) {
57 case MediaTypeScheme::COMPRESSED_AUDIO: 57 case MediaTypeMedium::AUDIO:
58 case MediaTypeScheme::LPCM:
59 stream.enabled_ = true; 58 stream.enabled_ = true;
60 PrepareStream(streams_.back(), "mojo:audio_server", 59 PrepareStream(streams_.back(), "mojo:audio_server",
61 callback_joiner->NewCallback()); 60 callback_joiner->NewCallback());
62 break; 61 break;
63 // TODO(dalesat): Enable other stream types. 62 // TODO(dalesat): Enable other stream types.
64 default: 63 default:
65 break; 64 break;
66 } 65 }
67 } 66 }
68 67
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 Update(); 248 Update();
250 } 249 }
251 250
252 void MediaPlayerImpl::PrepareStream(const std::unique_ptr<Stream>& stream, 251 void MediaPlayerImpl::PrepareStream(const std::unique_ptr<Stream>& stream,
253 const String& url, 252 const String& url,
254 const std::function<void()>& callback) { 253 const std::function<void()>& callback) {
255 DCHECK(factory_); 254 DCHECK(factory_);
256 255
257 demux_->GetProducer(stream->index_, GetProxy(&stream->encoded_producer_)); 256 demux_->GetProducer(stream->index_, GetProxy(&stream->encoded_producer_));
258 257
259 if (stream->media_type_->scheme == MediaTypeScheme::COMPRESSED_AUDIO) { 258 if (stream->media_type_->encoding != MediaType::kAudioEncodingLpcm) {
260 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create(); 259 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create();
261 260
262 // Compressed audio. Insert a decoder in front of the sink. The sink would 261 // Compressed audio. Insert a decoder in front of the sink. The sink would
263 // add its own internal decoder, but we want to test the decoder. 262 // add its own internal decoder, but we want to test the decoder.
264 factory_->CreateDecoder(stream->media_type_.Clone(), 263 factory_->CreateDecoder(stream->media_type_.Clone(),
265 GetProxy(&stream->decoder_)); 264 GetProxy(&stream->decoder_));
266 265
267 MediaConsumerPtr decoder_consumer; 266 MediaConsumerPtr decoder_consumer;
268 stream->decoder_->GetConsumer(GetProxy(&decoder_consumer)); 267 stream->decoder_->GetConsumer(GetProxy(&decoder_consumer));
269 268
(...skipping 10 matching lines...) Expand all
280 stream->decoder_->GetProducer(GetProxy(&stream->decoded_producer_)); 279 stream->decoder_->GetProducer(GetProxy(&stream->decoded_producer_));
281 CreateSink(stream, output_type, url, callback_joiner->NewCallback()); 280 CreateSink(stream, output_type, url, callback_joiner->NewCallback());
282 callback_joiner->Complete(); 281 callback_joiner->Complete();
283 }); 282 });
284 283
285 callback_joiner->WhenJoined(callback); 284 callback_joiner->WhenJoined(callback);
286 } else { 285 } else {
287 // Uncompressed audio. Connect the demux stream directly to the sink. This 286 // Uncompressed audio. Connect the demux stream directly to the sink. This
288 // would work for compressed audio as well (the sink would decode), but we 287 // would work for compressed audio as well (the sink would decode), but we
289 // want to test the decoder. 288 // want to test the decoder.
290 DCHECK(stream->media_type_->scheme == MediaTypeScheme::LPCM);
291 stream->decoded_producer_ = stream->encoded_producer_.Pass(); 289 stream->decoded_producer_ = stream->encoded_producer_.Pass();
292 CreateSink(stream, stream->media_type_, url, callback); 290 CreateSink(stream, stream->media_type_, url, callback);
293 } 291 }
294 } 292 }
295 293
296 void MediaPlayerImpl::CreateSink(const std::unique_ptr<Stream>& stream, 294 void MediaPlayerImpl::CreateSink(const std::unique_ptr<Stream>& stream,
297 const MediaTypePtr& input_media_type, 295 const MediaTypePtr& input_media_type,
298 const String& url, 296 const String& url,
299 const std::function<void()>& callback) { 297 const std::function<void()>& callback) {
300 DCHECK(input_media_type); 298 DCHECK(input_media_type);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 }); 352 });
355 } 353 }
356 354
357 MediaPlayerImpl::Stream::Stream(size_t index, MediaTypePtr media_type) 355 MediaPlayerImpl::Stream::Stream(size_t index, MediaTypePtr media_type)
358 : index_(index), media_type_(media_type.Pass()) {} 356 : index_(index), media_type_(media_type.Pass()) {}
359 357
360 MediaPlayerImpl::Stream::~Stream() {} 358 MediaPlayerImpl::Stream::~Stream() {}
361 359
362 } // namespace media 360 } // namespace media
363 } // namespace mojo 361 } // namespace mojo
OLDNEW
« no previous file with comments | « services/media/factory_service/media_demux_impl.cc ('k') | services/media/factory_service/media_sink_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698