Commit 69d3a3c3 authored by Austin Yuan's avatar Austin Yuan

Proposed new vaCreateSurfaceFromV4L2Buffer to replace origin...

Proposed new vaCreateSurfaceFromV4L2Buffer to replace origin vaCreateSurfaceFromMrstV4L2 buffer to make it more generic
Signed-off-by: default avatarAustin Yuan <shengquan.yuan@intel.com>
parent c21aaad5
...@@ -1154,11 +1154,17 @@ VAStatus dummy_SetDisplayAttributes ( ...@@ -1154,11 +1154,17 @@ VAStatus dummy_SetDisplayAttributes (
} }
VAStatus dummy_DbgCopySurfaceToBuffer( VAStatus dummy_CopySurfaceToBuffer(
VADriverContextP ctx, VADriverContextP ctx,
VASurfaceID surface, VASurfaceID surface,
void **buffer, /* out */ unsigned int *fourcc, /* following are output argument */
unsigned int *stride /* out */ unsigned int *luma_stride,
unsigned int *chroma_u_stride,
unsigned int *chroma_v_stride,
unsigned int *luma_offset,
unsigned int *chroma_u_offset,
unsigned int *chroma_v_offset,
void **buffer
) )
{ {
/* TODO */ /* TODO */
...@@ -1266,7 +1272,7 @@ VAStatus __vaDriverInit_0_29( VADriverContextP ctx ) ...@@ -1266,7 +1272,7 @@ VAStatus __vaDriverInit_0_29( VADriverContextP ctx )
ctx->vtable.vaGetDisplayAttributes = dummy_GetDisplayAttributes; ctx->vtable.vaGetDisplayAttributes = dummy_GetDisplayAttributes;
ctx->vtable.vaSetDisplayAttributes = dummy_SetDisplayAttributes; ctx->vtable.vaSetDisplayAttributes = dummy_SetDisplayAttributes;
ctx->vtable.vaDbgCopySurfaceToBuffer = dummy_DbgCopySurfaceToBuffer; ctx->vtable.vaCopySurfaceToBuffer = dummy_CopySurfaceToBuffer;
driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) ); driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) );
ctx->pDriverData = (void *) driver_data; ctx->pDriverData = (void *) driver_data;
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include <dlfcn.h> #include <dlfcn.h>
#include <unistd.h> #include <unistd.h>
#include <linux/videodev2.h>
#define VA_STR_VERSION VA_BUILD_DATE VA_BUILD_GIT #define VA_STR_VERSION VA_BUILD_DATE VA_BUILD_GIT
#define VA_MAJOR_VERSION 0 #define VA_MAJOR_VERSION 0
...@@ -1222,7 +1224,14 @@ VAStatus vaSetDisplayAttributes ( ...@@ -1222,7 +1224,14 @@ VAStatus vaSetDisplayAttributes (
return ctx->vtable.vaSetDisplayAttributes ( ctx, attr_list, num_attributes ); return ctx->vtable.vaSetDisplayAttributes ( ctx, attr_list, num_attributes );
} }
/* Wrap a CI (camera imaging) frame as a VA surface to share captured video between camear
* and VA encode. With frame_id, VA driver need to call CI interfaces to get the information
* of the frame, and to determine if the frame can be wrapped as a VA surface
*
* Application should make sure the frame is idle before the frame is passed into VA stack
* and also a vaSyncSurface should be called before application tries to access the frame
* from CI stack
*/
VAStatus vaCreateSurfaceFromCIFrame ( VAStatus vaCreateSurfaceFromCIFrame (
VADisplay dpy, VADisplay dpy,
unsigned long frame_id, unsigned long frame_id,
...@@ -1242,18 +1251,23 @@ VAStatus vaCreateSurfaceFromCIFrame ( ...@@ -1242,18 +1251,23 @@ VAStatus vaCreateSurfaceFromCIFrame (
} }
VAStatus vaCreateSurfaceFromMrstV4L2Buf( /* Wrap a V4L2 buffer as a VA surface, so that V4L2 camera, VA encode
* can share the data without copy
* The VA driver should query the camera device from v4l2_fd to see
* if camera device memory/buffer can be wrapped into a VA surface
* Buffer information is passed in by v4l2_fmt and v4l2_buf structure,
* VA driver also needs do further check if the buffer can meet encode
* hardware requirement, such as dimension, fourcc, stride, etc
*
* Application should make sure the buffer is idle before the frame into VA stack
* and also a vaSyncSurface should be called before application tries to access the frame
* from V4L2 stack
*/
VAStatus vaCreateSurfaceFromV4L2Buf(
VADisplay dpy, VADisplay dpy,
unsigned int width, int v4l2_fd, /* file descriptor of V4L2 device */
unsigned int height, struct v4l2_format *v4l2_fmt, /* format of V4L2 */
unsigned int size, struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */
unsigned int fourcc,
unsigned int luma_stride,
unsigned int chroma_u_stride,
unsigned int chroma_v_stride,
unsigned int luma_offset,
unsigned int chroma_u_offset,
unsigned int chroma_v_offset,
VASurfaceID *surface /* out */ VASurfaceID *surface /* out */
) )
{ {
...@@ -1261,14 +1275,18 @@ VAStatus vaCreateSurfaceFromMrstV4L2Buf( ...@@ -1261,14 +1275,18 @@ VAStatus vaCreateSurfaceFromMrstV4L2Buf(
CHECK_DISPLAY(dpy); CHECK_DISPLAY(dpy);
ctx = CTX(dpy); ctx = CTX(dpy);
TRACE(vtable.vaCreateSurfaceFromMrstV4L2Buf); TRACE(vtable.vaCreateSurfaceFromV4L2Buf);
if (ctx->vtable.vaCreateSurfaceFromMrstV4L2Buf) if (ctx->vtable.vaCreateSurfaceFromV4L2Buf)
return ctx->vtable.vaCreateSurfaceFromMrstV4L2Buf( ctx, width, height, size, fourcc, luma_stride, chroma_u_stride, chroma_v_stride, luma_offset, chroma_u_offset, chroma_v_offset, surface ); return ctx->vtable.vaCreateSurfaceFromV4L2Buf( ctx, v4l2_fd, v4l2_fmt, v4l2_buf, surface );
else else
return VA_STATUS_ERROR_UNKNOWN; return VA_STATUS_ERROR_UNKNOWN;
} }
/* It is a debug interface, and isn't exported in core VAAPI
* It is used to dump surface data into system memory
* Application should explicitly call free to release the buffer memory
*/
VAStatus vaCopySurfaceToBuffer(VADisplay dpy, VAStatus vaCopySurfaceToBuffer(VADisplay dpy,
VASurfaceID surface, VASurfaceID surface,
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#endif #endif
#include <stdlib.h> #include <stdlib.h>
#include <linux/videodev2.h>
typedef struct VADriverContext *VADriverContextP; typedef struct VADriverContext *VADriverContextP;
...@@ -382,18 +383,11 @@ struct VADriverVTable ...@@ -382,18 +383,11 @@ struct VADriverVTable
); );
VAStatus (*vaCreateSurfaceFromMrstV4L2Buf) ( VAStatus (*vaCreateSurfaceFromV4L2Buf) (
VADriverContextP ctx, VADriverContextP ctx,
unsigned int width, int v4l2_fd, /* file descriptor of V4L2 device */
unsigned int height, struct v4l2_format *v4l2_fmt, /* format of V4L2 */
unsigned int size, struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */
unsigned int fourcc,
unsigned int luma_stride,
unsigned int chroma_u_stride,
unsigned int chroma_v_stride,
unsigned int luma_offset,
unsigned int chroma_u_offset,
unsigned int chroma_v_offset,
VASurfaceID *surface /* out */ VASurfaceID *surface /* out */
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment