summaryrefslogtreecommitdiff
path: root/va
diff options
context:
space:
mode:
Diffstat (limited to 'va')
-rw-r--r--va/Android.mk31
-rw-r--r--va/va_backend_tpi.h19
-rw-r--r--va/va_tpi.c42
-rw-r--r--va/va_tpi.h19
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 */
+);