// Copyright 2018 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/vaapi/vaapi_common.h"

#include "build/chromeos_buildflags.h"

namespace media {

VaapiH264Picture::VaapiH264Picture(scoped_refptr<VASurface> va_surface)
    : va_surface_(va_surface) {}

VaapiH264Picture::~VaapiH264Picture() = default;

VaapiH264Picture* VaapiH264Picture::AsVaapiH264Picture() {
  return this;
}

#if BUILDFLAG(ENABLE_PLATFORM_HEVC_DECODING)
VaapiH265Picture::VaapiH265Picture(scoped_refptr<VASurface> va_surface)
    : va_surface_(va_surface) {}

VaapiH265Picture::~VaapiH265Picture() = default;

VaapiH265Picture* VaapiH265Picture::AsVaapiH265Picture() {
  return this;
}

#endif  // BUILDFLAG(ENABLE_PLATFORM_HEVC_DECODING)

VaapiVP8Picture::VaapiVP8Picture(scoped_refptr<VASurface> va_surface)
    : va_surface_(va_surface) {}

VaapiVP8Picture::~VaapiVP8Picture() = default;

VaapiVP8Picture* VaapiVP8Picture::AsVaapiVP8Picture() {
  return this;
}

VaapiVP9Picture::VaapiVP9Picture(scoped_refptr<VASurface> va_surface)
    : va_surface_(va_surface) {}

VaapiVP9Picture::~VaapiVP9Picture() = default;

VaapiVP9Picture* VaapiVP9Picture::AsVaapiVP9Picture() {
  return this;
}

scoped_refptr<VP9Picture> VaapiVP9Picture::CreateDuplicate() {
  return new VaapiVP9Picture(va_surface_);
}

VaapiAV1Picture::VaapiAV1Picture(
    scoped_refptr<VASurface> display_va_surface,
    scoped_refptr<VASurface> reconstruct_va_surface)
    : display_va_surface_(std::move(display_va_surface)),
      reconstruct_va_surface_(std::move(reconstruct_va_surface)) {}

VaapiAV1Picture::~VaapiAV1Picture() = default;

scoped_refptr<AV1Picture> VaapiAV1Picture::CreateDuplicate() {
  return base::MakeRefCounted<VaapiAV1Picture>(display_va_surface_,
                                               reconstruct_va_surface_);
}

}  // namespace media
