From bed763794d2cc887b9e14907089f5fc2b3a9e4a2 Mon Sep 17 00:00:00 2001 From: Ren Zhaohan Date: Tue, 11 May 2010 14:33:37 +0800 Subject: [PATCH] Add vaPutSurfaceBuf to va_backend_tpi.h and va_tpi.c[h], update Android.mk for new shared lib libva_android_tpi.so --- va/Android.mk | 31 +++++++++++++++++++++++++++---- va/va_backend_tpi.h | 19 +++++++++++++++++++ va/va_tpi.c | 42 ++++++++++++++++++++++++++++++++++++++++++ va/va_tpi.h | 19 ++++++++++++++++++- 4 files changed, 106 insertions(+), 5 deletions(-) diff --git a/va/Android.mk b/va/Android.mk index ff927d6..3743cae 100644 --- a/va/Android.mk +++ b/va/Android.mk @@ -1,3 +1,6 @@ +# For libva_android +# ===================================================== + LOCAL_PATH:= $(call my-dir) LIBVA_MINOR_VERSION := 31 @@ -15,10 +18,8 @@ LOCAL_CFLAGS += -DHAVE_CONFIG_H \ -DANDROID \ LOCAL_C_INCLUDES += \ - $(TOPDIR)kernel/include \ $(TARGET_OUT_HEADERS)/libva \ - $(LOCAL_PATH)/x11 \ - $(TOPDIR)kernel/include/drm + $(LOCAL_PATH)/x11 LOCAL_CXX := g++ @@ -37,4 +38,26 @@ LOCAL_SHARED_LIBRARIES := libdl libdrm libcutils include $(BUILD_SHARED_LIBRARY) -include $(call all-makefiles-under,$(LOCAL_PATH)) + +# For libva_android_tpi +# ===================================================== + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + va_tpi.c \ + +LOCAL_C_INCLUDES += \ + $(TARGET_OUT_HEADERS)/libva \ + +LOCAL_COPY_HEADERS_TO := libva/va + +LOCAL_COPY_HEADERS := \ + va.h \ + va_backend.h \ + va_backend_tpi.h + + +LOCAL_MODULE := libva_android_tpi + +include $(BUILD_SHARED_LIBRARY) diff --git a/va/va_backend_tpi.h b/va/va_backend_tpi.h index 898a467..f4417d2 100644 --- a/va/va_backend_tpi.h +++ b/va/va_backend_tpi.h @@ -50,6 +50,25 @@ struct VADriverVTableTPI struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */ VASurfaceID *surface /* out */ ); + + VAStatus (*vaPutSurfaceBuf) ( + VADisplay dpy, + VASurfaceID surface, + unsigned int draw, /* Android Surface/Window */ + 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 */ + ); }; diff --git a/va/va_tpi.c b/va/va_tpi.c index fccd089..f375656 100644 --- a/va/va_tpi.c +++ b/va/va_tpi.c @@ -39,6 +39,16 @@ #define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) #define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } +#ifdef ANDROID +#define Drawable unsigned int +#endif + +static int vaDisplayIsValid (VADisplay dpy) +{ + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext); +} + /* 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 @@ -97,3 +107,35 @@ VAStatus vaCreateSurfaceFromV4L2Buf( } else return VA_STATUS_ERROR_UNIMPLEMENTED; } + +VAStatus vaPutSurfaceBuf ( + VADisplay dpy, + VASurfaceID surface, + Drawable draw, /* Android Surface/Window */ + 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 */ +) +{ + VADriverContextP ctx; + struct VADriverVTableTPI *tpi; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi; + if (tpi && tpi->vaPutSurfaceBuf) { + return tpi->vaPutSurfaceBuf( ctx, surface, draw, data, data_len, srcx, srcy, srcw, srch, + destx, desty, destw, desth, cliprects, number_cliprects, flags ); + } else + return VA_STATUS_ERROR_UNIMPLEMENTED; +} diff --git a/va/va_tpi.h b/va/va_tpi.h index 559fdfc..65e6460 100644 --- a/va/va_tpi.h +++ b/va/va_tpi.h @@ -46,4 +46,21 @@ VAStatus vaCreateSurfaceFromV4L2Buf( VASurfaceID *surface /* out */ ); - +VAStatus vaPutSurfaceBuf ( + VADisplay dpy, + VASurfaceID surface, + Drawable draw, /* Android Surface/Window */ + 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 */ +); -- 2.7.4