From 9134a8c5bd338f555a61f9863b0a50ffe28e0d5a Mon Sep 17 00:00:00 2001
From: "penghuang@chromium.org"
 <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Mon, 6 Jan 2014 16:38:47 +0000
Subject: [PPAPI] API definition for video media stream artifacts

This API follows the design at
https://docs.google.com/a/google.com/document/d/1rlwmFhf7VCX8mfrBok8wqXNgvr_ERhL2k6Fqha-pgIo/edit?disco=AAAAAHos8Y8#


It defines new objects for the consumption of media video tracks based on the private VideoSource/VideoDestination classes.

BUG=330851

Review URL: https://codereview.chromium.org/107083004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243099 0039d316-1c4b-4281-b951-d872f2087c98
---
 ppapi/c/pp_macros.h                    |   4 +-
 ppapi/c/ppb_media_stream_video_track.h | 138 ++++++++++++++++++++++++++++++++
 ppapi/c/ppb_video_frame.h              | 139 +++++++++++++++++++++++++++++++++
 3 files changed, 279 insertions(+), 2 deletions(-)
 create mode 100644 ppapi/c/ppb_media_stream_video_track.h
 create mode 100644 ppapi/c/ppb_video_frame.h

(limited to 'ppapi/c')

diff --git a/ppapi/c/pp_macros.h b/ppapi/c/pp_macros.h
index e143b22..ebcdc78 100644
--- a/ppapi/c/pp_macros.h
+++ b/ppapi/c/pp_macros.h
@@ -3,13 +3,13 @@
  * found in the LICENSE file.
  */
 
-/* From pp_macros.idl modified Wed Mar  6 13:04:56 2013. */
+/* From pp_macros.idl modified Mon Oct 21 10:49:59 2013. */
 
 #ifndef PPAPI_C_PP_MACROS_H_
 #define PPAPI_C_PP_MACROS_H_
 
 
-#define PPAPI_RELEASE 33
+#define PPAPI_RELEASE 34
 
 /**
  * @file
diff --git a/ppapi/c/ppb_media_stream_video_track.h b/ppapi/c/ppb_media_stream_video_track.h
new file mode 100644
index 0000000..ff12c20
--- /dev/null
+++ b/ppapi/c/ppb_media_stream_video_track.h
@@ -0,0 +1,138 @@
+/* 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.
+ */
+
+/* From ppb_media_stream_video_track.idl modified Fri Dec 27 17:28:11 2013. */
+
+#ifndef PPAPI_C_PPB_MEDIA_STREAM_VIDEO_TRACK_H_
+#define PPAPI_C_PPB_MEDIA_STREAM_VIDEO_TRACK_H_
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_macros.h"
+#include "ppapi/c/pp_resource.h"
+#include "ppapi/c/pp_stdint.h"
+#include "ppapi/c/pp_var.h"
+
+#define PPB_MEDIASTREAMVIDEOTRACK_INTERFACE_0_1 \
+    "PPB_MediaStreamVideoTrack;0.1" /* dev */
+/**
+ * @file
+ * Defines the <code>PPB_MediaStreamVideoTrack</code> interface. Used for
+ * receiving video frames from a MediaStream video track in the browser.
+ * This interface is still in development (Dev API status) and may change.
+ */
+
+
+/**
+ * @addtogroup Interfaces
+ * @{
+ */
+/**
+ */
+struct PPB_MediaStreamVideoTrack_0_1 { /* dev */
+  /**
+   * Determines if a resource is a MediaStream video track resource.
+   *
+   * @param[in] resource The <code>PP_Resource</code> to test.
+   *
+   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
+   * resource is a Mediastream video track resource or <code>PP_FALSE</code>
+   * otherwise.
+   */
+  PP_Bool (*IsMediaStreamVideoTrack)(PP_Resource resource);
+  /**
+   * Configures underlying frame buffers for incoming frames.
+   * If the application doesn't want to drop frames, then the
+   * <code>max_buffered_frames</code> should be chosen such that inter-frame
+   * processing time variability won't overrun the input buffer. If the buffer
+   * is overfilled, then frames will be dropped. The application can detect
+   * this by examining the timestamp on returned frames.
+   * If <code>Configure()</code> is not used, default settings will be used.
+   *
+   * @param[in] video_track A <code>PP_Resource</code> corresponding to a video
+   * resource.
+   * @param[in] max_buffered_frames The maximum number of video frames to
+   * hold in the input buffer.
+   *
+   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
+   */
+  int32_t (*Configure)(PP_Resource video_track, uint32_t max_buffered_frames);
+  /**
+   * Returns the track ID of the underlying MediaStream video track.
+   *
+   * @param[in] video_track The <code>PP_Resource</code> to check.
+   *
+   * @return A <code>PP_Var</code> containing the MediaStream track ID as
+   * a string.
+   */
+  struct PP_Var (*GetId)(PP_Resource video_track);
+  /**
+   * Checks whether the underlying MediaStream track has ended.
+   * Calls to GetFrame while the track has ended are safe to make and will
+   * complete, but will fail.
+   *
+   * @param[in] video_track The <code>PP_Resource</code> to check.
+   *
+   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
+   * MediaStream track has ended or <code>PP_FALSE</code> otherwise.
+   */
+  PP_Bool (*HasEnded)(PP_Resource video_track);
+  /**
+   * Gets the next video frame from the MediaStream track.
+   * If internal processing is slower than the incoming frame rate, new frames
+   * will be dropped from the incoming stream. Once the input buffer is full,
+   * frames will be dropped until <code>RecycleFrame()</code> is called to free
+   * a spot for another frame to be buffered.
+   * If there are no frames in the input buffer,
+   * <code>PP_OK_COMPLETIONPENDING</code> will be returned immediately and the
+   * <code>callback</code> will be called, when a new frame is received or an
+   * error happens.
+   * If the caller holds a frame returned by the previous call of
+   * <code>GetFrame()</code>, <code>PP_ERROR_INPROGRESS</code> will be returned.
+   * The caller should recycle the previous frame before getting the next frame.
+   *
+   * @param[in] video_track A <code>PP_Resource</code> corresponding to a video
+   * resource.
+   * @param[out] frame A <code>PP_Resource</code> corresponding to a VideoFrame
+   * resource.
+   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
+   * completion of GetFrame().
+   *
+   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
+   * Returns PP_ERROR_NOMEMORY if <code>max_buffered_frames</code> frames buffer
+   * was not allocated successfully.
+   */
+  int32_t (*GetFrame)(PP_Resource video_track,
+                      PP_Resource* frame,
+                      struct PP_CompletionCallback callback);
+  /**
+   * Recycles a frame returned by <code>GetFrame()</code>, so the track can
+   * reuse the underlying buffer of this frame. And the frame will become
+   * invalid. The caller should release all references it holds to
+   * <code>frame</code> and not use it anymore.
+   *
+   * @param[in] video_track A <code>PP_Resource</code> corresponding to a video
+   * resource.
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a VideoFrame
+   * resource returned by <code>GetFrame()</code>.
+   *
+   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
+   */
+  int32_t (*RecycleFrame)(PP_Resource video_track, PP_Resource frame);
+  /**
+   * Closes the MediaStream video track and disconnects it from video source.
+   * After calling <code>Close()</code>, no new frames will be received.
+   *
+   * @param[in] video_track A <code>PP_Resource</code> corresponding to a
+   * MediaStream video track resource.
+   */
+  void (*Close)(PP_Resource video_track);
+};
+/**
+ * @}
+ */
+
+#endif  /* PPAPI_C_PPB_MEDIA_STREAM_VIDEO_TRACK_H_ */
+
diff --git a/ppapi/c/ppb_video_frame.h b/ppapi/c/ppb_video_frame.h
new file mode 100644
index 0000000..02fdc80
--- /dev/null
+++ b/ppapi/c/ppb_video_frame.h
@@ -0,0 +1,139 @@
+/* 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.
+ */
+
+/* From ppb_video_frame.idl modified Fri Dec 27 17:21:52 2013. */
+
+#ifndef PPAPI_C_PPB_VIDEO_FRAME_H_
+#define PPAPI_C_PPB_VIDEO_FRAME_H_
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_macros.h"
+#include "ppapi/c/pp_resource.h"
+#include "ppapi/c/pp_size.h"
+#include "ppapi/c/pp_stdint.h"
+#include "ppapi/c/pp_time.h"
+
+#define PPB_VIDEOFRAME_INTERFACE_0_1 "PPB_VideoFrame;0.1" /* dev */
+/**
+ * @file
+ * Defines the <code>PPB_VideoFrame</code> interface.
+ */
+
+
+/**
+ * @addtogroup Enums
+ * @{
+ */
+typedef enum {
+  /**
+   * Unknown format value.
+   */
+  PP_VIDEOFRAME_FORMAT_UNKNOWN = 0,
+  /**
+   * 12bpp YVU planar 1x1 Y, 2x2 VU samples.
+   */
+  PP_VIDEOFRAME_FORMAT_YV12 = 1,
+  /**
+   * 16bpp YVU planar 1x1 Y, 2x1 VU samples.
+   */
+  PP_VIDEOFRAME_FORMAT_YV16 = 2,
+  /**
+   * 12bpp YVU planar 1x1 Y, 2x2 VU samples.
+   */
+  PP_VIDEOFRAME_FORMAT_I420 = 3,
+  /**
+   * 20bpp YVU planar 1x1 Y, 2x2 VU, 1x1 A samples.
+   */
+  PP_VIDEOFRAME_FORMAT_YV12A = 4,
+  /**
+   * JPEG color range version of YV12.
+   */
+  PP_VIDEOFRAME_FORMAT_YV12J = 5
+} PP_VideoFrame_Format;
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup Interfaces
+ * @{
+ */
+struct PPB_VideoFrame_0_1 { /* dev */
+  /**
+   * Determines if a resource is a VideoFrame resource.
+   *
+   * @param[in] resource The <code>PP_Resource</code> to test.
+   *
+   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
+   * resource is a VideoFrame resource or <code>PP_FALSE</code> otherwise.
+   */
+  PP_Bool (*IsVideoFrame)(PP_Resource resource);
+  /**
+   * Gets the timestamp of the video frame.
+   *
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a video frame
+   * resource.
+   *
+   * @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)(PP_Resource frame);
+  /**
+   * Sets the timestamp of the video frame. Given in seconds since the
+   * start of the containing video stream.
+   *
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a video frame
+   * resource.
+   * @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_Resource frame, PP_TimeDelta timestamp);
+  /**
+   * Gets the format of the video frame.
+   *
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a video frame
+   * resource.
+   *
+   * @return A <code>PP_VideoFrame_Format</code> containing the format of the
+   * video frame.
+   */
+  PP_VideoFrame_Format (*GetFormat)(PP_Resource frame);
+  /**
+   * Gets the size of the video frame.
+   *
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a video frame
+   * resource.
+   * @param[out] size A <code>PP_Size</code>.
+   *
+   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> on success or
+   * <code>PP_FALSE</code> on failure.
+   */
+  PP_Bool (*GetSize)(PP_Resource frame, struct PP_Size* size);
+  /**
+   * Gets the data buffer for video frame pixels.
+   *
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a video frame
+   * resource.
+   *
+   * @return A pointer to the beginning of the data buffer.
+   */
+  void* (*GetDataBuffer)(PP_Resource frame);
+  /**
+   * Gets the size of data buffer.
+   *
+   * @param[in] frame A <code>PP_Resource</code> corresponding to a video frame
+   * resource.
+   *
+   * @return The size of the data buffer.
+   */
+  uint32_t (*GetDataBufferSize)(PP_Resource frame);
+};
+/**
+ * @}
+ */
+
+#endif  /* PPAPI_C_PPB_VIDEO_FRAME_H_ */
+
-- 
cgit v1.1