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

Side by Side Diff: content/renderer/media/websourcebuffer_impl.cc

Issue 196173002: MSE: Lift timestampOffset and appendWindow[Start,End] storage to WebSourceBufferImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address PS1 nit Created 6 years, 9 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 | « content/renderer/media/websourcebuffer_impl.h ('k') | media/filters/chunk_demuxer.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/media/websourcebuffer_impl.h" 5 #include "content/renderer/media/websourcebuffer_impl.h"
6 6
7 #include "base/float_util.h" 7 #include "base/float_util.h"
8 #include "media/filters/chunk_demuxer.h" 8 #include "media/filters/chunk_demuxer.h"
9 9
10 namespace content { 10 namespace content {
(...skipping 12 matching lines...) Expand all
23 if (time >= max_time_in_seconds) 23 if (time >= max_time_in_seconds)
24 return max_time; 24 return max_time;
25 25
26 return base::TimeDelta::FromMicroseconds( 26 return base::TimeDelta::FromMicroseconds(
27 time * base::Time::kMicrosecondsPerSecond); 27 time * base::Time::kMicrosecondsPerSecond);
28 } 28 }
29 29
30 WebSourceBufferImpl::WebSourceBufferImpl( 30 WebSourceBufferImpl::WebSourceBufferImpl(
31 const std::string& id, media::ChunkDemuxer* demuxer) 31 const std::string& id, media::ChunkDemuxer* demuxer)
32 : id_(id), 32 : id_(id),
33 demuxer_(demuxer) { 33 demuxer_(demuxer),
34 append_window_end_(media::kInfiniteDuration()) {
34 DCHECK(demuxer_); 35 DCHECK(demuxer_);
35 } 36 }
36 37
37 WebSourceBufferImpl::~WebSourceBufferImpl() { 38 WebSourceBufferImpl::~WebSourceBufferImpl() {
38 DCHECK(!demuxer_) << "Object destroyed w/o removedFromMediaSource() call"; 39 DCHECK(!demuxer_) << "Object destroyed w/o removedFromMediaSource() call";
39 } 40 }
40 41
41 bool WebSourceBufferImpl::setMode(WebSourceBuffer::AppendMode mode) { 42 bool WebSourceBufferImpl::setMode(WebSourceBuffer::AppendMode mode) {
42 bool sequence_mode = false; 43 if (demuxer_->IsParsingMediaSegment(id_))
44 return false;
45
43 switch (mode) { 46 switch (mode) {
44 case WebSourceBuffer::AppendModeSegments: 47 case WebSourceBuffer::AppendModeSegments:
45 break; 48 demuxer_->SetSequenceMode(id_, false);
49 return true;
46 case WebSourceBuffer::AppendModeSequence: 50 case WebSourceBuffer::AppendModeSequence:
47 sequence_mode = true; 51 demuxer_->SetSequenceMode(id_, true);
48 break; 52 return true;
49 } 53 }
50 54
51 return demuxer_->SetSequenceMode(id_, sequence_mode); 55 NOTREACHED();
56 return false;
52 } 57 }
53 58
54 blink::WebTimeRanges WebSourceBufferImpl::buffered() { 59 blink::WebTimeRanges WebSourceBufferImpl::buffered() {
55 media::Ranges<base::TimeDelta> ranges = demuxer_->GetBufferedRanges(id_); 60 media::Ranges<base::TimeDelta> ranges = demuxer_->GetBufferedRanges(id_);
56 blink::WebTimeRanges result(ranges.size()); 61 blink::WebTimeRanges result(ranges.size());
57 for (size_t i = 0; i < ranges.size(); i++) { 62 for (size_t i = 0; i < ranges.size(); i++) {
58 result[i].start = ranges.start(i).InSecondsF(); 63 result[i].start = ranges.start(i).InSecondsF();
59 result[i].end = ranges.end(i).InSecondsF(); 64 result[i].end = ranges.end(i).InSecondsF();
60 } 65 }
61 return result; 66 return result;
62 } 67 }
63 68
64 void WebSourceBufferImpl::append( 69 void WebSourceBufferImpl::append(
65 const unsigned char* data, 70 const unsigned char* data,
66 unsigned length, 71 unsigned length,
67 double* timestamp_offset) { 72 double* timestamp_offset) {
68 demuxer_->AppendData(id_, data, length, timestamp_offset); 73 base::TimeDelta old_offset = timestamp_offset_;
74 demuxer_->AppendData(id_, data, length,
75 append_window_start_, append_window_end_,
76 &timestamp_offset_);
77
78 // Coded frame processing may update the timestamp offset. If the caller
79 // provides a non-NULL |timestamp_offset| and frame processing changes the
80 // timestamp offset, report the new offset to the caller. Do not update the
81 // caller's offset otherwise, to preserve any pre-existing value that may have
82 // more than microsecond precision.
83 if (timestamp_offset && old_offset != timestamp_offset_)
84 *timestamp_offset = timestamp_offset_.InSecondsF();
69 } 85 }
70 86
71 void WebSourceBufferImpl::abort() { 87 void WebSourceBufferImpl::abort() {
72 demuxer_->Abort(id_); 88 demuxer_->Abort(id_);
73 } 89 }
74 90
75 void WebSourceBufferImpl::remove(double start, double end) { 91 void WebSourceBufferImpl::remove(double start, double end) {
76 demuxer_->Remove(id_, DoubleToTimeDelta(start), DoubleToTimeDelta(end)); 92 demuxer_->Remove(id_, DoubleToTimeDelta(start), DoubleToTimeDelta(end));
77 } 93 }
78 94
79 bool WebSourceBufferImpl::setTimestampOffset(double offset) { 95 bool WebSourceBufferImpl::setTimestampOffset(double offset) {
80 base::TimeDelta time_offset = base::TimeDelta::FromMicroseconds( 96 if (demuxer_->IsParsingMediaSegment(id_))
81 offset * base::Time::kMicrosecondsPerSecond); 97 return false;
82 return demuxer_->SetTimestampOffset(id_, time_offset); 98
99 timestamp_offset_ = DoubleToTimeDelta(offset);
100 return true;
83 } 101 }
84 102
85 void WebSourceBufferImpl::setAppendWindowStart(double start) { 103 void WebSourceBufferImpl::setAppendWindowStart(double start) {
86 demuxer_->SetAppendWindowStart(id_, DoubleToTimeDelta(start)); 104 append_window_start_ = DoubleToTimeDelta(start);
87 } 105 }
88 106
89 void WebSourceBufferImpl::setAppendWindowEnd(double end) { 107 void WebSourceBufferImpl::setAppendWindowEnd(double end) {
90 demuxer_->SetAppendWindowEnd(id_, DoubleToTimeDelta(end)); 108 append_window_end_ = DoubleToTimeDelta(end);
91 } 109 }
92 110
93 void WebSourceBufferImpl::removedFromMediaSource() { 111 void WebSourceBufferImpl::removedFromMediaSource() {
94 demuxer_->RemoveId(id_); 112 demuxer_->RemoveId(id_);
95 demuxer_ = NULL; 113 demuxer_ = NULL;
96 } 114 }
97 115
98 } // namespace content 116 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/websourcebuffer_impl.h ('k') | media/filters/chunk_demuxer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698