// Copyright 2015 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_picture.h"

namespace media {

VP9Picture::VP9Picture() = default;

VP9Picture::~VP9Picture() = default;

V4L2VP9Picture* VP9Picture::AsV4L2VP9Picture() {
  return nullptr;
}

VaapiVP9Picture* VP9Picture::AsVaapiVP9Picture() {
  return nullptr;
}

scoped_refptr<VP9Picture> VP9Picture::Duplicate() {
  scoped_refptr<VP9Picture> ret = CreateDuplicate();
  if (ret == nullptr)
    return nullptr;

  // Copy member of VP9Picture.
  ret->frame_hdr.reset(new Vp9FrameHeader());
  memcpy(ret->frame_hdr.get(), frame_hdr.get(), sizeof(Vp9FrameHeader));

  // Copy member of CodecPicture.
  // Note that decrypt_config_ is not used in here, so skip copying it.
  ret->set_bitstream_id(bitstream_id());
  ret->set_visible_rect(visible_rect());
  ret->set_colorspace(get_colorspace());

  return ret;
}

scoped_refptr<VP9Picture> VP9Picture::CreateDuplicate() {
  return nullptr;
}

}  // namespace media
