summaryrefslogtreecommitdiff
path: root/va/va_tpi.c
diff options
context:
space:
mode:
authorjiguoliang <jiguoliang@localhost.ccr.corp.intel.com>2011-08-25 11:39:53 -0400
committerAustin Yuan <shengquan.yuan@gmail.com>2011-09-21 23:22:36 -0400
commit1092e4b54a476260e3c74d87ebb1a552e8fef71e (patch)
tree359db3fa2d54108f37985d489698d570007a7ecf /va/va_tpi.c
parent860c127895371b98132bcaf4e7e6fc3f5ea463ef (diff)
downloadlibva-1092e4b54a476260e3c74d87ebb1a552e8fef71e.tar.gz
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: jiguoliang <guoliangx.ji@intel.com> Signed-off-by: Austin Yuan <shengquan.yuan@gmail.com>
Diffstat (limited to 'va/va_tpi.c')
-rw-r--r--va/va_tpi.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/va/va_tpi.c b/va/va_tpi.c
index 86385b0..e9169fc 100644
--- a/va/va_tpi.c
+++ b/va/va_tpi.c
@@ -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 (