Commit 1092e4b5 authored by jiguoliang's avatar jiguoliang Committed by Austin Yuan

va_tpi: vaCreateSurfaceFromKBuf for streaming the video playback to remote monitor

For such use case, the pipeline is: decode->encode->send to network.
The local decode/playback and the encode process are seperated, thus it
needs the buffer sharing b/w the decode and encode in seperate process.
This API creates/wraps the decoded surface into an encode surface. Its
input parameter is the kernel buffer handle of decoded surface which is
only understandable by driver implementation.

Change-Id: I7953ecf3b7333c1cdb6af5a0f45b054c8840f8e2
Signed-off-by: default avatarjiguoliang <guoliangx.ji@intel.com>
Signed-off-by: default avatarAustin Yuan <shengquan.yuan@gmail.com>
parent 860c1278
......@@ -66,26 +66,42 @@ struct VADriverVTableTPI
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
unsigned int chroma_v_offset
);
);
VAStatus (*vaCreateSurfaceFromKBuf)(
VADisplay dpy,
int width,
int height,
int format,
VASurfaceID *surface, /* out */
unsigned int kbuf_handle, /* kernel buffer handle*/
unsigned size, /* kernel buffer size */
unsigned int kBuf_fourcc, /* expected fourcc */
unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
unsigned int chroma_u_stride, /* chroma stride */
unsigned int chroma_v_stride,
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
unsigned int chroma_v_offset
);
VAStatus (*vaPutSurfaceBuf) (
VADriverContextP ctx,
VASurfaceID surface,
unsigned char* data,
int* data_len,
short srcx,
short srcy,
unsigned short srcw,
unsigned short srch,
short destx,
short desty,
unsigned short destw,
unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in the clip list */
unsigned int flags /* de-interlacing flags */
);
VAStatus (*vaPutSurfaceBuf) (
VADriverContextP ctx,
VASurfaceID surface,
unsigned char* data,
int* data_len,
short srcx,
short srcy,
unsigned short srcw,
unsigned short srch,
short destx,
short desty,
unsigned short destw,
unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in the clip list */
unsigned int flags /* de-interlacing flags */
);
};
......
......@@ -137,7 +137,39 @@ VAStatus vaCreateSurfacesForUserPtr(
return VA_STATUS_ERROR_UNIMPLEMENTED;
}
/*
* Create surface from the Kernel buffer
*/
VAStatus vaCreateSurfaceFromKBuf(
VADisplay dpy,
int width,
int height,
int format,
VASurfaceID *surface, /* out */
unsigned int kbuf_handle, /* kernel buffer handle*/
unsigned size, /* kernel buffer size */
unsigned int kBuf_fourcc, /* expected fourcc */
unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
unsigned int chroma_u_stride, /* chroma stride */
unsigned int chroma_v_stride,
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
unsigned int chroma_v_offset
)
{
VADriverContextP ctx;
struct VADriverVTableTPI *tpi;
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
tpi = (struct VADriverVTableTPI *)ctx->vtable_tpi;
if (tpi && tpi->vaCreateSurfaceFromKBuf) {
return tpi->vaCreateSurfaceFromKBuf( ctx, width, height, format, surface, kbuf_handle,
size, kBuf_fourcc, luma_stride, chroma_u_stride,
chroma_v_stride, luma_offset, chroma_u_offset, chroma_v_offset );
} else
return VA_STATUS_ERROR_UNIMPLEMENTED;
}
VAStatus vaPutSurfaceBuf (
......
......@@ -93,6 +93,27 @@ VAStatus vaCreateSurfacesForUserPtr(
unsigned int chroma_v_offset
);
/*
* Create surface from the Kernel buffer
*/
VAStatus vaCreateSurfaceFromKbuf(
VADisplay dpy,
int width,
int height,
int format,
VASurfaceID *surface, /* out */
unsigned int kbuf_handle, /* kernel buffer handle*/
unsigned size, /* kernel buffer size */
unsigned int kBuf_fourcc, /* expected fourcc */
unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
unsigned int chroma_u_stride, /* chroma stride */
unsigned int chroma_v_stride,
unsigned int luma_offset, /* could be 0 */
unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
unsigned int chroma_v_offset
);
#ifdef __cplusplus
}
#endif
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