diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-03 23:29:04 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-03 23:29:04 +0000 |
commit | 1982546ae5f041b20059179deecdc990c99681f3 (patch) | |
tree | 64d23a1f5fdaf39ca67c1347b55bb87e0f19beb0 /media | |
parent | 18383a2de92c476bfc4ff5ad6b8d62c3d85596fc (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | media/base/video_decoder.h | 2 | ||||
-rw-r--r-- | media/filters/gpu_video_decoder.cc | 4 | ||||
-rw-r--r-- | media/filters/gpu_video_decoder.h | 2 | ||||
-rw-r--r-- | media/filters/video_frame_stream.cc | 4 | ||||
-rw-r--r-- | media/filters/video_frame_stream.h | 2 | ||||
-rw-r--r-- | media/filters/video_renderer_base.cc | 2 | ||||
-rw-r--r-- | media/filters/video_renderer_base_unittest.cc | 16 |
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. |