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

Side by Side Diff: media/filters/legacy_frame_processor.cc

Issue 341083004: Introduce the playback time into the MSE garbage collection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: New flow to pass the media time to SourceBufferStream. Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « media/filters/legacy_frame_processor.h ('k') | media/filters/source_buffer_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/filters/legacy_frame_processor.h" 5 #include "media/filters/legacy_frame_processor.h"
6 6
7 #include "media/base/buffers.h" 7 #include "media/base/buffers.h"
8 #include "media/base/stream_parser_buffer.h" 8 #include "media/base/stream_parser_buffer.h"
9 9
10 namespace media { 10 namespace media {
(...skipping 15 matching lines...) Expand all
26 sequence_mode_ = sequence_mode; 26 sequence_mode_ = sequence_mode;
27 } 27 }
28 28
29 bool LegacyFrameProcessor::ProcessFrames( 29 bool LegacyFrameProcessor::ProcessFrames(
30 const StreamParser::BufferQueue& audio_buffers, 30 const StreamParser::BufferQueue& audio_buffers,
31 const StreamParser::BufferQueue& video_buffers, 31 const StreamParser::BufferQueue& video_buffers,
32 const StreamParser::TextBufferQueueMap& text_map, 32 const StreamParser::TextBufferQueueMap& text_map,
33 base::TimeDelta append_window_start, 33 base::TimeDelta append_window_start,
34 base::TimeDelta append_window_end, 34 base::TimeDelta append_window_end,
35 bool* new_media_segment, 35 bool* new_media_segment,
36 base::TimeDelta* timestamp_offset) { 36 base::TimeDelta* timestamp_offset,
37 base::TimeDelta media_time) {
37 DVLOG(2) << __FUNCTION__ << "()"; 38 DVLOG(2) << __FUNCTION__ << "()";
38 DCHECK(new_media_segment); 39 DCHECK(new_media_segment);
39 DCHECK(timestamp_offset); 40 DCHECK(timestamp_offset);
40 41
41 // NOTE: Legacy coded frame processing does not update timestamp offset. 42 // NOTE: Legacy coded frame processing does not update timestamp offset.
42 base::TimeDelta offset = *timestamp_offset; 43 base::TimeDelta offset = *timestamp_offset;
43 44
44 DCHECK(!audio_buffers.empty() || !video_buffers.empty() || 45 DCHECK(!audio_buffers.empty() || !video_buffers.empty() ||
45 !text_map.empty()); 46 !text_map.empty());
46 47
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 segment_timestamp = std::min(filtered_video.front()->GetDecodeTimestamp(), 105 segment_timestamp = std::min(filtered_video.front()->GetDecodeTimestamp(),
105 segment_timestamp); 106 segment_timestamp);
106 } 107 }
107 108
108 *new_media_segment = false; 109 *new_media_segment = false;
109 DCHECK(segment_timestamp != kInfiniteDuration()); 110 DCHECK(segment_timestamp != kInfiniteDuration());
110 NotifyNewMediaSegmentStarting(segment_timestamp); 111 NotifyNewMediaSegmentStarting(segment_timestamp);
111 } 112 }
112 113
113 if (!filtered_audio.empty() && 114 if (!filtered_audio.empty() &&
114 !AppendAndUpdateDuration(audio_track->stream(), filtered_audio)) { 115 !AppendAndUpdateDuration(
116 audio_track->stream(), filtered_audio, media_time)) {
115 return false; 117 return false;
116 } 118 }
117 119
118 if (!filtered_video.empty() && 120 if (!filtered_video.empty() &&
119 !AppendAndUpdateDuration(video_track->stream(), filtered_video)) { 121 !AppendAndUpdateDuration(
122 video_track->stream(), filtered_video, media_time)) {
120 return false; 123 return false;
121 } 124 }
122 125
123 if (!filtered_text.empty()) { 126 if (!filtered_text.empty()) {
124 for (StreamParser::TextBufferQueueMap::const_iterator itr = 127 for (StreamParser::TextBufferQueueMap::const_iterator itr =
125 filtered_text.begin(); 128 filtered_text.begin();
126 itr != filtered_text.end(); 129 itr != filtered_text.end();
127 ++itr) { 130 ++itr) {
128 MseTrackBuffer* track = FindTrack(itr->first); 131 MseTrackBuffer* track = FindTrack(itr->first);
129 if (!track || !AppendAndUpdateDuration(track->stream(), itr->second)) 132 if (!track || !AppendAndUpdateDuration(
133 track->stream(), itr->second, media_time))
130 return false; 134 return false;
131 } 135 }
132 } 136 }
133 137
134 return true; 138 return true;
135 } 139 }
136 140
137 void LegacyFrameProcessor::AdjustBufferTimestamps( 141 void LegacyFrameProcessor::AdjustBufferTimestamps(
138 const StreamParser::BufferQueue& buffers, 142 const StreamParser::BufferQueue& buffers,
139 base::TimeDelta timestamp_offset) { 143 base::TimeDelta timestamp_offset) {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 230
227 track->set_needs_random_access_point(false); 231 track->set_needs_random_access_point(false);
228 } 232 }
229 233
230 filtered_buffers->push_back(buffer); 234 filtered_buffers->push_back(buffer);
231 } 235 }
232 } 236 }
233 237
234 bool LegacyFrameProcessor::AppendAndUpdateDuration( 238 bool LegacyFrameProcessor::AppendAndUpdateDuration(
235 ChunkDemuxerStream* stream, 239 ChunkDemuxerStream* stream,
236 const StreamParser::BufferQueue& buffers) { 240 const StreamParser::BufferQueue& buffers,
241 base::TimeDelta media_time) {
237 DCHECK(!buffers.empty()); 242 DCHECK(!buffers.empty());
238 243
239 if (!stream || !stream->Append(buffers)) 244 if (!stream || !stream->Append(buffers, media_time))
240 return false; 245 return false;
241 246
242 // Approximate spec's "highest presentation end timestamp". 247 // Approximate spec's "highest presentation end timestamp".
243 base::TimeDelta highest_end_timestamp = stream->GetBufferedDuration(); 248 base::TimeDelta highest_end_timestamp = stream->GetBufferedDuration();
244 DCHECK(highest_end_timestamp > base::TimeDelta()); 249 DCHECK(highest_end_timestamp > base::TimeDelta());
245 250
246 increase_duration_cb_.Run(highest_end_timestamp); 251 increase_duration_cb_.Run(highest_end_timestamp);
247 return true; 252 return true;
248 } 253 }
249 254
(...skipping 29 matching lines...) Expand all
279 std::min(*lowest_segment_timestamp, 284 std::min(*lowest_segment_timestamp,
280 filtered_buffers.front()->GetDecodeTimestamp()); 285 filtered_buffers.front()->GetDecodeTimestamp());
281 DCHECK(filtered_text->find(text_track_id) == filtered_text->end()); 286 DCHECK(filtered_text->find(text_track_id) == filtered_text->end());
282 filtered_text->insert(std::make_pair(text_track_id, filtered_buffers)); 287 filtered_text->insert(std::make_pair(text_track_id, filtered_buffers));
283 } 288 }
284 289
285 return true; 290 return true;
286 } 291 }
287 292
288 } // namespace media 293 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/legacy_frame_processor.h ('k') | media/filters/source_buffer_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698