| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "media/gpu/vp9_reference_frame_vector.h" |
| |
| #include <bitset> |
| |
| #include "media/gpu/vp9_picture.h" |
| |
| namespace media { |
| |
| Vp9ReferenceFrameVector::Vp9ReferenceFrameVector() { |
| DETACH_FROM_SEQUENCE(sequence_checker_); |
| } |
| |
| Vp9ReferenceFrameVector::~Vp9ReferenceFrameVector() = default; |
| |
| // Refreshes |reference_frames_| slots with the current |pic|s frame header. |
| void Vp9ReferenceFrameVector::Refresh(scoped_refptr<VP9Picture> pic) { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK(pic); |
| const std::bitset<kVp9NumRefFrames> refresh_frame_flags( |
| pic->frame_hdr->refresh_frame_flags); |
| |
| for (size_t i = 0; i < kVp9NumRefFrames; ++i) { |
| if (refresh_frame_flags[i]) |
| reference_frames_[i] = pic; |
| } |
| } |
| |
| void Vp9ReferenceFrameVector::Clear() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| reference_frames_.fill(nullptr); |
| } |
| |
| scoped_refptr<VP9Picture> Vp9ReferenceFrameVector::GetFrame( |
| size_t index) const { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| |
| return reference_frames_[index]; |
| } |
| |
| } // namespace media |