summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-03 23:29:04 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-03 23:29:04 +0000
commit1982546ae5f041b20059179deecdc990c99681f3 (patch)
tree64d23a1f5fdaf39ca67c1347b55bb87e0f19beb0 /media
parent18383a2de92c476bfc4ff5ad6b8d62c3d85596fc (diff)
downloadchromium_src-1982546ae5f041b20059179deecdc990c99681f3.zip
chromium_src-1982546ae5f041b20059179deecdc990c99681f3.tar.gz
chromium_src-1982546ae5f041b20059179deecdc990c99681f3.tar.bz2
Rename VideoDecoder::HasOutputFrameAvailable() to CanReadWithoutStalling().
Also fix the implementation in GpuVideoDecoder to better reflect what we are checking. BUG=256899,141788 TEST=Tested on Windows. R=acolwell@chromium.org, scherkus@chromium.org Review URL: https://codereview.chromium.org/18580008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210066 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/base/video_decoder.cc2
-rw-r--r--media/base/video_decoder.h2
-rw-r--r--media/filters/gpu_video_decoder.cc4
-rw-r--r--media/filters/gpu_video_decoder.h2
-rw-r--r--media/filters/video_frame_stream.cc4
-rw-r--r--media/filters/video_frame_stream.h2
-rw-r--r--media/filters/video_renderer_base.cc2
-rw-r--r--media/filters/video_renderer_base_unittest.cc16
8 files changed, 25 insertions, 9 deletions
diff --git a/media/base/video_decoder.cc b/media/base/video_decoder.cc
index ba47bae..81397b7 100644
--- a/media/base/video_decoder.cc
+++ b/media/base/video_decoder.cc
@@ -18,7 +18,7 @@ bool VideoDecoder::NeedsBitstreamConversion() const {
return false;
}
-bool VideoDecoder::HasOutputFrameAvailable() const {
+bool VideoDecoder::CanReadWithoutStalling() const {
return true;
}
diff --git a/media/base/video_decoder.h b/media/base/video_decoder.h
index 6a4f66a..11d8a7f 100644
--- a/media/base/video_decoder.h
+++ b/media/base/video_decoder.h
@@ -88,7 +88,7 @@ class MEDIA_EXPORT VideoDecoder {
// a VideoFrame. Most implementations can allocate a new VideoFrame and hence
// this will always return true. Override and return false for decoders that
// use a fixed set of VideoFrames for decoding.
- virtual bool HasOutputFrameAvailable() const;
+ virtual bool CanReadWithoutStalling() const;
private:
DISALLOW_COPY_AND_ASSIGN(VideoDecoder);
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc
index 3679a5a..8cf51ad 100644
--- a/media/filters/gpu_video_decoder.cc
+++ b/media/filters/gpu_video_decoder.cc
@@ -480,9 +480,9 @@ bool GpuVideoDecoder::NeedsBitstreamConversion() const {
return needs_bitstream_conversion_;
}
-bool GpuVideoDecoder::HasOutputFrameAvailable() const {
+bool GpuVideoDecoder::CanReadWithoutStalling() const {
DCHECK(gvd_loop_proxy_->BelongsToCurrentThread());
- return available_pictures_ > 0;
+ return available_pictures_ > 0 || !ready_video_frames_.empty();
}
void GpuVideoDecoder::NotifyInitializeDone() {
diff --git a/media/filters/gpu_video_decoder.h b/media/filters/gpu_video_decoder.h
index 6fd0a3a..225e19d 100644
--- a/media/filters/gpu_video_decoder.h
+++ b/media/filters/gpu_video_decoder.h
@@ -90,7 +90,7 @@ class MEDIA_EXPORT GpuVideoDecoder
virtual void Stop(const base::Closure& closure) OVERRIDE;
virtual bool HasAlpha() const OVERRIDE;
virtual bool NeedsBitstreamConversion() const OVERRIDE;
- virtual bool HasOutputFrameAvailable() const OVERRIDE;
+ virtual bool CanReadWithoutStalling() const OVERRIDE;
// VideoDecodeAccelerator::Client implementation.
virtual void NotifyInitializeDone() OVERRIDE;
diff --git a/media/filters/video_frame_stream.cc b/media/filters/video_frame_stream.cc
index 3cf2f37..28aaac6 100644
--- a/media/filters/video_frame_stream.cc
+++ b/media/filters/video_frame_stream.cc
@@ -141,9 +141,9 @@ void VideoFrameStream::Stop(const base::Closure& closure) {
message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&stop_cb_));
}
-bool VideoFrameStream::HasOutputFrameAvailable() const {
+bool VideoFrameStream::CanReadWithoutStalling() const {
DCHECK(message_loop_->BelongsToCurrentThread());
- return decoder_->HasOutputFrameAvailable();
+ return decoder_->CanReadWithoutStalling();
}
void VideoFrameStream::Read(const DemuxerStream::ReadCB& demuxer_read_cb) {
diff --git a/media/filters/video_frame_stream.h b/media/filters/video_frame_stream.h
index e560557..c384bca 100644
--- a/media/filters/video_frame_stream.h
+++ b/media/filters/video_frame_stream.h
@@ -68,7 +68,7 @@ class MEDIA_EXPORT VideoFrameStream : public DemuxerStream {
// Returns true if the decoder currently has the ability to decode and return
// a VideoFrame.
- bool HasOutputFrameAvailable() const;
+ bool CanReadWithoutStalling() const;
// DemuxerStream implementation.
virtual void Read(const ReadCB& read_cb) OVERRIDE;
diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc
index a39c8b0..5c6c168 100644
--- a/media/filters/video_renderer_base.cc
+++ b/media/filters/video_renderer_base.cc
@@ -396,7 +396,7 @@ void VideoRendererBase::FrameReady(VideoDecoder::Status status,
AddReadyFrame_Locked(frame);
if (state_ == kPrerolling) {
- if (!video_frame_stream_.HasOutputFrameAvailable() ||
+ if (!video_frame_stream_.CanReadWithoutStalling() ||
ready_frames_.size() >= static_cast<size_t>(limits::kMaxVideoFrames)) {
TransitionToPrerolled_Locked();
}
diff --git a/media/filters/video_renderer_base_unittest.cc b/media/filters/video_renderer_base_unittest.cc
index 945940a..8044a11 100644
--- a/media/filters/video_renderer_base_unittest.cc
+++ b/media/filters/video_renderer_base_unittest.cc
@@ -507,6 +507,22 @@ TEST_F(VideoRendererBaseTest, Preroll_RightAfter) {
Shutdown();
}
+TEST_F(VideoRendererBaseTest, PlayAfterPreroll) {
+ Initialize();
+ Pause();
+ Flush();
+ QueuePrerollFrames(kFrameDurationInMs * 4);
+
+ Preroll(kFrameDurationInMs * 4, PIPELINE_OK);
+ EXPECT_EQ(kFrameDurationInMs * 4, GetCurrentTimestampInMs());
+
+ Play();
+ // Advance time past prerolled time to trigger a Read().
+ AdvanceTimeInMs(5 * kFrameDurationInMs);
+ WaitForPendingRead();
+ Shutdown();
+}
+
TEST_F(VideoRendererBaseTest, GetCurrentFrame_Initialized) {
Initialize();
EXPECT_TRUE(GetCurrentFrame().get()); // Due to prerolling.