diff options
author | jiguoliang <jiguoliang@localhost.ccr.corp.intel.com> | 2011-08-25 11:39:53 -0400 |
---|---|---|
committer | Austin Yuan <shengquan.yuan@gmail.com> | 2011-09-21 23:22:36 -0400 |
commit | 1092e4b54a476260e3c74d87ebb1a552e8fef71e (patch) | |
tree | 359db3fa2d54108f37985d489698d570007a7ecf /va/va_tpi.c | |
parent | 860c127895371b98132bcaf4e7e6fc3f5ea463ef (diff) |
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.c | 32 |
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 ( |