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

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

Issue 1945903006: Motown: Move responsibility for binding to MediaFactoryService::Product (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Change per feedback - rename Abort to UnbindAndReleaseFromOwner Created 4 years, 7 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_decoder_impl.h" 6 #include "services/media/factory_service/media_decoder_impl.h"
7 #include "services/media/framework_mojo/mojo_type_conversions.h" 7 #include "services/media/framework_mojo/mojo_type_conversions.h"
8 8
9 namespace mojo { 9 namespace mojo {
10 namespace media { 10 namespace media {
11 11
12 // static 12 // static
13 std::shared_ptr<MediaDecoderImpl> MediaDecoderImpl::Create( 13 std::shared_ptr<MediaDecoderImpl> MediaDecoderImpl::Create(
14 MediaTypePtr input_media_type, 14 MediaTypePtr input_media_type,
15 InterfaceRequest<MediaTypeConverter> request, 15 InterfaceRequest<MediaTypeConverter> request,
16 MediaFactoryService* owner) { 16 MediaFactoryService* owner) {
17 return std::shared_ptr<MediaDecoderImpl>( 17 return std::shared_ptr<MediaDecoderImpl>(
18 new MediaDecoderImpl(input_media_type.Pass(), request.Pass(), owner)); 18 new MediaDecoderImpl(input_media_type.Pass(), request.Pass(), owner));
19 } 19 }
20 20
21 MediaDecoderImpl::MediaDecoderImpl(MediaTypePtr input_media_type, 21 MediaDecoderImpl::MediaDecoderImpl(MediaTypePtr input_media_type,
22 InterfaceRequest<MediaTypeConverter> request, 22 InterfaceRequest<MediaTypeConverter> request,
23 MediaFactoryService* owner) 23 MediaFactoryService* owner)
24 : MediaFactoryService::Product(owner), 24 : MediaFactoryService::Product<MediaTypeConverter>(this,
25 binding_(this, request.Pass()), 25 request.Pass(),
26 owner),
26 consumer_(MojoConsumer::Create()), 27 consumer_(MojoConsumer::Create()),
27 producer_(MojoProducer::Create()) { 28 producer_(MojoProducer::Create()) {
28 DCHECK(input_media_type); 29 DCHECK(input_media_type);
29 30
30 // Go away when the client is no longer connected.
31 binding_.set_connection_error_handler([this]() { ReleaseFromOwner(); });
32
33 std::unique_ptr<StreamType> input_stream_type = 31 std::unique_ptr<StreamType> input_stream_type =
34 input_media_type.To<std::unique_ptr<StreamType>>(); 32 input_media_type.To<std::unique_ptr<StreamType>>();
35 33
36 if (Decoder::Create(*input_stream_type, &decoder_) != Result::kOk) { 34 if (Decoder::Create(*input_stream_type, &decoder_) != Result::kOk) {
37 LOG(WARNING) << "Couldn't find decoder for stream type"; 35 LOG(WARNING) << "Couldn't find decoder for stream type";
38 if (binding_.is_bound()) { 36 UnbindAndReleaseFromOwner();
39 binding_.Close();
40 }
41 return; 37 return;
42 } 38 }
43 39
44 PartRef consumer_ref = graph_.Add(consumer_); 40 PartRef consumer_ref = graph_.Add(consumer_);
45 PartRef decoder_ref = graph_.Add(decoder_); 41 PartRef decoder_ref = graph_.Add(decoder_);
46 PartRef producer_ref = graph_.Add(producer_); 42 PartRef producer_ref = graph_.Add(producer_);
47 43
48 graph_.ConnectParts(consumer_ref, decoder_ref); 44 graph_.ConnectParts(consumer_ref, decoder_ref);
49 graph_.ConnectParts(decoder_ref, producer_ref); 45 graph_.ConnectParts(decoder_ref, producer_ref);
50 46
(...skipping 24 matching lines...) Expand all
75 consumer_->AddBinding(consumer.Pass()); 71 consumer_->AddBinding(consumer.Pass());
76 } 72 }
77 73
78 void MediaDecoderImpl::GetProducer( 74 void MediaDecoderImpl::GetProducer(
79 mojo::InterfaceRequest<MediaProducer> producer) { 75 mojo::InterfaceRequest<MediaProducer> producer) {
80 producer_->AddBinding(producer.Pass()); 76 producer_->AddBinding(producer.Pass());
81 } 77 }
82 78
83 } // namespace media 79 } // namespace media
84 } // namespace mojo 80 } // namespace mojo
OLDNEW
« no previous file with comments | « services/media/factory_service/media_decoder_impl.h ('k') | services/media/factory_service/media_demux_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698