summaryrefslogtreecommitdiffstats
path: root/ppapi/c
diff options
context:
space:
mode:
authorpenghuang@chromium.org <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-06 16:38:47 +0000
committerpenghuang@chromium.org <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-06 16:38:47 +0000
commit9134a8c5bd338f555a61f9863b0a50ffe28e0d5a (patch)
tree3be721f5fc32679fc7378cbbde80893841e24f13 /ppapi/c
parentc7c265f6fccf6a4672855af85d5cbd23689f4416 (diff)
downloadchromium_src-9134a8c5bd338f555a61f9863b0a50ffe28e0d5a.zip
chromium_src-9134a8c5bd338f555a61f9863b0a50ffe28e0d5a.tar.gz
chromium_src-9134a8c5bd338f555a61f9863b0a50ffe28e0d5a.tar.bz2
[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
Diffstat (limited to 'ppapi/c')
-rw-r--r--ppapi/c/pp_macros.h4
-rw-r--r--ppapi/c/ppb_media_stream_video_track.h138
-rw-r--r--ppapi/c/ppb_video_frame.h139
3 files changed, 279 insertions, 2 deletions
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_ */
+