15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef PPAPI_CPP_VIDEO_FRAME_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define PPAPI_CPP_VIDEO_FRAME_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/c/ppb_video_frame.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/resource.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/cpp/size.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace pp {
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class VideoFrame : public Resource {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Default constructor for creating an is_null()
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// <code>VideoFrame</code> object.
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VideoFrame();
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// The copy constructor for <code>VideoFrame</code>.
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @param[in] other A reference to a <code>VideoFrame</code>.
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VideoFrame(const VideoFrame& other);
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Constructs a <code>VideoFrame</code> from a <code>Resource</code>.
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @param[in] resource A <code>PPB_VideoFrame</code> resource.
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit VideoFrame(const Resource& resource);
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// A constructor used when you have received a <code>PP_Resource</code> as a
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// return value that has had 1 ref added for you.
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @param[in] resource A <code>PPB_VideoFrame</code> resource.
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  VideoFrame(PassRef, PP_Resource resource);
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~VideoFrame();
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Gets the timestamp of the video frame.
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @return A <code>PP_TimeDelta</code> containing the timestamp of the video
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// frame. Given in seconds since the start of the containing video stream.
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_TimeDelta GetTimestamp() const;
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Sets the timestamp of the video frame.
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @param[in] timestamp A <code>PP_TimeDelta</code> containing the timestamp
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// of the video frame. Given in seconds since the start of the containing
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// video stream.
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetTimestamp(PP_TimeDelta timestamp);
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Gets the format of the video frame.
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @return A <code>PP_VideoFrame_Format</code> containing the format of the
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// video frame.
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PP_VideoFrame_Format GetFormat() const;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Gets the size of the video frame.
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @param[out] size A <code>Size</code>.
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @return True on success or false on failure.
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool GetSize(Size* size) const;
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Gets the data buffer for video frame pixels.
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @return A pointer to the beginning of the data buffer.
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void* GetDataBuffer();
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// Gets the size of data buffer in bytes.
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ///
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /// @return The size of the data buffer in bytes.
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  uint32_t GetDataBufferSize() const;
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace pp
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // PPAPI_CPP_VIDEO_FRAME_H_
78