// 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 "base/logging.h"
#include "base/numerics/safe_conversions.h"
#include "ppapi/proxy/camera_capabilities_resource.h"

namespace ppapi {
namespace proxy {

CameraCapabilitiesResource::CameraCapabilitiesResource(
    PP_Instance instance,
    const std::vector<PP_VideoCaptureFormat>& formats)
    : Resource(OBJECT_IS_PROXY, instance),
      num_video_capture_formats_(formats.size()),
      video_capture_formats_(
          new PP_VideoCaptureFormat[num_video_capture_formats_]) {
  std::copy(formats.begin(), formats.end(), video_capture_formats_.get());
}

CameraCapabilitiesResource::~CameraCapabilitiesResource() {
}

thunk::PPB_CameraCapabilities_API*
CameraCapabilitiesResource::AsPPB_CameraCapabilities_API() {
  return this;
}

void CameraCapabilitiesResource::GetSupportedVideoCaptureFormats(
    uint32_t* array_size,
    PP_VideoCaptureFormat** formats) {
  *array_size = base::checked_cast<uint32_t>(num_video_capture_formats_);
  *formats = video_capture_formats_.get();
}

}  // namespace proxy
}  // namespace ppapi
