diff options
author | penghuang@chromium.org <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-06 16:38:47 +0000 |
---|---|---|
committer | penghuang@chromium.org <penghuang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-06 16:38:47 +0000 |
commit | 9134a8c5bd338f555a61f9863b0a50ffe28e0d5a (patch) | |
tree | 3be721f5fc32679fc7378cbbde80893841e24f13 /ppapi/c | |
parent | c7c265f6fccf6a4672855af85d5cbd23689f4416 (diff) | |
download | chromium_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.h | 4 | ||||
-rw-r--r-- | ppapi/c/ppb_media_stream_video_track.h | 138 | ||||
-rw-r--r-- | ppapi/c/ppb_video_frame.h | 139 |
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_ */ + |