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

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

Issue 1945903006: Motown: Move responsibility for binding to MediaFactoryService::Product (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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/bind.h" 5 #include "base/bind.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "services/media/factory_service/media_demux_impl.h" 8 #include "services/media/factory_service/media_demux_impl.h"
9 #include "services/media/framework/parts/reader_cache.h" 9 #include "services/media/framework/parts/reader_cache.h"
10 #include "services/media/framework/util/callback_joiner.h" 10 #include "services/media/framework/util/callback_joiner.h"
11 #include "services/media/framework_mojo/mojo_reader.h" 11 #include "services/media/framework_mojo/mojo_reader.h"
12 #include "services/media/framework_mojo/mojo_type_conversions.h" 12 #include "services/media/framework_mojo/mojo_type_conversions.h"
13 13
14 namespace mojo { 14 namespace mojo {
15 namespace media { 15 namespace media {
16 16
17 // static 17 // static
18 std::shared_ptr<MediaDemuxImpl> MediaDemuxImpl::Create( 18 std::shared_ptr<MediaDemuxImpl> MediaDemuxImpl::Create(
19 InterfaceHandle<SeekingReader> reader, 19 InterfaceHandle<SeekingReader> reader,
20 InterfaceRequest<MediaDemux> request, 20 InterfaceRequest<MediaDemux> request,
21 MediaFactoryService* owner) { 21 MediaFactoryService* owner) {
22 return std::shared_ptr<MediaDemuxImpl>( 22 return std::shared_ptr<MediaDemuxImpl>(
23 new MediaDemuxImpl(reader.Pass(), request.Pass(), owner)); 23 new MediaDemuxImpl(reader.Pass(), request.Pass(), owner));
24 } 24 }
25 25
26 MediaDemuxImpl::MediaDemuxImpl(InterfaceHandle<SeekingReader> reader, 26 MediaDemuxImpl::MediaDemuxImpl(InterfaceHandle<SeekingReader> reader,
27 InterfaceRequest<MediaDemux> request, 27 InterfaceRequest<MediaDemux> request,
28 MediaFactoryService* owner) 28 MediaFactoryService* owner)
29 : MediaFactoryService::Product(owner), binding_(this, request.Pass()) { 29 : MediaFactoryService::Product<MediaDemux>(this, request.Pass(), owner) {
30 DCHECK(reader); 30 DCHECK(reader);
31 31
32 task_runner_ = base::MessageLoop::current()->task_runner(); 32 task_runner_ = base::MessageLoop::current()->task_runner();
33 DCHECK(task_runner_); 33 DCHECK(task_runner_);
34 34
35 metadata_publisher_.SetCallbackRunner( 35 metadata_publisher_.SetCallbackRunner(
36 [this](const GetMetadataCallback& callback, uint64_t version) { 36 [this](const GetMetadataCallback& callback, uint64_t version) {
37 callback.Run(version, demux_ ? MediaMetadata::From(demux_->metadata()) 37 callback.Run(version, demux_ ? MediaMetadata::From(demux_->metadata())
38 : nullptr); 38 : nullptr);
39 }); 39 });
40 40
41 // Go away when the client is no longer connected.
42 binding_.set_connection_error_handler([this]() { ReleaseFromOwner(); });
43
44 std::shared_ptr<Reader> reader_ptr = MojoReader::Create(reader.Pass()); 41 std::shared_ptr<Reader> reader_ptr = MojoReader::Create(reader.Pass());
45 if (!reader_ptr) { 42 if (!reader_ptr) {
46 NOTREACHED() << "couldn't create reader"; 43 NOTREACHED() << "couldn't create reader";
47 return; 44 return;
48 } 45 }
49 46
50 std::shared_ptr<ReaderCache> reader_cache_ptr = 47 std::shared_ptr<ReaderCache> reader_cache_ptr =
51 ReaderCache::Create(reader_ptr); 48 ReaderCache::Create(reader_ptr);
52 if (!reader_cache_ptr) { 49 if (!reader_cache_ptr) {
53 NOTREACHED() << "couldn't create reader cache"; 50 NOTREACHED() << "couldn't create reader cache";
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 MediaSourceStreamDescriptor::New(); 91 MediaSourceStreamDescriptor::New();
95 result[i] = streams_[i]->media_type(); 92 result[i] = streams_[i]->media_type();
96 } 93 }
97 94
98 callback.Run(result.Pass()); 95 callback.Run(result.Pass());
99 }); 96 });
100 } 97 }
101 98
102 void MediaDemuxImpl::GetProducer(uint32_t stream_index, 99 void MediaDemuxImpl::GetProducer(uint32_t stream_index,
103 InterfaceRequest<MediaProducer> producer) { 100 InterfaceRequest<MediaProducer> producer) {
104 DCHECK(init_complete_.occurred()); 101 RCHECK(init_complete_.occurred());
105 102
106 if (stream_index >= streams_.size()) { 103 if (stream_index >= streams_.size()) {
107 return; 104 return;
108 } 105 }
109 106
110 streams_[stream_index]->GetProducer(producer.Pass()); 107 streams_[stream_index]->GetProducer(producer.Pass());
111 } 108 }
112 109
113 void MediaDemuxImpl::GetMetadata(uint64_t version_last_seen, 110 void MediaDemuxImpl::GetMetadata(uint64_t version_last_seen,
114 const GetMetadataCallback& callback) { 111 const GetMetadataCallback& callback) {
115 metadata_publisher_.Get(version_last_seen, callback); 112 metadata_publisher_.Get(version_last_seen, callback);
116 } 113 }
117 114
118 void MediaDemuxImpl::Prime(const PrimeCallback& callback) { 115 void MediaDemuxImpl::Prime(const PrimeCallback& callback) {
119 DCHECK(init_complete_.occurred()); 116 RCHECK(init_complete_.occurred());
120 117
121 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create(); 118 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create();
122 119
123 for (std::unique_ptr<Stream>& stream : streams_) { 120 for (std::unique_ptr<Stream>& stream : streams_) {
124 stream->PrimeConnection(callback_joiner->NewCallback()); 121 stream->PrimeConnection(callback_joiner->NewCallback());
125 } 122 }
126 123
127 callback_joiner->WhenJoined(callback); 124 callback_joiner->WhenJoined(callback);
128 } 125 }
129 126
130 void MediaDemuxImpl::Flush(const FlushCallback& callback) { 127 void MediaDemuxImpl::Flush(const FlushCallback& callback) {
131 DCHECK(init_complete_.occurred()); 128 RCHECK(init_complete_.occurred());
132 129
133 graph_.FlushAllOutputs(demux_part_); 130 graph_.FlushAllOutputs(demux_part_);
134 131
135 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create(); 132 std::shared_ptr<CallbackJoiner> callback_joiner = CallbackJoiner::Create();
136 133
137 for (std::unique_ptr<Stream>& stream : streams_) { 134 for (std::unique_ptr<Stream>& stream : streams_) {
138 stream->FlushConnection(callback_joiner->NewCallback()); 135 stream->FlushConnection(callback_joiner->NewCallback());
139 } 136 }
140 137
141 callback_joiner->WhenJoined(callback); 138 callback_joiner->WhenJoined(callback);
142 } 139 }
143 140
144 void MediaDemuxImpl::Seek(int64_t position, const SeekCallback& callback) { 141 void MediaDemuxImpl::Seek(int64_t position, const SeekCallback& callback) {
145 DCHECK(init_complete_.occurred()); 142 RCHECK(init_complete_.occurred());
146 143
147 demux_->Seek(position, [this, callback]() { 144 demux_->Seek(position, [this, callback]() {
148 task_runner_->PostTask(FROM_HERE, base::Bind(&RunSeekCallback, callback)); 145 task_runner_->PostTask(FROM_HERE, base::Bind(&RunSeekCallback, callback));
149 }); 146 });
150 } 147 }
151 148
152 // static 149 // static
153 void MediaDemuxImpl::RunSeekCallback(const SeekCallback& callback) { 150 void MediaDemuxImpl::RunSeekCallback(const SeekCallback& callback) {
154 callback.Run(); 151 callback.Run();
155 } 152 }
(...skipping 28 matching lines...) Expand all
184 } 181 }
185 182
186 void MediaDemuxImpl::Stream::FlushConnection( 183 void MediaDemuxImpl::Stream::FlushConnection(
187 const MojoProducer::FlushConnectionCallback callback) { 184 const MojoProducer::FlushConnectionCallback callback) {
188 DCHECK(producer_); 185 DCHECK(producer_);
189 producer_->FlushConnection(callback); 186 producer_->FlushConnection(callback);
190 } 187 }
191 188
192 } // namespace media 189 } // namespace media
193 } // namespace mojo 190 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698