summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--media/base/demuxer.h9
-rw-r--r--media/base/mock_filters.cc23
-rw-r--r--media/base/mock_filters.h37
-rw-r--r--media/base/pipeline.cc10
-rw-r--r--media/base/pipeline.h8
-rw-r--r--media/base/pipeline_unittest.cc24
-rw-r--r--media/filters/chunk_demuxer.cc9
-rw-r--r--media/filters/chunk_demuxer.h2
-rw-r--r--media/filters/dummy_demuxer.cc15
-rw-r--r--media/filters/dummy_demuxer.h5
-rw-r--r--media/filters/ffmpeg_demuxer.cc12
-rw-r--r--media/filters/ffmpeg_demuxer.h9
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc2
-rw-r--r--media/filters/pipeline_integration_test_base.cc3
-rw-r--r--media/tools/player_wtl/movie.cc3
-rw-r--r--media/tools/player_x11/player_x11.cc3
-rw-r--r--media/tools/seek_tester/seek_tester.cc2
-rw-r--r--webkit/media/filter_helpers.cc12
-rw-r--r--webkit/media/filter_helpers.h6
-rw-r--r--webkit/media/webmediaplayer_impl.cc23
-rw-r--r--webkit/media/webmediaplayer_impl.h2
21 files changed, 196 insertions, 23 deletions
diff --git a/media/base/demuxer.h b/media/base/demuxer.h
index a8cf50b..1e913d4 100644
--- a/media/base/demuxer.h
+++ b/media/base/demuxer.h
@@ -70,6 +70,15 @@ class MEDIA_EXPORT Demuxer : public base::RefCountedThreadSafe<Demuxer> {
// approximated. Returns 0 if it is unknown.
virtual int GetBitrate() = 0;
+ // Returns true if the source is from a local file or stream (such as a
+ // webcam stream), false otherwise.
+ //
+ // TODO(scherkus): See http://crbug.com/120426 on why we should remove this.
+ virtual bool IsLocalSource() = 0;
+
+ // Returns true if seeking is possible; false otherwise.
+ virtual bool IsSeekable() = 0;
+
protected:
friend class base::RefCountedThreadSafe<Demuxer>;
virtual ~Demuxer();
diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc
index a5977a4..00347cd 100644
--- a/media/base/mock_filters.cc
+++ b/media/base/mock_filters.cc
@@ -15,6 +15,29 @@ using ::testing::Return;
namespace media {
+MockDataSource::MockDataSource()
+ : total_bytes_(-1),
+ buffered_bytes_(-1) {
+}
+
+MockDataSource::~MockDataSource() {}
+
+void MockDataSource::set_host(DataSourceHost* data_source_host) {
+ DataSource::set_host(data_source_host);
+
+ if (total_bytes_ > 0)
+ host()->SetTotalBytes(total_bytes_);
+
+ if (buffered_bytes_ > 0)
+ host()->SetBufferedBytes(buffered_bytes_);
+}
+
+void MockDataSource::SetTotalAndBufferedBytes(int64 total_bytes,
+ int64 buffered_bytes) {
+ total_bytes_ = total_bytes;
+ buffered_bytes_ = buffered_bytes;
+}
+
MockDemuxer::MockDemuxer() {}
MockDemuxer::~MockDemuxer() {}
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index 32b2333..a5060d3 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -3,7 +3,8 @@
// found in the LICENSE file.
//
// A new breed of mock media filters, this time using gmock! Feel free to add
-// actions if you need interesting side-effects.
+// actions if you need interesting side-effects (i.e., copying data to the
+// buffer passed into MockDataSource::Read()).
//
// Don't forget you can use StrictMock<> and NiceMock<> if you want the mock
// filters to fail the test or do nothing when an unexpected method is called.
@@ -69,6 +70,38 @@ class MockFilter : public Filter {
DISALLOW_COPY_AND_ASSIGN(MockFilter);
};
+class MockDataSource : public DataSource {
+ public:
+ MockDataSource();
+
+ virtual void set_host(DataSourceHost* data_source_host);
+
+ MOCK_METHOD1(Stop, void(const base::Closure& callback));
+ MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, const PipelineStatusCB& cb));
+ MOCK_METHOD0(OnAudioRendererDisabled, void());
+
+ // DataSource implementation.
+ MOCK_METHOD4(Read, void(int64 position, int size, uint8* data,
+ const DataSource::ReadCB& callback));
+ MOCK_METHOD1(GetSize, bool(int64* size_out));
+ MOCK_METHOD1(SetBitrate, void(int bitrate));
+ MOCK_METHOD0(IsStreaming, bool());
+
+ // Sets the TotalBytes & BufferedBytes values to be sent to host() when
+ // the set_host() is called.
+ void SetTotalAndBufferedBytes(int64 total_bytes, int64 buffered_bytes);
+
+ protected:
+ virtual ~MockDataSource();
+
+ private:
+ int64 total_bytes_;
+ int64 buffered_bytes_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockDataSource);
+};
+
class MockDemuxer : public Demuxer {
public:
MockDemuxer();
@@ -82,6 +115,8 @@ class MockDemuxer : public Demuxer {
MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(DemuxerStream::Type));
MOCK_CONST_METHOD0(GetStartTime, base::TimeDelta());
MOCK_METHOD0(GetBitrate, int());
+ MOCK_METHOD0(IsLocalSource, bool());
+ MOCK_METHOD0(IsSeekable, bool());
protected:
virtual ~MockDemuxer();
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
index 623cecf..260f04d 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -223,6 +223,16 @@ void Pipeline::GetNaturalVideoSize(gfx::Size* out_size) const {
*out_size = natural_size_;
}
+bool Pipeline::IsStreaming() const {
+ base::AutoLock auto_lock(lock_);
+ return demuxer_ && !demuxer_->IsSeekable();
+}
+
+bool Pipeline::IsLocalSource() const {
+ base::AutoLock auto_lock(lock_);
+ return demuxer_ && demuxer_->IsLocalSource();
+}
+
PipelineStatistics Pipeline::GetStatistics() const {
base::AutoLock auto_lock(lock_);
return statistics_;
diff --git a/media/base/pipeline.h b/media/base/pipeline.h
index 73359c2..699b5e2 100644
--- a/media/base/pipeline.h
+++ b/media/base/pipeline.h
@@ -230,6 +230,14 @@ class MEDIA_EXPORT Pipeline
// be 0.
void GetNaturalVideoSize(gfx::Size* out_size) const;
+ // If this method returns true, that means the data source is a streaming
+ // data source. Seeking may not be possible.
+ bool IsStreaming() const;
+
+ // If this method returns true, that means the data source is local and
+ // the network is not needed.
+ bool IsLocalSource() const;
+
// Gets the current pipeline statistics.
PipelineStatistics GetStatistics() const;
diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
index 888b962..56d39ff 100644
--- a/media/base/pipeline_unittest.cc
+++ b/media/base/pipeline_unittest.cc
@@ -36,6 +36,8 @@ namespace media {
static const int kTotalBytes = 1024;
static const int kBufferedBytes = 1024;
static const int kBitrate = 1234;
+static const bool kLocalSource = false;
+static const bool kSeekable = true;
ACTION_P(InitializeDemuxerWithError, error) {
arg1.Run(error);
@@ -115,6 +117,10 @@ class PipelineTest : public ::testing::Test {
// Demuxer properties.
EXPECT_CALL(*mocks_->demuxer(), GetBitrate())
.WillRepeatedly(Return(kBitrate));
+ EXPECT_CALL(*mocks_->demuxer(), IsLocalSource())
+ .WillRepeatedly(Return(kLocalSource));
+ EXPECT_CALL(*mocks_->demuxer(), IsSeekable())
+ .WillRepeatedly(Return(kSeekable));
// Configure the demuxer to return the streams.
for (size_t i = 0; i < streams->size(); ++i) {
@@ -794,6 +800,24 @@ TEST_F(PipelineTest, StartTimeIsNonZero) {
EXPECT_EQ(kStartTime, pipeline_->GetCurrentTime());
}
+TEST_F(PipelineTest, DemuxerProperties) {
+ CreateAudioStream();
+ CreateVideoStream();
+ MockDemuxerStreamVector streams;
+ streams.push_back(audio_stream());
+ streams.push_back(video_stream());
+
+ InitializeDemuxer(&streams);
+ InitializeAudioDecoder(audio_stream());
+ InitializeAudioRenderer();
+ InitializeVideoDecoder(video_stream());
+ InitializeVideoRenderer();
+ InitializePipeline(PIPELINE_OK);
+
+ EXPECT_EQ(kLocalSource, pipeline_->IsLocalSource());
+ EXPECT_NE(kSeekable, pipeline_->IsStreaming());
+}
+
class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate {
public:
FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status,
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index fdd1a97..a753c18 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -474,6 +474,15 @@ int ChunkDemuxer::GetBitrate() {
return 0;
}
+bool ChunkDemuxer::IsLocalSource() {
+ // TODO(acolwell): Report whether source is local or not.
+ return false;
+}
+
+bool ChunkDemuxer::IsSeekable() {
+ return duration_ != kInfiniteDuration();
+}
+
// Demuxer implementation.
scoped_refptr<DemuxerStream> ChunkDemuxer::GetStream(
DemuxerStream::Type type) {
diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h
index 8c5dd0b..eb132f5 100644
--- a/media/filters/chunk_demuxer.h
+++ b/media/filters/chunk_demuxer.h
@@ -46,6 +46,8 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer {
DemuxerStream::Type type) OVERRIDE;
virtual base::TimeDelta GetStartTime() const OVERRIDE;
virtual int GetBitrate() OVERRIDE;
+ virtual bool IsLocalSource() OVERRIDE;
+ virtual bool IsSeekable() OVERRIDE;
// Methods used by an external object to control this demuxer.
void FlushData();
diff --git a/media/filters/dummy_demuxer.cc b/media/filters/dummy_demuxer.cc
index 1b3b369..30b0408 100644
--- a/media/filters/dummy_demuxer.cc
+++ b/media/filters/dummy_demuxer.cc
@@ -32,9 +32,10 @@ void DummyDemuxerStream::Read(const ReadCB& read_cb) {}
void DummyDemuxerStream::EnableBitstreamConverter() {}
-DummyDemuxer::DummyDemuxer(bool has_video, bool has_audio)
+DummyDemuxer::DummyDemuxer(bool has_video, bool has_audio, bool local_source)
: has_video_(has_video),
- has_audio_(has_audio) {
+ has_audio_(has_audio),
+ local_source_(local_source) {
streams_.resize(DemuxerStream::NUM_TYPES);
if (has_audio)
streams_[DemuxerStream::AUDIO] =
@@ -64,4 +65,14 @@ int DummyDemuxer::GetBitrate() {
return 0;
}
+bool DummyDemuxer::IsLocalSource() {
+ return local_source_;
+}
+
+bool DummyDemuxer::IsSeekable() {
+ // This is always false because DummyDemuxer is only used by WebRTC and such
+ // streams are not seekable.
+ return false;
+}
+
} // namespace media
diff --git a/media/filters/dummy_demuxer.h b/media/filters/dummy_demuxer.h
index e62c117..4cb72fc 100644
--- a/media/filters/dummy_demuxer.h
+++ b/media/filters/dummy_demuxer.h
@@ -41,7 +41,7 @@ class DummyDemuxerStream : public DemuxerStream {
class MEDIA_EXPORT DummyDemuxer : public Demuxer {
public:
- DummyDemuxer(bool has_video, bool has_audio);
+ DummyDemuxer(bool has_video, bool has_audio, bool local_source);
virtual ~DummyDemuxer();
// Demuxer implementation.
@@ -51,10 +51,13 @@ class MEDIA_EXPORT DummyDemuxer : public Demuxer {
DemuxerStream::Type type) OVERRIDE;
virtual base::TimeDelta GetStartTime() const OVERRIDE;
virtual int GetBitrate() OVERRIDE;
+ virtual bool IsLocalSource() OVERRIDE;
+ virtual bool IsSeekable() OVERRIDE;
private:
bool has_video_;
bool has_audio_;
+ bool local_source_;
std::vector< scoped_refptr<DummyDemuxerStream> > streams_;
DISALLOW_COPY_AND_ASSIGN(DummyDemuxer);
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index fd688d0..3953c60 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -278,9 +278,11 @@ base::TimeDelta FFmpegDemuxerStream::ConvertStreamTimestamp(
//
FFmpegDemuxer::FFmpegDemuxer(
MessageLoop* message_loop,
- const scoped_refptr<DataSource>& data_source)
+ const scoped_refptr<DataSource>& data_source,
+ bool local_source)
: host_(NULL),
message_loop_(message_loop),
+ local_source_(local_source),
format_context_(NULL),
data_source_(data_source),
read_event_(false, false),
@@ -590,6 +592,14 @@ int FFmpegDemuxer::GetBitrate() {
return bitrate_;
}
+bool FFmpegDemuxer::IsLocalSource() {
+ return local_source_;
+}
+
+bool FFmpegDemuxer::IsSeekable() {
+ return !IsStreaming();
+}
+
void FFmpegDemuxer::SeekTask(base::TimeDelta time, const PipelineStatusCB& cb) {
DCHECK_EQ(MessageLoop::current(), message_loop_);
diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h
index 6fa0bd6..02f8019 100644
--- a/media/filters/ffmpeg_demuxer.h
+++ b/media/filters/ffmpeg_demuxer.h
@@ -131,7 +131,8 @@ class FFmpegDemuxerStream : public DemuxerStream {
class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol {
public:
FFmpegDemuxer(MessageLoop* message_loop,
- const scoped_refptr<DataSource>& data_source);
+ const scoped_refptr<DataSource>& data_source,
+ bool local_source);
virtual ~FFmpegDemuxer();
// Posts a task to perform additional demuxing.
@@ -148,6 +149,8 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol {
DemuxerStream::Type type) OVERRIDE;
virtual base::TimeDelta GetStartTime() const OVERRIDE;
virtual int GetBitrate() OVERRIDE;
+ virtual bool IsLocalSource() OVERRIDE;
+ virtual bool IsSeekable() OVERRIDE;
// FFmpegURLProtocol implementation.
virtual size_t Read(size_t size, uint8* data) OVERRIDE;
@@ -201,6 +204,10 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol {
MessageLoop* message_loop_;
+ // True if the media is a local resource, false if the media require network
+ // access to be loaded.
+ bool local_source_;
+
// FFmpeg context handle.
AVFormatContext* format_context_;
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index 0ec2bb0..f8a8888 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -69,7 +69,7 @@ class FFmpegDemuxerTest : public testing::Test {
.WillRepeatedly(SaveArg<0>(&current_read_position_));
CreateDataSource(name, disable_file_size);
- demuxer_ = new FFmpegDemuxer(&message_loop_, data_source_);
+ demuxer_ = new FFmpegDemuxer(&message_loop_, data_source_, true);
}
MOCK_METHOD1(CheckPoint, void(int v));
diff --git a/media/filters/pipeline_integration_test_base.cc b/media/filters/pipeline_integration_test_base.cc
index 190fe2e..4d65887 100644
--- a/media/filters/pipeline_integration_test_base.cc
+++ b/media/filters/pipeline_integration_test_base.cc
@@ -147,7 +147,8 @@ scoped_ptr<FilterCollection>
PipelineIntegrationTestBase::CreateFilterCollection(const std::string& url) {
scoped_refptr<FileDataSource> data_source = new FileDataSource();
CHECK_EQ(PIPELINE_OK, data_source->Initialize(url));
- return CreateFilterCollection(new FFmpegDemuxer(&message_loop_, data_source));
+ return CreateFilterCollection(new FFmpegDemuxer(
+ &message_loop_, data_source, false));
}
scoped_ptr<FilterCollection>
diff --git a/media/tools/player_wtl/movie.cc b/media/tools/player_wtl/movie.cc
index 3473aff..310a5b1 100644
--- a/media/tools/player_wtl/movie.cc
+++ b/media/tools/player_wtl/movie.cc
@@ -72,7 +72,8 @@ bool Movie::Open(const wchar_t* url, VideoRendererBase* video_renderer) {
// Create filter collection.
scoped_ptr<FilterCollection> collection(new FilterCollection());
- collection->SetDemuxer(new FFmpegDemuxer(pipeline_loop, data_source));
+ collection->SetDemuxer(new FFmpegDemuxer(
+ pipeline_loop, data_source, true));
collection->AddAudioDecoder(new FFmpegAudioDecoder(
base::Bind(&MessageLoopFactory::GetMessageLoop,
base::Unretained(message_loop_factory_.get()),
diff --git a/media/tools/player_x11/player_x11.cc b/media/tools/player_x11/player_x11.cc
index 68fe80c..6b028e5 100644
--- a/media/tools/player_x11/player_x11.cc
+++ b/media/tools/player_x11/player_x11.cc
@@ -110,7 +110,8 @@ bool InitPipeline(MessageLoop* message_loop,
// Create our filter factories.
scoped_ptr<media::FilterCollection> collection(
new media::FilterCollection());
- collection->SetDemuxer(new media::FFmpegDemuxer(message_loop, data_source));
+ collection->SetDemuxer(new media::FFmpegDemuxer(
+ message_loop, data_source, true));
collection->AddAudioDecoder(new media::FFmpegAudioDecoder(
base::Bind(&media::MessageLoopFactory::GetMessageLoop,
base::Unretained(message_loop_factory),
diff --git a/media/tools/seek_tester/seek_tester.cc b/media/tools/seek_tester/seek_tester.cc
index b14628c..65046ef 100644
--- a/media/tools/seek_tester/seek_tester.cc
+++ b/media/tools/seek_tester/seek_tester.cc
@@ -65,7 +65,7 @@ int main(int argc, char** argv) {
MessageLoop loop;
media::PipelineStatusCB quitter = base::Bind(&QuitMessageLoop, &loop);
scoped_refptr<media::FFmpegDemuxer> demuxer(
- new media::FFmpegDemuxer(&loop, file_data_source));
+ new media::FFmpegDemuxer(&loop, file_data_source, true));
demuxer->Initialize(&host, quitter);
loop.Run();
diff --git a/webkit/media/filter_helpers.cc b/webkit/media/filter_helpers.cc
index f304fb3..d1499a5 100644
--- a/webkit/media/filter_helpers.cc
+++ b/webkit/media/filter_helpers.cc
@@ -56,7 +56,13 @@ bool BuildMediaStreamCollection(const WebKit::WebURL& url,
filter_collection->AddVideoDecoder(video_decoder);
- filter_collection->SetDemuxer(new media::DummyDemuxer(true, false));
+ // TODO(vrk/wjia): Setting true for local_source is under the assumption
+ // that the MediaStream represents a local webcam. This will need to
+ // change in the future when GetVideoDecoder is no longer hardcoded to
+ // only return CaptureVideoDecoders.
+ //
+ // See http://crbug.com/120426 for details.
+ filter_collection->SetDemuxer(new media::DummyDemuxer(true, false, true));
return true;
}
@@ -80,12 +86,14 @@ bool BuildMediaSourceCollection(
void BuildDefaultCollection(
const scoped_refptr<media::DataSource>& data_source,
+ bool local_source,
media::MessageLoopFactory* message_loop_factory,
media::FilterCollection* filter_collection,
scoped_refptr<media::FFmpegVideoDecoder>* video_decoder) {
filter_collection->SetDemuxer(new media::FFmpegDemuxer(
message_loop_factory->GetMessageLoop("PipelineThread"),
- data_source));
+ data_source,
+ local_source));
AddDefaultDecodersToCollection(message_loop_factory, filter_collection,
video_decoder);
diff --git a/webkit/media/filter_helpers.h b/webkit/media/filter_helpers.h
index 771251a..cdea330 100644
--- a/webkit/media/filter_helpers.h
+++ b/webkit/media/filter_helpers.h
@@ -47,8 +47,14 @@ bool BuildMediaSourceCollection(
// Builds the required filters for handling regular URLs and adds them to
// |filter_collection| and fills |video_decoder| returning true if successful.
+//
+// |local_source| refers to whether the data being fetched requires network
+// access.
+//
+// TODO(scherkus): a data source should be able to tell us this.
void BuildDefaultCollection(
const scoped_refptr<media::DataSource>& data_source,
+ bool local_source,
media::MessageLoopFactory* message_loop_factory,
media::FilterCollection* filter_collection,
scoped_refptr<media::FFmpegVideoDecoder>* video_decoder);
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
index aed2dbd..e67a359 100644
--- a/webkit/media/webmediaplayer_impl.cc
+++ b/webkit/media/webmediaplayer_impl.cc
@@ -109,8 +109,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
media_log_(media_log),
accelerated_compositing_reported_(false),
incremented_externally_allocated_memory_(false),
- audio_source_provider_(audio_source_provider),
- is_local_source_(false) {
+ audio_source_provider_(audio_source_provider) {
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
@@ -236,9 +235,12 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url) {
&WebMediaPlayerImpl::DataSourceInitialized,
base::Unretained(this), gurl));
- is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
+ // TODO(scherkus): this is leftover from removing DemuxerFactory -- instead
+ // our DataSource should report this information. See http://crbug.com/120426
+ bool local_source = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
BuildDefaultCollection(proxy_->data_source(),
+ local_source,
message_loop_factory_.get(),
filter_collection_.get(),
&video_decoder);
@@ -464,8 +466,11 @@ const WebKit::WebTimeRanges& WebMediaPlayerImpl::buffered() {
float WebMediaPlayerImpl::maxTimeSeekable() const {
DCHECK_EQ(main_loop_, MessageLoop::current());
- // We don't support seeking in streaming media.
- if (proxy_->data_source()->IsStreaming())
+ // If we are performing streaming, we report that we cannot seek at all.
+ // We are using this flag to indicate if the data source supports seeking
+ // or not. We should be able to seek even if we are performing streaming.
+ // TODO(hclam): We need to update this when we have better caching.
+ if (pipeline_->IsStreaming())
return 0.0f;
return static_cast<float>(pipeline_->GetMediaDuration().InSecondsF());
}
@@ -513,8 +518,10 @@ bool WebMediaPlayerImpl::hasSingleSecurityOrigin() const {
WebMediaPlayer::MovieLoadType WebMediaPlayerImpl::movieLoadType() const {
DCHECK_EQ(main_loop_, MessageLoop::current());
- // Disable seeking while streaming.
- if (proxy_->data_source()->IsStreaming())
+ // TODO(hclam): If the pipeline is performing streaming, we say that this is
+ // a live stream. But instead it should be a StoredStream if we have proper
+ // caching.
+ if (pipeline_->IsStreaming())
return WebMediaPlayer::MovieLoadTypeLiveStream;
return WebMediaPlayer::MovieLoadTypeUnknown;
}
@@ -803,7 +810,7 @@ void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) {
if (!hasVideo())
GetClient()->disableAcceleratedCompositing();
- if (is_local_source_)
+ if (pipeline_->IsLocalSource())
SetNetworkState(WebMediaPlayer::NetworkStateLoaded);
SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
diff --git a/webkit/media/webmediaplayer_impl.h b/webkit/media/webmediaplayer_impl.h
index b5c615f..272b103 100644
--- a/webkit/media/webmediaplayer_impl.h
+++ b/webkit/media/webmediaplayer_impl.h
@@ -316,8 +316,6 @@ class WebMediaPlayerImpl
WebKit::WebAudioSourceProvider* audio_source_provider_;
- bool is_local_source_;
-
DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
};