Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: content/common/gpu/media/video_decode_accelerator_unittest.cc

Issue 465293002: rendering_helper - Wait for rendering before resetting the decoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address review comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // The bulk of this file is support code; sorry about that. Here's an overview 5 // The bulk of this file is support code; sorry about that. Here's an overview
6 // to hopefully help readers of this code: 6 // to hopefully help readers of this code:
7 // - RenderingHelper is charged with interacting with X11/{EGL/GLES2,GLX/GL} or 7 // - RenderingHelper is charged with interacting with X11/{EGL/GLES2,GLX/GL} or
8 // Win/EGL. 8 // Win/EGL.
9 // - ClientState is an enum for the state of the decode client used by the test. 9 // - ClientState is an enum for the state of the decode client used by the test.
10 // - ClientStateNotification is a barrier abstraction that allows the test code 10 // - ClientStateNotification is a barrier abstraction that allows the test code
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 private: 259 private:
260 typedef std::map<int, media::PictureBuffer*> PictureBufferById; 260 typedef std::map<int, media::PictureBuffer*> PictureBufferById;
261 261
262 void SetState(ClientState new_state); 262 void SetState(ClientState new_state);
263 void FinishInitialization(); 263 void FinishInitialization();
264 void ReturnPicture(int32 picture_buffer_id); 264 void ReturnPicture(int32 picture_buffer_id);
265 265
266 // Delete the associated decoder helper. 266 // Delete the associated decoder helper.
267 void DeleteDecoder(); 267 void DeleteDecoder();
268 268
269 void ResetDecoder();
270
269 // Compute & return the first encoded bytes (including a start frame) to send 271 // Compute & return the first encoded bytes (including a start frame) to send
270 // to the decoder, starting at |start_pos| and returning one fragment. Skips 272 // to the decoder, starting at |start_pos| and returning one fragment. Skips
271 // to the first decodable position. 273 // to the first decodable position.
272 std::string GetBytesForFirstFragment(size_t start_pos, size_t* end_pos); 274 std::string GetBytesForFirstFragment(size_t start_pos, size_t* end_pos);
273 // Compute & return the encoded bytes of next fragment to send to the decoder 275 // Compute & return the encoded bytes of next fragment to send to the decoder
274 // (based on |start_pos|). 276 // (based on |start_pos|).
275 std::string GetBytesForNextFragment(size_t start_pos, size_t* end_pos); 277 std::string GetBytesForNextFragment(size_t start_pos, size_t* end_pos);
276 // Helpers for GetBytesForNextFragment above. 278 // Helpers for GetBytesForNextFragment above.
277 void GetBytesForNextNALU(size_t start_pos, size_t* end_pos); // For h.264. 279 void GetBytesForNextNALU(size_t start_pos, size_t* end_pos); // For h.264.
278 std::string GetBytesForNextFrame( 280 std::string GetBytesForNextFrame(
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 // TODO(fischman): this test currently relies on this notification to make 528 // TODO(fischman): this test currently relies on this notification to make
527 // forward progress during a Reset(). But the VDA::Reset() API doesn't 529 // forward progress during a Reset(). But the VDA::Reset() API doesn't
528 // guarantee this, so stop relying on it (and remove the notifications from 530 // guarantee this, so stop relying on it (and remove the notifications from
529 // VaapiVideoDecodeAccelerator::FinishReset()). 531 // VaapiVideoDecodeAccelerator::FinishReset()).
530 ++num_done_bitstream_buffers_; 532 ++num_done_bitstream_buffers_;
531 --outstanding_decodes_; 533 --outstanding_decodes_;
532 if (decode_calls_per_second_ == 0) 534 if (decode_calls_per_second_ == 0)
533 DecodeNextFragment(); 535 DecodeNextFragment();
534 } 536 }
535 537
538 void GLRenderingVDAClient::ResetDecoder() {
539 if (decoder_deleted())
540 return;
541 decoder_->Reset();
542 SetState(CS_RESETTING);
543 }
544
536 void GLRenderingVDAClient::NotifyFlushDone() { 545 void GLRenderingVDAClient::NotifyFlushDone() {
537 if (decoder_deleted()) 546 if (decoder_deleted())
538 return; 547 return;
539 548
540 SetState(CS_FLUSHED); 549 SetState(CS_FLUSHED);
541 --remaining_play_throughs_; 550 --remaining_play_throughs_;
542 DCHECK_GE(remaining_play_throughs_, 0); 551 DCHECK_GE(remaining_play_throughs_, 0);
543 if (decoder_deleted()) 552
544 return; 553 // Call Reset until rendering is completed.
545 decoder_->Reset(); 554 rendering_helper_->Flush(
546 SetState(CS_RESETTING); 555 window_id_, base::Bind(&GLRenderingVDAClient::ResetDecoder, AsWeakPtr()));
547 } 556 }
548 557
549 void GLRenderingVDAClient::NotifyResetDone() { 558 void GLRenderingVDAClient::NotifyResetDone() {
550 if (decoder_deleted()) 559 if (decoder_deleted())
551 return; 560 return;
552 561
553 rendering_helper_->DropPendingFrames(window_id_); 562 rendering_helper_->DropPendingFrames(window_id_);
554 563
555 if (reset_after_frame_num_ == MID_STREAM_RESET) { 564 if (reset_after_frame_num_ == MID_STREAM_RESET) {
556 reset_after_frame_num_ = END_OF_STREAM_RESET; 565 reset_after_frame_num_ = END_OF_STREAM_RESET;
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 if (it->first == "v" || it->first == "vmodule") 1423 if (it->first == "v" || it->first == "vmodule")
1415 continue; 1424 continue;
1416 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; 1425 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second;
1417 } 1426 }
1418 1427
1419 base::ShadowingAtExitManager at_exit_manager; 1428 base::ShadowingAtExitManager at_exit_manager;
1420 content::RenderingHelper::InitializeOneOff(); 1429 content::RenderingHelper::InitializeOneOff();
1421 1430
1422 return RUN_ALL_TESTS(); 1431 return RUN_ALL_TESTS();
1423 } 1432 }
OLDNEW
« content/common/gpu/media/rendering_helper.h ('K') | « content/common/gpu/media/rendering_helper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698