// Copyright 2014 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_VIDEO_FRAME_H_
#define PPAPI_CPP_VIDEO_FRAME_H_

#include "ppapi/c/ppb_video_frame.h"
#include "ppapi/cpp/resource.h"
#include "ppapi/cpp/size.h"

namespace pp {

class VideoFrame : public Resource {
 public:
  /// Default constructor for creating an is_null()
  /// <code>VideoFrame</code> object.
  VideoFrame();

  /// The copy constructor for <code>VideoFrame</code>.
  ///
  /// @param[in] other A reference to a <code>VideoFrame</code>.
  VideoFrame(const VideoFrame& other);

  /// Constructs a <code>VideoFrame</code> from a <code>Resource</code>.
  ///
  /// @param[in] resource A <code>PPB_VideoFrame</code> resource.
  explicit VideoFrame(const Resource& resource);

  /// A constructor used when you have received a <code>PP_Resource</code> as a
  /// return value that has had 1 ref added for you.
  ///
  /// @param[in] resource A <code>PPB_VideoFrame</code> resource.
  VideoFrame(PassRef, PP_Resource resource);

  virtual ~VideoFrame();

  /// Gets the timestamp of the video frame.
  ///
  /// @return A <code>PP_TimeDelta</code> containing the timestamp of the video
  /// frame. Given in seconds since the start of the containing video stream.
  PP_TimeDelta GetTimestamp() const;

  /// Sets the timestamp of the video frame.
  ///
  /// @param[in] timestamp A <code>PP_TimeDelta</code> containing the timestamp
  /// of the video frame. Given in seconds since the start of the containing
  /// video stream.
  void SetTimestamp(PP_TimeDelta timestamp);

  /// Gets the format of the video frame.
  ///
  /// @return A <code>PP_VideoFrame_Format</code> containing the format of the
  /// video frame.
  PP_VideoFrame_Format GetFormat() const;

  /// Gets the size of the video frame.
  ///
  /// @param[out] size A <code>Size</code>.
  ///
  /// @return True on success or false on failure.
  bool GetSize(Size* size) const;

  /// Gets the data buffer for video frame pixels.
  ///
  /// @return A pointer to the beginning of the data buffer.
  void* GetDataBuffer();

  /// Gets the size of data buffer in bytes.
  ///
  /// @return The size of the data buffer in bytes.
  uint32_t GetDataBufferSize() const;
};

}  // namespace pp

#endif  // PPAPI_CPP_VIDEO_FRAME_H_
