summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-09 19:39:10 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-09 19:39:10 +0000
commit0f678822946b5cafbad5a5c81270356c56ac3138 (patch)
treedd8932c5bd780679f883de8c7b2ece0a659016bc /media
parent45e4fab2ec46c7a3ebe6476f5a6d25f2aaf1e4cf (diff)
downloadchromium_src-0f678822946b5cafbad5a5c81270356c56ac3138.zip
chromium_src-0f678822946b5cafbad5a5c81270356c56ac3138.tar.gz
chromium_src-0f678822946b5cafbad5a5c81270356c56ac3138.tar.bz2
Revert 116889 - Creating integration tests for media pipeline that use real decoders and demuxers.
Reverting because Windows TSAN is failing. TEST=PipelineIntegrationTest Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=116349 Review URL: http://codereview.chromium.org/8968035 TBR=acolwell@chromium.org Review URL: http://codereview.chromium.org/9146009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116899 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/base/clock.cc6
-rw-r--r--media/base/clock.h5
-rw-r--r--media/base/pipeline_impl.cc50
-rw-r--r--media/base/pipeline_impl.h4
-rw-r--r--media/base/test_data_util.cc13
-rw-r--r--media/base/test_data_util.h5
-rw-r--r--media/filters/audio_renderer_base.cc4
-rw-r--r--media/filters/null_audio_renderer.cc73
-rw-r--r--media/filters/null_audio_renderer.h20
-rw-r--r--media/filters/pipeline_integration_test.cc218
-rw-r--r--media/media.gyp3
11 files changed, 76 insertions, 325 deletions
diff --git a/media/base/clock.cc b/media/base/clock.cc
index aaa0c13..61096177 100644
--- a/media/base/clock.cc
+++ b/media/base/clock.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -17,10 +17,6 @@ Clock::Clock(TimeProvider* time_provider)
Clock::~Clock() {}
-bool Clock::IsPlaying() const {
- return playing_;
-}
-
base::TimeDelta Clock::Play() {
DCHECK(!playing_);
reference_ = GetTimeFromProvider();
diff --git a/media/base/clock.h b/media/base/clock.h
index fc1be6d..0acf71b 100644
--- a/media/base/clock.h
+++ b/media/base/clock.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -33,9 +33,6 @@ class MEDIA_EXPORT Clock {
Clock(TimeProvider* time_provider);
~Clock();
- // Returns true if the clock is running.
- bool IsPlaying() const;
-
// Starts the clock and returns the current media time, which will increase
// with respect to the current playback rate.
base::TimeDelta Play();
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index eec4351..5ea444c 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -232,6 +232,9 @@ void PipelineImpl::SetPreload(Preload preload) {
}
base::TimeDelta PipelineImpl::GetCurrentTime() const {
+ // TODO(scherkus): perhaps replace checking state_ == kEnded with a bool that
+ // is set/get under the lock, because this is breaching the contract that
+ // |state_| is only accessed on |message_loop_|.
base::AutoLock auto_lock(lock_);
return GetCurrentTime_Locked();
}
@@ -239,9 +242,9 @@ base::TimeDelta PipelineImpl::GetCurrentTime() const {
base::TimeDelta PipelineImpl::GetCurrentTime_Locked() const {
lock_.AssertAcquired();
base::TimeDelta elapsed = clock_->Elapsed();
- if (elapsed > duration_)
+ if (state_ == kEnded || elapsed > duration_) {
return duration_;
-
+ }
return elapsed;
}
@@ -484,8 +487,9 @@ void PipelineImpl::SetTime(base::TimeDelta time) {
if (waiting_for_clock_update_) {
if (time < clock_->Elapsed())
return;
+ waiting_for_clock_update_ = false;
clock_->SetTime(time);
- StartClockIfWaitingForTimeUpdate_Locked();
+ clock_->Play();
return;
}
clock_->SetTime(time);
@@ -896,7 +900,8 @@ void PipelineImpl::SeekTask(base::TimeDelta time,
// Kick off seeking!
{
base::AutoLock auto_lock(lock_);
- if (clock_->IsPlaying())
+ // If we are waiting for a clock update, the clock hasn't been played yet.
+ if (!waiting_for_clock_update_)
clock_->Pause();
}
pipeline_filter_->Pause(
@@ -919,10 +924,12 @@ void PipelineImpl::NotifyEndedTask() {
return;
}
- // Start clock since there is no more audio to
- // trigger clock updates.
- base::AutoLock auto_lock(lock_);
- StartClockIfWaitingForTimeUpdate_Locked();
+ if (waiting_for_clock_update_) {
+ // Start clock since there is no more audio to
+ // trigger clock updates.
+ waiting_for_clock_update_ = false;
+ clock_->Play();
+ }
}
if (video_renderer_ && !video_renderer_->HasEnded()) {
@@ -931,12 +938,6 @@ void PipelineImpl::NotifyEndedTask() {
// Transition to ended, executing the callback if present.
SetState(kEnded);
- {
- base::AutoLock auto_lock(lock_);
- clock_->Pause();
- clock_->SetTime(duration_);
- }
-
if (!ended_callback_.is_null()) {
ended_callback_.Run(status_);
}
@@ -963,10 +964,6 @@ void PipelineImpl::DisableAudioRendererTask() {
demuxer_->OnAudioRendererDisabled();
pipeline_filter_->OnAudioRendererDisabled();
}
-
- // Start clock since there is no more audio to
- // trigger clock updates.
- StartClockIfWaitingForTimeUpdate_Locked();
}
void PipelineImpl::FilterStateTransitionTask() {
@@ -1032,9 +1029,9 @@ void PipelineImpl::FilterStateTransitionTask() {
base::AutoLock auto_lock(lock_);
// We use audio stream to update the clock. So if there is such a stream,
// we pause the clock until we receive a valid timestamp.
- waiting_for_clock_update_ = true;
- if (!has_audio_)
- StartClockIfWaitingForTimeUpdate_Locked();
+ waiting_for_clock_update_ = has_audio_;
+ if (!waiting_for_clock_update_)
+ clock_->Play();
// Start monitoring rate of downloading.
int bitrate = 0;
@@ -1433,13 +1430,4 @@ void PipelineImpl::NotifyCanPlayThrough() {
NotifyNetworkEventTask(CAN_PLAY_THROUGH);
}
-void PipelineImpl::StartClockIfWaitingForTimeUpdate_Locked() {
- lock_.AssertAcquired();
- if (!waiting_for_clock_update_)
- return;
-
- waiting_for_clock_update_ = false;
- clock_->Play();
-}
-
} // namespace media
diff --git a/media/base/pipeline_impl.h b/media/base/pipeline_impl.h
index e5652f0..be55291 100644
--- a/media/base/pipeline_impl.h
+++ b/media/base/pipeline_impl.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -349,8 +349,6 @@ class MEDIA_EXPORT PipelineImpl
// needing to pause to buffer.
void NotifyCanPlayThrough();
- void StartClockIfWaitingForTimeUpdate_Locked();
-
// Message loop used to execute pipeline tasks.
MessageLoop* message_loop_;
diff --git a/media/base/test_data_util.cc b/media/base/test_data_util.cc
index 3e6f3fd..45a3735 100644
--- a/media/base/test_data_util.cc
+++ b/media/base/test_data_util.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,17 +11,6 @@
namespace media {
-std::string GetTestDataURL(const std::string& name) {
- FilePath file_path;
- CHECK(PathService::Get(base::DIR_SOURCE_ROOT, &file_path));
-
- file_path = file_path.Append(FILE_PATH_LITERAL("media"))
- .Append(FILE_PATH_LITERAL("test"))
- .Append(FILE_PATH_LITERAL("data"))
- .AppendASCII(name);
- return file_path.MaybeAsASCII();
-}
-
void ReadTestDataFile(const std::string& name, scoped_array<uint8>* buffer,
int* size) {
FilePath file_path;
diff --git a/media/base/test_data_util.h b/media/base/test_data_util.h
index 142780b..19f8e7f 100644
--- a/media/base/test_data_util.h
+++ b/media/base/test_data_util.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -13,9 +13,6 @@
namespace media {
-// Returns a URL path for a file in the media/test/data directory.
-std::string GetTestDataURL(const std::string& name);
-
// Reads a test file from media/test/data directory and stores it in
// a scoped_array.
//
diff --git a/media/filters/audio_renderer_base.cc b/media/filters/audio_renderer_base.cc
index 049a39a..bca260a 100644
--- a/media/filters/audio_renderer_base.cc
+++ b/media/filters/audio_renderer_base.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -278,12 +278,10 @@ void AudioRendererBase::ScheduleRead_Locked() {
}
void AudioRendererBase::SetPlaybackRate(float playback_rate) {
- base::AutoLock auto_lock(lock_);
algorithm_->SetPlaybackRate(playback_rate);
}
float AudioRendererBase::GetPlaybackRate() {
- base::AutoLock auto_lock(lock_);
return algorithm_->playback_rate();
}
diff --git a/media/filters/null_audio_renderer.cc b/media/filters/null_audio_renderer.cc
index d4689aa..0d5daf5 100644
--- a/media/filters/null_audio_renderer.cc
+++ b/media/filters/null_audio_renderer.cc
@@ -1,11 +1,10 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <algorithm>
#include <cmath>
-#include "base/bind.h"
#include "base/logging.h"
#include "base/threading/platform_thread.h"
#include "media/base/filter_host.h"
@@ -22,17 +21,45 @@ NullAudioRenderer::NullAudioRenderer()
: AudioRendererBase(),
bytes_per_millisecond_(0),
buffer_size_(0),
- thread_("AudioThread") {
+ thread_(base::kNullThreadHandle),
+ shutdown_(false) {
}
NullAudioRenderer::~NullAudioRenderer() {
- DCHECK(!thread_.IsRunning());
+ DCHECK_EQ(base::kNullThreadHandle, thread_);
}
void NullAudioRenderer::SetVolume(float volume) {
// Do nothing.
}
+void NullAudioRenderer::ThreadMain() {
+ // Loop until we're signaled to stop.
+ while (!shutdown_) {
+ float sleep_in_milliseconds = 0.0f;
+
+ // Only consume buffers when actually playing.
+ if (GetPlaybackRate() > 0.0f) {
+ size_t bytes = FillBuffer(buffer_.get(),
+ buffer_size_,
+ base::TimeDelta(),
+ true);
+
+ // Calculate our sleep duration, taking playback rate into consideration.
+ sleep_in_milliseconds =
+ floor(bytes / static_cast<float>(bytes_per_millisecond_));
+ sleep_in_milliseconds /= GetPlaybackRate();
+ } else {
+ // If paused, sleep for 10 milliseconds before polling again.
+ sleep_in_milliseconds = 10.0f;
+ }
+
+ // Sleep for at least one millisecond so we don't spin the CPU.
+ base::PlatformThread::Sleep(
+ std::max(1, static_cast<int>(sleep_in_milliseconds)));
+ }
+}
+
bool NullAudioRenderer::OnInitialize(int bits_per_channel,
ChannelLayout channel_layout,
int sample_rate) {
@@ -44,41 +71,17 @@ bool NullAudioRenderer::OnInitialize(int bits_per_channel,
buffer_.reset(new uint8[buffer_size_]);
DCHECK(buffer_.get());
- if (!thread_.Start())
- return false;
-
- thread_.message_loop()->PostTask(FROM_HERE, base::Bind(
- &NullAudioRenderer::FillBufferTask, this));
- return true;
+ // It's safe to start the thread now because it simply sleeps when playback
+ // rate is 0.0f.
+ return base::PlatformThread::Create(0, this, &thread_);
}
void NullAudioRenderer::OnStop() {
- thread_.Stop();
-}
-
-void NullAudioRenderer::FillBufferTask() {
- int64 sleep_in_milliseconds = 0;
-
- // Only consume buffers when actually playing.
- if (GetPlaybackRate() > 0.0f) {
- size_t bytes = FillBuffer(buffer_.get(),
- buffer_size_,
- base::TimeDelta(),
- true);
-
- // Calculate our sleep duration, taking playback rate into consideration.
- sleep_in_milliseconds =
- bytes / (bytes_per_millisecond_ * GetPlaybackRate());
- } else {
- // If paused, sleep for 10 milliseconds before polling again.
- sleep_in_milliseconds = 10;
+ shutdown_ = true;
+ if (thread_) {
+ base::PlatformThread::Join(thread_);
+ thread_ = base::kNullThreadHandle;
}
-
- // Sleep for at least one millisecond so we don't spin the CPU.
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&NullAudioRenderer::FillBufferTask, this),
- std::max(sleep_in_milliseconds, static_cast<int64>(1)));
}
} // namespace media
diff --git a/media/filters/null_audio_renderer.h b/media/filters/null_audio_renderer.h
index 9832367..9f4ed94 100644
--- a/media/filters/null_audio_renderer.h
+++ b/media/filters/null_audio_renderer.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -16,14 +16,16 @@
#include <deque>
#include "base/memory/scoped_ptr.h"
-#include "base/threading/thread.h"
+#include "base/threading/platform_thread.h"
#include "media/base/buffers.h"
#include "media/base/filters.h"
#include "media/filters/audio_renderer_base.h"
namespace media {
-class MEDIA_EXPORT NullAudioRenderer : public AudioRendererBase {
+class MEDIA_EXPORT NullAudioRenderer
+ : public AudioRendererBase,
+ public base::PlatformThread::Delegate {
public:
NullAudioRenderer();
virtual ~NullAudioRenderer();
@@ -31,6 +33,9 @@ class MEDIA_EXPORT NullAudioRenderer : public AudioRendererBase {
// AudioRenderer implementation.
virtual void SetVolume(float volume) OVERRIDE;
+ // PlatformThread::Delegate implementation.
+ virtual void ThreadMain() OVERRIDE;
+
protected:
// AudioRendererBase implementation.
virtual bool OnInitialize(int bits_per_channel,
@@ -39,10 +44,6 @@ class MEDIA_EXPORT NullAudioRenderer : public AudioRendererBase {
virtual void OnStop() OVERRIDE;
private:
- // Audio thread task that periodically calls FillBuffer() to consume
- // audio data.
- void FillBufferTask();
-
// A number to convert bytes written in FillBuffer to milliseconds based on
// the audio format.
size_t bytes_per_millisecond_;
@@ -52,7 +53,10 @@ class MEDIA_EXPORT NullAudioRenderer : public AudioRendererBase {
size_t buffer_size_;
// Separate thread used to throw away data.
- base::Thread thread_;
+ base::PlatformThreadHandle thread_;
+
+ // Shutdown flag.
+ bool shutdown_;
DISALLOW_COPY_AND_ASSIGN(NullAudioRenderer);
};
diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc
deleted file mode 100644
index 6f99590..0000000
--- a/media/filters/pipeline_integration_test.cc
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/bind.h"
-#include "media/base/filter_collection.h"
-#include "media/base/media_log.h"
-#include "media/base/message_loop_factory_impl.h"
-#include "media/base/pipeline_impl.h"
-#include "media/base/test_data_util.h"
-#include "media/filters/ffmpeg_audio_decoder.h"
-#include "media/filters/ffmpeg_demuxer_factory.h"
-#include "media/filters/ffmpeg_video_decoder.h"
-#include "media/filters/file_data_source_factory.h"
-#include "media/filters/null_audio_renderer.h"
-#include "media/filters/video_renderer_base.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::AnyNumber;
-
-namespace media {
-
-// Integration tests for PipelineImpl. Real demuxers, real decoders, and
-// base renderer implementations are used to verify pipeline functionality. The
-// renderers used in these tests rely heavily on the AudioRendererBase &
-// VideoRendererBase implementations which contain a majority of the code used
-// in the real AudioRendererImpl & VideoRendererImpl implementations used in the
-// browser. The renderers in this test don't actually write data to a display or
-// audio device. Both of these devices are simulated since they have little
-// effect on verifying pipeline behavior and allow tests to run faster than
-// real-time.
-class PipelineIntegrationTest : public testing::Test {
- public:
- PipelineIntegrationTest()
- : message_loop_factory_(new MessageLoopFactoryImpl()),
- pipeline_(new PipelineImpl(&message_loop_, new MediaLog())),
- ended_(false) {
- pipeline_->Init(
- base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)),
- base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)),
- Pipeline::NetworkEventCB());
-
- EXPECT_CALL(*this, OnVideoRendererPaint()).Times(AnyNumber());
- EXPECT_CALL(*this, OnSetOpaque(true));
- }
-
- virtual ~PipelineIntegrationTest() {
- if (!pipeline_->IsRunning())
- return;
-
- Stop();
- }
-
- void OnStatusCallback(PipelineStatus expected_status,
- PipelineStatus status) {
- DCHECK_EQ(status, expected_status);
- message_loop_.PostTask(FROM_HERE, MessageLoop::QuitClosure());
- }
-
- PipelineStatusCB QuitOnStatusCB(PipelineStatus expected_status) {
- return base::Bind(&PipelineIntegrationTest::OnStatusCallback,
- base::Unretained(this),
- expected_status);
- }
-
- void OnEnded(PipelineStatus status) {
- DCHECK_EQ(status, PIPELINE_OK);
- DCHECK(!ended_);
- ended_ = true;
- message_loop_.PostTask(FROM_HERE, MessageLoop::QuitClosure());
- }
-
- void WaitUntilOnEnded() {
- if (!ended_) {
- message_loop_.Run();
- DCHECK(ended_);
- }
- }
-
- MOCK_METHOD1(OnError, void(PipelineStatus));
-
- void Start(const std::string& url, PipelineStatus expected_status) {
- pipeline_->Start(CreateFilterCollection(), url,
- QuitOnStatusCB(expected_status));
- message_loop_.Run();
- }
-
- void Play() {
- pipeline_->SetPlaybackRate(1);
- }
-
- void Pause() {
- pipeline_->SetPlaybackRate(0);
- }
-
- void Seek(base::TimeDelta seek_time) {
- ended_ = false;
-
- pipeline_->Seek(seek_time, QuitOnStatusCB(PIPELINE_OK));
- message_loop_.Run();
- }
-
- void Stop() {
- DCHECK(pipeline_->IsRunning());
- pipeline_->Stop(QuitOnStatusCB(PIPELINE_OK));
- message_loop_.Run();
- }
-
- void QuitAfterCurrentTimeTask(const base::TimeDelta& quit_time) {
- if (pipeline_->GetCurrentTime() >= quit_time) {
- message_loop_.Quit();
- return;
- }
-
- message_loop_.PostDelayedTask(
- FROM_HERE,
- base::Bind(&PipelineIntegrationTest::QuitAfterCurrentTimeTask,
- base::Unretained(this), quit_time),
- 10);
- }
-
- void WaitUntilCurrentTimeIsAfter(const base::TimeDelta& wait_time) {
- DCHECK(pipeline_->IsRunning());
- DCHECK_GT(pipeline_->GetPlaybackRate(), 0);
- DCHECK(wait_time <= pipeline_->GetMediaDuration());
-
- message_loop_.PostDelayedTask(
- FROM_HERE,
- base::Bind(&PipelineIntegrationTest::QuitAfterCurrentTimeTask,
- base::Unretained(this),
- wait_time),
- 10);
- message_loop_.Run();
- }
-
- FilterCollection* CreateFilterCollection() {
- scoped_ptr<FilterCollection> collection(
- new FilterCollection());
- collection->SetDemuxerFactory(
- new FFmpegDemuxerFactory(new FileDataSourceFactory(),
- &message_loop_));
- collection->AddAudioDecoder(new FFmpegAudioDecoder(
- message_loop_factory_->GetMessageLoop("AudioDecoderThread")));
- collection->AddVideoDecoder(new FFmpegVideoDecoder(
- message_loop_factory_->GetMessageLoop("VideoDecoderThread")));
- collection->AddVideoRenderer(new VideoRendererBase(
- base::Bind(&PipelineIntegrationTest::OnVideoRendererPaint,
- base::Unretained(this)),
- base::Bind(&PipelineIntegrationTest::OnSetOpaque,
- base::Unretained(this))));
- collection->AddAudioRenderer(new NullAudioRenderer());
- return collection.release();
- }
-
- protected:
- MessageLoop message_loop_;
- scoped_ptr<MessageLoopFactory> message_loop_factory_;
- scoped_refptr<Pipeline> pipeline_;
- bool ended_;
-
- private:
- MOCK_METHOD0(OnVideoRendererPaint, void());
- MOCK_METHOD1(OnSetOpaque, void(bool));
-};
-
-
-TEST_F(PipelineIntegrationTest, BasicPlayback) {
- Start(GetTestDataURL("bear-320x240.webm"), PIPELINE_OK);
-
- Play();
-
- WaitUntilOnEnded();
-}
-
-TEST_F(PipelineIntegrationTest, SeekWhilePaused) {
- Start(GetTestDataURL("bear-320x240.webm"), PIPELINE_OK);
-
- base::TimeDelta duration(pipeline_->GetMediaDuration());
- base::TimeDelta start_seek_time(duration / 4);
- base::TimeDelta seek_time(duration * 3 / 4);
-
- Play();
- WaitUntilCurrentTimeIsAfter(start_seek_time);
- Pause();
- Seek(seek_time);
- EXPECT_EQ(pipeline_->GetCurrentTime(), seek_time);
- Play();
- WaitUntilOnEnded();
-
- // Make sure seeking after reaching the end works as expected.
- Pause();
- Seek(seek_time);
- EXPECT_EQ(pipeline_->GetCurrentTime(), seek_time);
- Play();
- WaitUntilOnEnded();
-}
-
-TEST_F(PipelineIntegrationTest, SeekWhilePlaying) {
- Start(GetTestDataURL("bear-320x240.webm"), PIPELINE_OK);
-
- base::TimeDelta duration(pipeline_->GetMediaDuration());
- base::TimeDelta start_seek_time(duration / 4);
- base::TimeDelta seek_time(duration * 3 / 4);
-
- Play();
- WaitUntilCurrentTimeIsAfter(start_seek_time);
- Seek(seek_time);
- EXPECT_GE(pipeline_->GetCurrentTime(), seek_time);
- WaitUntilOnEnded();
-
- // Make sure seeking after reaching the end works as expected.
- Seek(seek_time);
- EXPECT_GE(pipeline_->GetCurrentTime(), seek_time);
- WaitUntilOnEnded();
-}
-
-} // namespace media
diff --git a/media/media.gyp b/media/media.gyp
index d218f32..b28fdac 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -1,4 +1,4 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -621,7 +621,6 @@
'filters/ffmpeg_h264_bitstream_converter_unittest.cc',
'filters/ffmpeg_video_decoder_unittest.cc',
'filters/file_data_source_unittest.cc',
- 'filters/pipeline_integration_test.cc',
'filters/video_renderer_base_unittest.cc',
'video/capture/video_capture_device_unittest.cc',
'webm/cluster_builder.cc',