// Copyright (c) 2011 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.

#ifndef PPAPI_CPP_DEV_VIDEO_CAPTURE_CLIENT_DEV_H_
#define PPAPI_CPP_DEV_VIDEO_CAPTURE_CLIENT_DEV_H_

#include <stdint.h>

#include <vector>

#include "ppapi/c/dev/pp_video_capture_dev.h"
#include "ppapi/cpp/dev/buffer_dev.h"
#include "ppapi/cpp/instance_handle.h"
#include "ppapi/cpp/resource.h"

namespace pp {

class Instance;

class VideoCaptureClient_Dev {
 public:
  explicit VideoCaptureClient_Dev(Instance* instance);
  virtual ~VideoCaptureClient_Dev();

  virtual void OnDeviceInfo(PP_Resource video_capture,
                            const PP_VideoCaptureDeviceInfo_Dev& info,
                            const std::vector<Buffer_Dev>& buffers) = 0;
  virtual void OnStatus(PP_Resource video_capture, uint32_t status) = 0;
  virtual void OnError(PP_Resource video_capture, uint32_t error) = 0;
  virtual void OnBufferReady(PP_Resource video_capture, uint32_t buffer) = 0;

 private:
  InstanceHandle instance_;
};

}  // namespace pp

#endif  // PPAPI_CPP_DEV_VIDEO_CAPTURE_CLIENT_DEV_H_
