Index: content/common/gpu/media/video_decode_accelerator_unittest.cc |
diff --git a/content/common/gpu/media/video_decode_accelerator_unittest.cc b/content/common/gpu/media/video_decode_accelerator_unittest.cc |
index 65cc9397a6e9090cd28b92eedf978f7f3d27d2bb..08bd00d9d9b118453529f17c171860eec28d1116 100644 |
--- a/content/common/gpu/media/video_decode_accelerator_unittest.cc |
+++ b/content/common/gpu/media/video_decode_accelerator_unittest.cc |
@@ -316,6 +316,7 @@ class GLRenderingVDAClient |
// The number of VDA::Decode calls per second. This is to simulate webrtc. |
int decode_calls_per_second_; |
bool render_as_thumbnails_; |
+ int frames_at_render_; |
Pawel Osciak
2014/08/22 08:49:43
Please document.
|
DISALLOW_IMPLICIT_CONSTRUCTORS(GLRenderingVDAClient); |
}; |
@@ -357,7 +358,8 @@ GLRenderingVDAClient::GLRenderingVDAClient( |
suppress_rendering_(suppress_rendering), |
delay_reuse_after_frame_num_(delay_reuse_after_frame_num), |
decode_calls_per_second_(decode_calls_per_second), |
- render_as_thumbnails_(render_as_thumbnails) { |
+ render_as_thumbnails_(render_as_thumbnails), |
+ frames_at_render_(0) { |
CHECK_GT(num_in_flight_decodes, 0); |
CHECK_GT(num_play_throughs, 0); |
// |num_in_flight_decodes_| is unsupported if |decode_calls_per_second_| > 0. |
@@ -497,6 +499,7 @@ void GLRenderingVDAClient::PictureReady(const media::Picture& picture) { |
base::Bind(&GLRenderingVDAClient::ReturnPicture, |
AsWeakPtr(), |
picture.picture_buffer_id())); |
+ ++frames_at_render_; |
if (render_as_thumbnails_) { |
rendering_helper_->RenderThumbnail(video_frame->texture_target(), |
@@ -509,6 +512,14 @@ void GLRenderingVDAClient::PictureReady(const media::Picture& picture) { |
void GLRenderingVDAClient::ReturnPicture(int32 picture_buffer_id) { |
if (decoder_deleted()) |
return; |
+ |
+ --frames_at_render_; |
+ if (frames_at_render_ == 0 && state_ == CS_RESETTING) { |
+ SetState(CS_RESET); |
+ DeleteDecoder(); |
+ return; |
+ } |
+ |
if (num_decoded_frames_ > delay_reuse_after_frame_num_) { |
base::MessageLoop::current()->PostDelayedTask( |
FROM_HERE, |
@@ -550,8 +561,6 @@ void GLRenderingVDAClient::NotifyResetDone() { |
if (decoder_deleted()) |
return; |
- rendering_helper_->DropPendingFrames(window_id_); |
- |
if (reset_after_frame_num_ == MID_STREAM_RESET) { |
reset_after_frame_num_ = END_OF_STREAM_RESET; |
DecodeNextFragment(); |
@@ -569,9 +578,12 @@ void GLRenderingVDAClient::NotifyResetDone() { |
return; |
} |
- SetState(CS_RESET); |
- if (!decoder_deleted()) |
+ rendering_helper_->Flush(window_id_); |
+ |
+ if (frames_at_render_ == 0) { |
+ SetState(CS_RESET); |
DeleteDecoder(); |
+ } |
} |
void GLRenderingVDAClient::NotifyError(VideoDecodeAccelerator::Error error) { |