vp9_reference_frame_vector.cc 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "media/gpu/vp9_reference_frame_vector.h"
  5. #include <bitset>
  6. #include "media/gpu/vp9_picture.h"
  7. namespace media {
  8. Vp9ReferenceFrameVector::Vp9ReferenceFrameVector() {
  9. DETACH_FROM_SEQUENCE(sequence_checker_);
  10. }
  11. Vp9ReferenceFrameVector::~Vp9ReferenceFrameVector() = default;
  12. // Refreshes |reference_frames_| slots with the current |pic|s frame header.
  13. void Vp9ReferenceFrameVector::Refresh(scoped_refptr<VP9Picture> pic) {
  14. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  15. DCHECK(pic);
  16. const std::bitset<kVp9NumRefFrames> refresh_frame_flags(
  17. pic->frame_hdr->refresh_frame_flags);
  18. for (size_t i = 0; i < kVp9NumRefFrames; ++i) {
  19. if (refresh_frame_flags[i])
  20. reference_frames_[i] = pic;
  21. }
  22. }
  23. void Vp9ReferenceFrameVector::Clear() {
  24. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  25. reference_frames_.fill(nullptr);
  26. }
  27. scoped_refptr<VP9Picture> Vp9ReferenceFrameVector::GetFrame(
  28. size_t index) const {
  29. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  30. return reference_frames_[index];
  31. }
  32. } // namespace media