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

Unified Diff: services/media/factory_service/media_player_impl.cc

Issue 1923763002: Motown: Ffmpeg video decoder (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: services/media/factory_service/media_player_impl.cc
diff --git a/services/media/factory_service/media_player_impl.cc b/services/media/factory_service/media_player_impl.cc
index 90e3730d405438b63cbd7b19473b1c8dd0fad889..ac254093fdbe901e1820921992b847ad8c743a76 100644
--- a/services/media/factory_service/media_player_impl.cc
+++ b/services/media/factory_service/media_player_impl.cc
@@ -57,9 +57,14 @@ MediaPlayerImpl::MediaPlayerImpl(InterfaceHandle<SeekingReader> reader,
switch (stream.media_type_->medium) {
case MediaTypeMedium::AUDIO:
stream.enabled_ = true;
- PrepareStream(streams_.back(), "mojo:audio_server",
+ PrepareStream(&stream, "mojo:audio_server",
callback_joiner->NewCallback());
break;
+ case MediaTypeMedium::VIDEO:
+ stream.enabled_ = true;
+ // TODO(dalesat): Send video somewhere.
+ PrepareStream(&stream, "nowhere", callback_joiner->NewCallback());
+ break;
// TODO(dalesat): Enable other stream types.
default:
break;
@@ -249,17 +254,18 @@ void MediaPlayerImpl::Seek(int64_t position) {
Update();
}
-void MediaPlayerImpl::PrepareStream(const std::unique_ptr<Stream>& stream,
+void MediaPlayerImpl::PrepareStream(Stream* stream,
const String& url,
const std::function<void()>& callback) {
DCHECK(factory_);
demux_->GetProducer(stream->index_, GetProxy(&stream->encoded_producer_));
- if (stream->media_type_->encoding != MediaType::kAudioEncodingLpcm) {
+ if (stream->media_type_->encoding != MediaType::kAudioEncodingLpcm &&
+ stream->media_type_->encoding != MediaType::kVideoEncodingUncompressed) {
std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create();
- // Compressed audio. Insert a decoder in front of the sink. The sink would
+ // Compressed media. Insert a decoder in front of the sink. The sink would
// add its own internal decoder, but we want to test the decoder.
factory_->CreateDecoder(stream->media_type_.Clone(),
GetProxy(&stream->decoder_));
@@ -269,14 +275,14 @@ void MediaPlayerImpl::PrepareStream(const std::unique_ptr<Stream>& stream,
callback_joiner->Spawn();
stream->encoded_producer_->Connect(decoder_consumer.Pass(),
- [&stream, callback_joiner]() {
+ [stream, callback_joiner]() {
stream->encoded_producer_.reset();
callback_joiner->Complete();
});
callback_joiner->Spawn();
stream->decoder_->GetOutputType(
- [this, &stream, url, callback_joiner](MediaTypePtr output_type) {
+ [this, stream, url, callback_joiner](MediaTypePtr output_type) {
stream->decoder_->GetProducer(GetProxy(&stream->decoded_producer_));
CreateSink(stream, output_type, url, callback_joiner->NewCallback());
callback_joiner->Complete();
@@ -284,15 +290,15 @@ void MediaPlayerImpl::PrepareStream(const std::unique_ptr<Stream>& stream,
callback_joiner->WhenJoined(callback);
} else {
- // Uncompressed audio. Connect the demux stream directly to the sink. This
- // would work for compressed audio as well (the sink would decode), but we
+ // Uncompressed media. Connect the demux stream directly to the sink. This
+ // would work for compressed media as well (the sink would decode), but we
// want to test the decoder.
stream->decoded_producer_ = stream->encoded_producer_.Pass();
CreateSink(stream, stream->media_type_, url, callback);
}
}
-void MediaPlayerImpl::CreateSink(const std::unique_ptr<Stream>& stream,
+void MediaPlayerImpl::CreateSink(Stream* stream,
const MediaTypePtr& input_media_type,
const String& url,
const std::function<void()>& callback) {
@@ -306,7 +312,7 @@ void MediaPlayerImpl::CreateSink(const std::unique_ptr<Stream>& stream,
stream->sink_->GetConsumer(GetProxy(&consumer));
stream->decoded_producer_->Connect(
- consumer.Pass(), [this, callback, &stream]() {
+ consumer.Pass(), [this, callback, stream]() {
stream->decoded_producer_.reset();
DCHECK(stream->state_ == MediaState::UNPREPARED);
@@ -334,10 +340,9 @@ void MediaPlayerImpl::HandleDemuxMetadataUpdates(uint64_t version,
});
}
-void MediaPlayerImpl::HandleSinkStatusUpdates(
- const std::unique_ptr<Stream>& stream,
- uint64_t version,
- MediaSinkStatusPtr status) {
+void MediaPlayerImpl::HandleSinkStatusUpdates(Stream* stream,
+ uint64_t version,
+ MediaSinkStatusPtr status) {
if (status && status->state > MediaState::UNPREPARED) {
// We transition to PAUSED when Connect completes.
DCHECK(stream->state_ > MediaState::UNPREPARED);
@@ -348,7 +353,7 @@ void MediaPlayerImpl::HandleSinkStatusUpdates(
}
stream->sink_->GetStatus(
- version, [this, &stream](uint64_t version, MediaSinkStatusPtr status) {
+ version, [this, stream](uint64_t version, MediaSinkStatusPtr status) {
HandleSinkStatusUpdates(stream, version, status.Pass());
});
}

Powered by Google App Engine
This is Rietveld 408576698