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

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

Issue 191513002: Extract coded frame processing from SourceState into LegacyFrameProcessor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and address PS2 comments and nits 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
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:
48 demuxer_->SetSequenceMode(id_, false);
49 return true;
45 break; 50 break;
acolwell GONE FROM CHROMIUM 2014/03/11 20:00:37 nit: remove break here and below.
wolenetz 2014/03/12 00:46:14 Done in the prereq CL I split out of this one.
46 case WebSourceBuffer::AppendModeSequence: 51 case WebSourceBuffer::AppendModeSequence:
47 sequence_mode = true; 52 demuxer_->SetSequenceMode(id_, true);
53 return true;
48 break; 54 break;
49 } 55 }
50 56
51 return demuxer_->SetSequenceMode(id_, sequence_mode); 57 NOTREACHED();
58 return false;
52 } 59 }
53 60
54 blink::WebTimeRanges WebSourceBufferImpl::buffered() { 61 blink::WebTimeRanges WebSourceBufferImpl::buffered() {
55 media::Ranges<base::TimeDelta> ranges = demuxer_->GetBufferedRanges(id_); 62 media::Ranges<base::TimeDelta> ranges = demuxer_->GetBufferedRanges(id_);
56 blink::WebTimeRanges result(ranges.size()); 63 blink::WebTimeRanges result(ranges.size());
57 for (size_t i = 0; i < ranges.size(); i++) { 64 for (size_t i = 0; i < ranges.size(); i++) {
58 result[i].start = ranges.start(i).InSecondsF(); 65 result[i].start = ranges.start(i).InSecondsF();
59 result[i].end = ranges.end(i).InSecondsF(); 66 result[i].end = ranges.end(i).InSecondsF();
60 } 67 }
61 return result; 68 return result;
62 } 69 }
63 70
64 void WebSourceBufferImpl::append( 71 void WebSourceBufferImpl::append(
65 const unsigned char* data, 72 const unsigned char* data,
66 unsigned length, 73 unsigned length,
67 double* timestamp_offset) { 74 double* timestamp_offset) {
68 demuxer_->AppendData(id_, data, length, timestamp_offset); 75 base::TimeDelta old_offset = timestamp_offset_;
76 demuxer_->AppendData(id_, data, length,
77 append_window_start_, append_window_end_,
78 &timestamp_offset_);
79
80 // Coded frame processing may update the timestamp offset. If the caller
81 // provides a non-NULL |timestamp_offset| and frame processing changes the
82 // timestamp offset, report the new offset to the caller. Do not update the
83 // caller's offset otherwise, to preserve any pre-existing value that may have
84 // more than microsecond precision.
85 if (timestamp_offset && old_offset != timestamp_offset_)
86 *timestamp_offset = timestamp_offset_.InSecondsF();
69 } 87 }
70 88
71 void WebSourceBufferImpl::abort() { 89 void WebSourceBufferImpl::abort() {
72 demuxer_->Abort(id_); 90 demuxer_->Abort(id_);
73 } 91 }
74 92
75 void WebSourceBufferImpl::remove(double start, double end) { 93 void WebSourceBufferImpl::remove(double start, double end) {
76 demuxer_->Remove(id_, DoubleToTimeDelta(start), DoubleToTimeDelta(end)); 94 demuxer_->Remove(id_, DoubleToTimeDelta(start), DoubleToTimeDelta(end));
77 } 95 }
78 96
79 bool WebSourceBufferImpl::setTimestampOffset(double offset) { 97 bool WebSourceBufferImpl::setTimestampOffset(double offset) {
80 base::TimeDelta time_offset = base::TimeDelta::FromMicroseconds( 98 if (demuxer_->IsParsingMediaSegment(id_))
81 offset * base::Time::kMicrosecondsPerSecond); 99 return false;
82 return demuxer_->SetTimestampOffset(id_, time_offset); 100
101 timestamp_offset_ = DoubleToTimeDelta(offset);
102 return true;
83 } 103 }
84 104
85 void WebSourceBufferImpl::setAppendWindowStart(double start) { 105 void WebSourceBufferImpl::setAppendWindowStart(double start) {
86 demuxer_->SetAppendWindowStart(id_, DoubleToTimeDelta(start)); 106 append_window_start_ = DoubleToTimeDelta(start);
87 } 107 }
88 108
89 void WebSourceBufferImpl::setAppendWindowEnd(double end) { 109 void WebSourceBufferImpl::setAppendWindowEnd(double end) {
90 demuxer_->SetAppendWindowEnd(id_, DoubleToTimeDelta(end)); 110 append_window_end_ = DoubleToTimeDelta(end);
91 } 111 }
92 112
93 void WebSourceBufferImpl::removedFromMediaSource() { 113 void WebSourceBufferImpl::removedFromMediaSource() {
94 demuxer_->RemoveId(id_); 114 demuxer_->RemoveId(id_);
95 demuxer_ = NULL; 115 demuxer_ = NULL;
96 } 116 }
97 117
98 } // namespace content 118 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698