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

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

Issue 271593010: rendering_helper - Replaces multiple windows by a full-screen window. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compiling error. Created 6 years, 6 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
« no previous file with comments | « content/common/gpu/media/rendering_helper.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 bool suppress_rendering_; 462 bool suppress_rendering_;
463 std::vector<base::TimeTicks> frame_delivery_times_; 463 std::vector<base::TimeTicks> frame_delivery_times_;
464 int delay_reuse_after_frame_num_; 464 int delay_reuse_after_frame_num_;
465 scoped_ptr<ThrottlingVDAClient> throttling_client_; 465 scoped_ptr<ThrottlingVDAClient> throttling_client_;
466 // A map from bitstream buffer id to the decode start time of the buffer. 466 // A map from bitstream buffer id to the decode start time of the buffer.
467 std::map<int, base::TimeTicks> decode_start_time_; 467 std::map<int, base::TimeTicks> decode_start_time_;
468 // The decode time of all decoded frames. 468 // The decode time of all decoded frames.
469 std::vector<base::TimeDelta> decode_time_; 469 std::vector<base::TimeDelta> decode_time_;
470 // The number of VDA::Decode calls per second. This is to simulate webrtc. 470 // The number of VDA::Decode calls per second. This is to simulate webrtc.
471 int decode_calls_per_second_; 471 int decode_calls_per_second_;
472 // The id of the picture which is being hold for displayed.
473 int on_hold_picture_buffer_id_;
472 474
473 DISALLOW_IMPLICIT_CONSTRUCTORS(GLRenderingVDAClient); 475 DISALLOW_IMPLICIT_CONSTRUCTORS(GLRenderingVDAClient);
474 }; 476 };
475 477
476 GLRenderingVDAClient::GLRenderingVDAClient( 478 GLRenderingVDAClient::GLRenderingVDAClient(
477 RenderingHelper* rendering_helper, 479 RenderingHelper* rendering_helper,
478 int rendering_window_id, 480 int rendering_window_id,
479 ClientStateNotification<ClientState>* note, 481 ClientStateNotification<ClientState>* note,
480 const std::string& encoded_data, 482 const std::string& encoded_data,
481 int num_in_flight_decodes, 483 int num_in_flight_decodes,
(...skipping 19 matching lines...) Expand all
501 reset_after_frame_num_(reset_after_frame_num), 503 reset_after_frame_num_(reset_after_frame_num),
502 delete_decoder_state_(delete_decoder_state), 504 delete_decoder_state_(delete_decoder_state),
503 state_(CS_CREATED), 505 state_(CS_CREATED),
504 num_skipped_fragments_(0), 506 num_skipped_fragments_(0),
505 num_queued_fragments_(0), 507 num_queued_fragments_(0),
506 num_decoded_frames_(0), 508 num_decoded_frames_(0),
507 num_done_bitstream_buffers_(0), 509 num_done_bitstream_buffers_(0),
508 texture_target_(0), 510 texture_target_(0),
509 suppress_rendering_(suppress_rendering), 511 suppress_rendering_(suppress_rendering),
510 delay_reuse_after_frame_num_(delay_reuse_after_frame_num), 512 delay_reuse_after_frame_num_(delay_reuse_after_frame_num),
511 decode_calls_per_second_(decode_calls_per_second) { 513 decode_calls_per_second_(decode_calls_per_second),
514 on_hold_picture_buffer_id_(-1) {
512 CHECK_GT(num_in_flight_decodes, 0); 515 CHECK_GT(num_in_flight_decodes, 0);
513 CHECK_GT(num_play_throughs, 0); 516 CHECK_GT(num_play_throughs, 0);
514 CHECK_GE(rendering_fps, 0); 517 CHECK_GE(rendering_fps, 0);
515 // |num_in_flight_decodes_| is unsupported if |decode_calls_per_second_| > 0. 518 // |num_in_flight_decodes_| is unsupported if |decode_calls_per_second_| > 0.
516 if (decode_calls_per_second_ > 0) 519 if (decode_calls_per_second_ > 0)
517 CHECK_EQ(1, num_in_flight_decodes_); 520 CHECK_EQ(1, num_in_flight_decodes_);
518 521
519 // Default to H264 baseline if no profile provided. 522 // Default to H264 baseline if no profile provided.
520 profile_ = (profile != media::VIDEO_CODEC_PROFILE_UNKNOWN 523 profile_ = (profile != media::VIDEO_CODEC_PROFILE_UNKNOWN
521 ? profile 524 ? profile
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 reset_after_frame_num_ = MID_STREAM_RESET; 647 reset_after_frame_num_ = MID_STREAM_RESET;
645 decoder_->Reset(); 648 decoder_->Reset();
646 // Re-start decoding from the beginning of the stream to avoid needing to 649 // Re-start decoding from the beginning of the stream to avoid needing to
647 // know how to find I-frames and so on in this test. 650 // know how to find I-frames and so on in this test.
648 encoded_data_next_pos_to_decode_ = 0; 651 encoded_data_next_pos_to_decode_ = 0;
649 } 652 }
650 653
651 media::PictureBuffer* picture_buffer = 654 media::PictureBuffer* picture_buffer =
652 picture_buffers_by_id_[picture.picture_buffer_id()]; 655 picture_buffers_by_id_[picture.picture_buffer_id()];
653 CHECK(picture_buffer); 656 CHECK(picture_buffer);
657
658 int released_picture_buffer_id = picture.picture_buffer_id();
654 if (!suppress_rendering_) { 659 if (!suppress_rendering_) {
660 // Replace with the last holding picture buffer.
661 std::swap(released_picture_buffer_id, on_hold_picture_buffer_id_);
655 rendering_helper_->RenderTexture(texture_target_, 662 rendering_helper_->RenderTexture(texture_target_,
656 picture_buffer->texture_id()); 663 picture_buffer->texture_id());
657 } 664 }
658 665
659 if (num_decoded_frames() > delay_reuse_after_frame_num_) { 666 if (released_picture_buffer_id < 0)
667 return;
668
669 if ((num_decoded_frames() > delay_reuse_after_frame_num_)) {
660 base::MessageLoop::current()->PostDelayedTask( 670 base::MessageLoop::current()->PostDelayedTask(
661 FROM_HERE, 671 FROM_HERE,
662 base::Bind(&VideoDecodeAccelerator::ReusePictureBuffer, 672 base::Bind(&VideoDecodeAccelerator::ReusePictureBuffer,
663 weak_decoder_factory_->GetWeakPtr(), 673 weak_decoder_factory_->GetWeakPtr(),
664 picture.picture_buffer_id()), 674 released_picture_buffer_id),
665 kReuseDelay); 675 kReuseDelay);
666 } else { 676 } else {
667 decoder_->ReusePictureBuffer(picture.picture_buffer_id()); 677 decoder_->ReusePictureBuffer(released_picture_buffer_id);
668 } 678 }
669 } 679 }
670 680
671 void GLRenderingVDAClient::NotifyEndOfBitstreamBuffer( 681 void GLRenderingVDAClient::NotifyEndOfBitstreamBuffer(
672 int32 bitstream_buffer_id) { 682 int32 bitstream_buffer_id) {
673 // TODO(fischman): this test currently relies on this notification to make 683 // TODO(fischman): this test currently relies on this notification to make
674 // forward progress during a Reset(). But the VDA::Reset() API doesn't 684 // forward progress during a Reset(). But the VDA::Reset() API doesn't
675 // guarantee this, so stop relying on it (and remove the notifications from 685 // guarantee this, so stop relying on it (and remove the notifications from
676 // VaapiVideoDecodeAccelerator::FinishReset()). 686 // VaapiVideoDecodeAccelerator::FinishReset()).
677 ++num_done_bitstream_buffers_; 687 ++num_done_bitstream_buffers_;
678 --outstanding_decodes_; 688 --outstanding_decodes_;
679 if (decode_calls_per_second_ == 0) 689 if (decode_calls_per_second_ == 0)
680 DecodeNextFragment(); 690 DecodeNextFragment();
681 } 691 }
682 692
683 void GLRenderingVDAClient::NotifyFlushDone() { 693 void GLRenderingVDAClient::NotifyFlushDone() {
684 if (decoder_deleted()) 694 if (decoder_deleted())
685 return; 695 return;
696
686 SetState(CS_FLUSHED); 697 SetState(CS_FLUSHED);
687 --remaining_play_throughs_; 698 --remaining_play_throughs_;
688 DCHECK_GE(remaining_play_throughs_, 0); 699 DCHECK_GE(remaining_play_throughs_, 0);
689 if (decoder_deleted()) 700 if (decoder_deleted())
690 return; 701 return;
691 decoder_->Reset(); 702 decoder_->Reset();
692 SetState(CS_RESETTING); 703 SetState(CS_RESETTING);
693 } 704 }
694 705
695 void GLRenderingVDAClient::NotifyResetDone() { 706 void GLRenderingVDAClient::NotifyResetDone() {
696 if (decoder_deleted()) 707 if (decoder_deleted())
697 return; 708 return;
698
699 if (reset_after_frame_num_ == MID_STREAM_RESET) { 709 if (reset_after_frame_num_ == MID_STREAM_RESET) {
700 reset_after_frame_num_ = END_OF_STREAM_RESET; 710 reset_after_frame_num_ = END_OF_STREAM_RESET;
701 DecodeNextFragment(); 711 DecodeNextFragment();
702 return; 712 return;
703 } else if (reset_after_frame_num_ == START_OF_STREAM_RESET) { 713 } else if (reset_after_frame_num_ == START_OF_STREAM_RESET) {
704 reset_after_frame_num_ = END_OF_STREAM_RESET; 714 reset_after_frame_num_ = END_OF_STREAM_RESET;
705 for (int i = 0; i < num_in_flight_decodes_; ++i) 715 for (int i = 0; i < num_in_flight_decodes_; ++i)
706 DecodeNextFragment(); 716 DecodeNextFragment();
707 return; 717 return;
708 } 718 }
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 } 1577 }
1568 if (it->first == "v" || it->first == "vmodule") 1578 if (it->first == "v" || it->first == "vmodule")
1569 continue; 1579 continue;
1570 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; 1580 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second;
1571 } 1581 }
1572 1582
1573 base::ShadowingAtExitManager at_exit_manager; 1583 base::ShadowingAtExitManager at_exit_manager;
1574 1584
1575 return RUN_ALL_TESTS(); 1585 return RUN_ALL_TESTS();
1576 } 1586 }
OLDNEW
« no previous file with comments | « 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