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

Side by Side Diff: media/mojo/services/mojo_source_buffer_service.cc

Issue 2643743002: Mojify demuxers and allow running {Chunk/FFmpeg}Demuxer in a Utility Process (Closed)
Patch Set: Rebase and make sure to unbind mojom::DemuxerPtr on the bound thread during termination Created 3 years, 10 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/mojo/services/mojo_source_buffer_service.h"
6
7 #include <map>
8
9 #include "media/base/data_buffer.h"
10 #include "media/base/media_tracks.h"
11 #include "media/base/source_buffer.h"
12 #include "media/mojo/common/media_type_converters.h"
13 #include "media/mojo/common/mojo_data_buffer_converter.h"
14
15 namespace media {
16
17 MojoSourceBufferService::MojoSourceBufferService(
18 base::WeakPtr<MojoDemuxerServiceContext> context)
19 : task_runner_(base::ThreadTaskRunnerHandle::Get()),
20 context_(context),
21 source_buffer_(nullptr),
22 weak_factory_(this) {
23 DCHECK(context_);
24 }
25
26 MojoSourceBufferService::~MojoSourceBufferService() {}
27
28 void MojoSourceBufferService::Initialize(
29 mojom::SourceBufferClientAssociatedPtrInfo client,
30 int32_t demuxer_id,
31 mojo::ScopedDataPipeConsumerHandle consumer_handle) {
32 CHECK(task_runner_->BelongsToCurrentThread());
33
34 client_.Bind(std::move(client));
35
36 context_->GetDemuxerSourceBuffer(demuxer_id, &source_buffer_);
37 CHECK(source_buffer_);
38
39 mojo_data_buffer_reader_.reset(
40 new MojoDataBufferReader(std::move(consumer_handle)));
41 }
42
43 void MojoSourceBufferService::AddId(const std::string& id,
44 const std::string& type,
45 const std::string& codecs,
46 const AddIdCallback& callback) {
47 CHECK(task_runner_->BelongsToCurrentThread());
48 media::SourceBuffer::Status status = source_buffer_->AddId(id, type, codecs);
49 callback.Run(status);
50 }
51
52 void MojoSourceBufferService::AppendData(const std::string& id,
53 mojom::DataBufferPtr mojo_data_buffer,
54 base::TimeDelta append_window_start,
55 base::TimeDelta append_window_end,
56 const AppendDataCallback& callback) {
57 CHECK(task_runner_->BelongsToCurrentThread());
58
59 mojo_data_buffer_reader_->ReadDataBuffer(
60 std::move(mojo_data_buffer),
61 base::BindOnce(&MojoSourceBufferService::OnBufferRead,
62 weak_factory_.GetWeakPtr(), id, append_window_start,
63 append_window_end, callback));
64 }
65
66 void MojoSourceBufferService::OnBufferRead(const std::string& id,
67 base::TimeDelta append_window_start,
68 base::TimeDelta append_window_end,
69 const AppendDataCallback& callback,
70 scoped_refptr<DataBuffer> buffer) {
71 CHECK(task_runner_->BelongsToCurrentThread());
72 base::TimeDelta timestamp_offset;
73 bool success = false;
74
75 if (!buffer) {
76 callback.Run(success, timestamp_offset);
77 return;
78 }
79 success = source_buffer_->AppendData(id, buffer->data(), buffer->data_size(),
80 append_window_start, append_window_end,
81 &timestamp_offset);
82 callback.Run(success, timestamp_offset);
83 }
84
85 void MojoSourceBufferService::SetTracksWatcher(const std::string& id) {
86 CHECK(task_runner_->BelongsToCurrentThread());
87 source_buffer_->SetTracksWatcher(
88 id, base::Bind(&MojoSourceBufferService::OnTracksWatcher,
89 weak_factory_.GetWeakPtr(), id));
90 }
91
92 void MojoSourceBufferService::OnTracksWatcher(
93 const std::string& id,
94 std::unique_ptr<MediaTracks> tracks) {
95 CHECK(task_runner_->BelongsToCurrentThread());
96 CHECK(tracks);
97 mojom::MediaTracksPtr mojo_tracks = mojom::MediaTracks::From(*tracks.get());
98 CHECK(mojo_tracks);
99
100 client_->OnTracksWatcher(id, std::move(mojo_tracks));
101 }
102
103 void MojoSourceBufferService::RemoveId(const std::string& id) {
104 CHECK(task_runner_->BelongsToCurrentThread());
105 source_buffer_->RemoveId(id);
106 }
107
108 void MojoSourceBufferService::GetBufferedRanges(
109 const std::string& id,
110 const GetBufferedRangesCallback& callback) {
111 CHECK(task_runner_->BelongsToCurrentThread());
112 Ranges<base::TimeDelta> ranges = source_buffer_->GetBufferedRanges(id);
113 mojom::RangesTimeDeltaPtr mojo_ranges = mojom::RangesTimeDelta::From(ranges);
114 CHECK(mojo_ranges);
115 callback.Run(std::move(mojo_ranges));
116 }
117
118 void MojoSourceBufferService::GetHighestPresentationTimestamp(
119 const std::string& id,
120 const GetHighestPresentationTimestampCallback& callback) {
121 CHECK(task_runner_->BelongsToCurrentThread());
122 base::TimeDelta timestamp =
123 source_buffer_->GetHighestPresentationTimestamp(id);
124 callback.Run(timestamp);
125 }
126
127 void MojoSourceBufferService::ResetParserState(
128 const std::string& id,
129 base::TimeDelta append_window_start,
130 base::TimeDelta append_window_end,
131 const ResetParserStateCallback& callback) {
132 CHECK(task_runner_->BelongsToCurrentThread());
133 base::TimeDelta timestamp_offset;
134 source_buffer_->ResetParserState(id, append_window_start, append_window_end,
135 &timestamp_offset);
136 callback.Run(timestamp_offset);
137 }
138
139 void MojoSourceBufferService::Remove(const std::string& id,
140 base::TimeDelta start,
141 base::TimeDelta end) {
142 CHECK(task_runner_->BelongsToCurrentThread());
143 source_buffer_->Remove(id, start, end);
144 }
145
146 void MojoSourceBufferService::EvictCodedFrames(
147 const std::string& id,
148 base::TimeDelta currentMediaTime,
149 size_t newDataSize,
150 const EvictCodedFramesCallback& callback) {
151 CHECK(task_runner_->BelongsToCurrentThread());
152 bool success =
153 source_buffer_->EvictCodedFrames(id, currentMediaTime, newDataSize);
154 callback.Run(success);
155 }
156
157 void MojoSourceBufferService::OnMemoryPressure(
158 base::TimeDelta currentMediaTime,
159 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level,
160 bool force_instant_gc) {
161 CHECK(task_runner_->BelongsToCurrentThread());
162 source_buffer_->OnMemoryPressure(currentMediaTime, memory_pressure_level,
163 force_instant_gc);
164 }
165
166 void MojoSourceBufferService::GetDuration(const GetDurationCallback& callback) {
167 double duration = source_buffer_->GetDuration();
168 callback.Run(duration);
169 }
170
171 void MojoSourceBufferService::GetDuration_Locked(
172 const GetDuration_LockedCallback& callback) {
173 callback.Run(source_buffer_->GetDuration_Locked());
174 }
175
176 void MojoSourceBufferService::SetDuration(double duration) {
177 source_buffer_->SetDuration(duration);
178 }
179
180 void MojoSourceBufferService::IsParsingMediaSegment(
181 const std::string& id,
182 const IsParsingMediaSegmentCallback& callback) {
183 bool is_parsing = source_buffer_->IsParsingMediaSegment(id);
184 callback.Run(is_parsing);
185 }
186
187 void MojoSourceBufferService::SetSequenceMode(const std::string& id,
188 bool sequence_mode) {
189 source_buffer_->SetSequenceMode(id, sequence_mode);
190 }
191
192 void MojoSourceBufferService::SetGroupStartTimestampIfInSequenceMode(
193 const std::string& id,
194 base::TimeDelta timestamp_offset) {
195 source_buffer_->SetGroupStartTimestampIfInSequenceMode(id, timestamp_offset);
196 }
197
198 void MojoSourceBufferService::MarkEndOfStream(PipelineStatus status) {
199 source_buffer_->MarkEndOfStream(status);
200 }
201
202 void MojoSourceBufferService::UnmarkEndOfStream() {
203 source_buffer_->UnmarkEndOfStream();
204 }
205
206 void MojoSourceBufferService::Shutdown() {
207 source_buffer_->Shutdown();
208 }
209 /*
210 void MojoSourceBufferService::SetMemoryLimitsForTest(DemuxerStream::Type type,
211 size_t memory_limit){}
212
213 Ranges<base::TimeDelta> MojoSourceBufferService::GetBufferedRanges() const{
214 return source_buffer_->GetBufferedRanges();
215 }*/
216
217 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/mojo_source_buffer_service.h ('k') | media/mojo/services/utility_mojo_media_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698