Commit 6e963dbd authored by acolwell@chromium.org's avatar acolwell@chromium.org

Update SourceBufferStream and its unit tests to always expect valid durations.

This change fixes the SourceBufferStream unit tests so that they always
provide valid durations for buffers that it passes to SourceBufferStream.
I've also added code to SoureBufferStream to verify that it always gets
buffers with valid durations.

Minor tweaks to test expectations were needed to compensate for the
SourceBufferStream behaving differently when it got actual durations instead
of using the durations it made up. In most cases I just used the duration
the SourceBufferStream was ultimately using. In a few cases the duration
the SourceBufferStream was generating didn't make any sense so I simply
changed the expectations to match the new behavior.

Review URL: https://codereview.chromium.org/379693002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283365 0039d316-1c4b-4281-b951-d872f2087c98
parent 967767de
......@@ -14,6 +14,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "media/base/buffers.h"
#include "media/base/decrypt_config.h"
#include "media/base/media_export.h"
......@@ -77,6 +78,9 @@ class MEDIA_EXPORT DecoderBuffer
void set_duration(base::TimeDelta duration) {
DCHECK(!end_of_stream());
DCHECK(duration == kNoTimestamp() ||
(duration >= base::TimeDelta() && duration != kInfiniteDuration()))
<< duration.InSecondsF();
duration_ = duration;
}
......
......@@ -106,6 +106,11 @@ void StreamParserBuffer::SetConfigId(int config_id) {
void StreamParserBuffer::ConvertToSpliceBuffer(
const BufferQueue& pre_splice_buffers) {
DCHECK(splice_buffers_.empty());
DCHECK(duration() > base::TimeDelta())
<< "Only buffers with a valid duration can convert to a splice buffer."
<< " pts " << timestamp().InSecondsF()
<< " dts " << GetDecodeTimestamp().InSecondsF()
<< " dur " << duration().InSecondsF();
DCHECK(!end_of_stream());
// Make a copy of this first, before making any changes.
......@@ -139,6 +144,8 @@ void StreamParserBuffer::ConvertToSpliceBuffer(
// The splice duration is the duration of all buffers before the splice plus
// the highest ending timestamp after the splice point.
DCHECK(overlapping_buffer->duration() > base::TimeDelta());
DCHECK(pre_splice_buffers.back()->duration() > base::TimeDelta());
set_duration(
std::max(overlapping_buffer->timestamp() + overlapping_buffer->duration(),
pre_splice_buffers.back()->timestamp() +
......
......@@ -717,6 +717,11 @@ bool SourceBufferStream::IsMonotonicallyIncreasing(
base::TimeDelta current_timestamp = (*itr)->GetDecodeTimestamp();
bool current_is_keyframe = (*itr)->IsKeyframe();
DCHECK(current_timestamp != kNoTimestamp());
DCHECK((*itr)->duration() >= base::TimeDelta())
<< "Packet with invalid duration."
<< " pts " << (*itr)->timestamp().InSecondsF()
<< " dts " << (*itr)->GetDecodeTimestamp().InSecondsF()
<< " dur " << (*itr)->duration().InSecondsF();
if (prev_timestamp != kNoTimestamp()) {
if (current_timestamp < prev_timestamp) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment