diff --git a/test/basic/Android.mk b/test/basic/Android.mk
index 1755ec9..e5b3a59 100755
--- a/test/basic/Android.mk
+++ b/test/basic/Android.mk
@@ -1,3 +1,7 @@
+LIBVA_TESTS_SHARED_LIBS := libva-android libva libdl libdrm libcutils libutils
+LIBVA_TESTS_CFLAGS := -DANDROID -Wno-unused-parameter
+LIBVA_TESTS_C_INCLUDES := $(TARGET_OUT_HEADERS)/libva
+
 # For test_01
 # =====================================================
 
@@ -8,17 +12,12 @@
 LOCAL_SRC_FILES := \
   test_01.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS := $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_001
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -29,17 +28,12 @@
 LOCAL_SRC_FILES := \
   test_02.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_02_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -50,17 +44,12 @@
 LOCAL_SRC_FILES := \
   test_03.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_03_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -71,17 +60,12 @@
 LOCAL_SRC_FILES := \
   test_04.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_04_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -92,17 +76,12 @@
 LOCAL_SRC_FILES := \
   test_05.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_05_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -113,17 +92,12 @@
 LOCAL_SRC_FILES := \
   test_06.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_06_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -134,17 +108,12 @@
 LOCAL_SRC_FILES := \
   test_07.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_07_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -155,17 +124,12 @@
 LOCAL_SRC_FILES := \
   test_08.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_08_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -176,17 +140,12 @@
 LOCAL_SRC_FILES := \
   test_09.c	\
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_09_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -197,17 +156,12 @@
 LOCAL_SRC_FILES := \
   test_10.c	
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_10_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
@@ -218,17 +172,12 @@
 LOCAL_SRC_FILES := \
   test_11.c	
 
-LOCAL_CFLAGS += \
-    -DANDROID
-
-LOCAL_C_INCLUDES += \
-  $(TARGET_OUT_HEADERS)/libva	\
-  $(TOPDIR)/vendor/intel/hardware/libva/va/
-
+LOCAL_CFLAGS += $(LIBVA_TESTS_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBVA_TESTS_C_INCLUDES)
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE :=	test_11_android
 
-LOCAL_SHARED_LIBRARIES := libva-android libva libdl libdrm libcutils libutils libui libsurfaceflinger
+LOCAL_SHARED_LIBRARIES := $(LIBVA_TESTS_SHARED_LIBS)
 
 include $(BUILD_EXECUTABLE)
 
diff --git a/test/putsurface/Android.mk b/test/putsurface/Android.mk
index 03edb61..628492d 100644
--- a/test/putsurface/Android.mk
+++ b/test/putsurface/Android.mk
@@ -10,7 +10,7 @@
   #putsurface_x11.c
 
 LOCAL_CFLAGS += \
-    -DANDROID
+    -DANDROID -Wno-unused-parameter
 
 LOCAL_C_INCLUDES += \
   $(TARGET_OUT_HEADERS)/libva
diff --git a/test/putsurface/putsurface_common.c b/test/putsurface/putsurface_common.c
index e52bf45..d7d7003 100755
--- a/test/putsurface/putsurface_common.c
+++ b/test/putsurface/putsurface_common.c
@@ -8,11 +8,11 @@
  * distribute, sub license, and/or sell copies of the Software, and to
  * permit persons to whom the Software is furnished to do so, subject to
  * the following conditions:
- * 
+ *
  * The above copyright notice and this permission notice (including the
  * next paragraph) shall be included in all copies or substantial portions
  * of the Software.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
@@ -89,7 +89,7 @@
 
 
 typedef struct {
-    char * fmt_str;
+    const char * fmt_str;
     unsigned int fourcc;
 } fourcc_map;
 fourcc_map va_fourcc_map[] = {
@@ -114,7 +114,7 @@
     return 0;
 
 }
-char* map_vafourcc_to_str (unsigned int format)
+const char* map_vafourcc_to_str (unsigned int format)
 {
     static char unknown_format[] = "unknown-format";
     unsigned int i;
@@ -161,7 +161,7 @@
     if (num_image_formats == 0)
         return 0;
 
-    image_formats = malloc(num_image_formats * sizeof(*image_formats));
+    image_formats = (VAImageFormat *) malloc(num_image_formats * sizeof(*image_formats));
     if (!image_formats)
         return 0;
 
@@ -210,7 +210,7 @@
     /* Guess the number of surface attributes, thus including any
        pixel-format supported by the VA driver */
     num_surface_attribs = VASurfaceAttribCount + num_image_formats;
-    surface_attribs = malloc(num_surface_attribs * sizeof(*surface_attribs));
+    surface_attribs = (VASurfaceAttrib *) malloc(num_surface_attribs * sizeof(*surface_attribs));
     if (!surface_attribs)
         return 0;
 
@@ -219,7 +219,7 @@
     if (va_status == VA_STATUS_SUCCESS)
         va_surface_attribs =  surface_attribs;
     else if (va_status == VA_STATUS_ERROR_MAX_NUM_EXCEEDED) {
-        va_surface_attribs = realloc(surface_attribs,
+        va_surface_attribs = (VASurfaceAttrib *) realloc(surface_attribs,
             num_surface_attribs * sizeof(*va_surface_attribs));
         if (!va_surface_attribs) {
             free(surface_attribs);
@@ -256,7 +256,8 @@
 int csc_preparation ()
 {
     VAStatus va_status;
-    
+    VASurfaceAttrib surface_attribs[1], * const s_attrib = &surface_attribs[0];
+
     // 1. make sure dst fourcc is supported for vaImage
     if (!lookup_image_format(csc_dst_fourcc)) {
         test_color_conversion = 0;
@@ -265,7 +266,6 @@
     }
 
     // 2. make sure src_fourcc is supported for vaSurface
-    VASurfaceAttrib surface_attribs[1], * const s_attrib = &surface_attribs[0];
     s_attrib->type = VASurfaceAttribPixelFormat;
     s_attrib->flags = VA_SURFACE_ATTRIB_SETTABLE;
     s_attrib->value.type = VAGenericValueTypeInteger;
@@ -292,18 +292,18 @@
     image_format.fourcc = csc_dst_fourcc;
     image_format.byte_order = VA_LSB_FIRST;
     image_format.bits_per_pixel = 16;
-    
+
     va_status = vaCreateImage(va_dpy, &image_format,
                     surface_width, surface_height,
                     &csc_dst_fourcc_image);
     CHECK_VASTATUS(va_status,"vaCreateImage");
-    
+
 
     // 3.3 create a temp VASurface for final rendering(vaPutSurface)
     s_attrib->value.value.i = VA_FOURCC_NV12;
-    va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, 
+    va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420,
                                  surface_width, surface_height,
-                                 &csc_render_surface, 1, 
+                                 &csc_render_surface, 1,
                                  surface_attribs, 1);
     CHECK_VASTATUS(va_status,"vaCreateSurfaces");
 
@@ -328,7 +328,7 @@
 
         return surface_id[i];
     }
-    
+
     for (i=0; i<SURFACE_NUM; i++) {
         surface_status = (VASurfaceStatus)0;
         vaQuerySurfaceStatus(va_dpy, surface_id[i], &surface_status);
@@ -356,11 +356,11 @@
     int box_width_loc=8;
     int row_shift_loc=0;
     int i;
-    
+
     for (i=0; i<SURFACE_NUM; i++) {
         printf("\rLoading data into surface %d.....", i);
         upload_surface(va_dpy, surface_id[i], box_width_loc, row_shift_loc, 0);
-        
+
         row_shift_loc++;
         if (row_shift_loc==(2*box_width_loc)) row_shift_loc= 0;
     }
@@ -384,9 +384,9 @@
 {
     if (test_clip == 0)
         return;
-            
+
     srand((unsigned)time(NULL));
-                
+
     cliprects[0].x = (rand() % width);
     cliprects[0].y = (rand() % height);
     cliprects[0].width = (rand() % (width - cliprects[0].x));
@@ -412,16 +412,16 @@
     unsigned int frame_num=0, start_time, putsurface_time;
     VARectangle cliprects[2]; /* client supplied clip list */
     int continue_display = 0;
-    
+
     if (drawable == drawable_thread0)
         printf("Enter into thread0\n\n");
     if (drawable == drawable_thread1)
         printf("Enter into thread1\n\n");
-    
+
     putsurface_time = 0;
     while (!quit) {
         VASurfaceID surface_id = VA_INVALID_SURFACE;
-        
+
         while (surface_id == VA_INVALID_SURFACE)
             surface_id = get_next_free_surface(&index);
 
@@ -432,9 +432,9 @@
 
         if (check_event)
             pthread_mutex_lock(&gmutex);
-        
+
         start_time = get_tick_count();
-	if ((continue_display == 0) && getenv("FRAME_STOP")) {
+        if ((continue_display == 0) && getenv("FRAME_STOP")) {
             char c;
             printf("Press any key to display frame %d...(c/C to continue)\n", frame_num);
             c = getchar();
@@ -447,13 +447,13 @@
                 printf("do additional colorcoversion from %s to %s\n", map_vafourcc_to_str(csc_src_fourcc), map_vafourcc_to_str(csc_dst_fourcc));
             }
             // get image from surface, csc_src_fourcc to csc_dst_fourcc conversion happens
-            vaStatus = vaGetImage(va_dpy, surface_id, 0, 0, 
+            vaStatus = vaGetImage(va_dpy, surface_id, 0, 0,
                 surface_width, surface_height, csc_dst_fourcc_image.image_id);
             CHECK_VASTATUS(vaStatus,"vaGetImage");
-            
+
             // render csc_dst_fourcc image to temp surface
             vaStatus = vaPutImage(va_dpy, csc_render_surface, csc_dst_fourcc_image.image_id,
-                                    0, 0, surface_width, surface_height, 
+                                    0, 0, surface_width, surface_height,
                                     0, 0, surface_width, surface_height);
             CHECK_VASTATUS(vaStatus,"vaPutImage");
 
@@ -475,20 +475,20 @@
                                     display_field);
             CHECK_VASTATUS(vaStatus,"vaPutSurface");
         }
-    
+
         putsurface_time += (get_tick_count() - start_time);
-        
+
         if (check_event)
             pthread_mutex_unlock(&gmutex);
-        
+
         pthread_mutex_unlock(&surface_mutex[index]); /* locked in get_next_free_surface */
-        
+
         if ((frame_num % 0xff) == 0) {
             fprintf(stderr, "%.2f FPS             \r", 256000.0 / (float)putsurface_time);
             putsurface_time = 0;
             update_clipbox(cliprects, width, height);
         }
-        
+
         if (check_event)
             check_window_event(win_display, drawable, &width, &height, &quit);
 
@@ -496,7 +496,7 @@
             row_shift++;
             if (row_shift==(2*box_width)) row_shift= 0;
         }
-        
+
         if (frame_rate != 0) /* rough framerate control */
             usleep(1000/frame_rate*1000);
 
@@ -504,10 +504,10 @@
         if (frame_num >= frame_num_total)
             quit = 1;
     }
-    
-    if (drawable == drawable_thread1)    
+
+    if (drawable == drawable_thread1)
         pthread_exit(NULL);
-    
+
     return 0;
 }
 int main(int argc,char **argv)
@@ -595,8 +595,8 @@
             case '1':
                 sscanf(optarg, "%s", str_src_fmt);
                 csc_src_fourcc = map_str_to_vafourcc (str_src_fmt);
-                
-				if (!csc_src_fourcc) {
+
+                                if (!csc_src_fourcc) {
                     printf("invalid fmt1: %s\n", str_src_fmt );
                     exit(0);
                 }
@@ -604,8 +604,8 @@
             case '2':
                 sscanf(optarg, "%s", str_dst_fmt);
                 csc_dst_fourcc = map_str_to_vafourcc (str_dst_fmt);
-                
-				if (!csc_dst_fourcc) {
+
+                                if (!csc_dst_fourcc) {
                     printf("invalid fmt1: %s\n", str_dst_fmt );
                     exit(0);
                 }
@@ -620,7 +620,7 @@
     if (csc_src_fourcc && csc_dst_fourcc) {
         test_color_conversion = 1;
     }
-    
+
     win_display = (void *)open_display();
     if (win_display == NULL) {
         fprintf(stderr, "Can't open the connection of display!\n");
@@ -642,23 +642,23 @@
             &surface_id[0], SURFACE_NUM,
             NULL, 0
         );
-	}
+        }
     CHECK_VASTATUS(va_status, "vaCreateSurfaces");
     if (multi_thread == 0) /* upload the content for all surfaces */
         upload_source_YUV_once_for_all();
-    
+
     if (check_event)
         pthread_mutex_init(&gmutex, NULL);
-   
+
     for(i = 0; i< SURFACE_NUM; i++)
         pthread_mutex_init(&surface_mutex[i], NULL);
-    
-    if (multi_thread == 1) 
+
+    if (multi_thread == 1)
         ret = pthread_create(&thread1, NULL, putsurface_thread, (void*)drawable_thread1);
 
     putsurface_thread((void *)drawable_thread0);
 
-    if (multi_thread == 1) 
+    if (multi_thread == 1)
         pthread_join(thread1, (void **)&ret);
     printf("thread1 is free\n");
 
@@ -666,7 +666,7 @@
         // destroy temp surface/image
         va_status = vaDestroySurfaces(va_dpy, &csc_render_surface, 1);
         CHECK_VASTATUS(va_status,"vaDestroySurfaces");
-        
+
         va_status = vaDestroyImage(va_dpy, csc_dst_fourcc_image.image_id);
         CHECK_VASTATUS(va_status,"vaDestroyImage");
     }
@@ -676,12 +676,12 @@
         vpp_config_id = VA_INVALID_ID;
     }
 
-    vaDestroySurfaces(va_dpy,&surface_id[0],SURFACE_NUM);    
+    vaDestroySurfaces(va_dpy,&surface_id[0],SURFACE_NUM);
     vaTerminate(va_dpy);
 
     free(va_image_formats);
     free(va_surface_attribs);
     close_display(win_display);
-    
+
     return 0;
 }
diff --git a/va/Android.mk b/va/Android.mk
index 4e85217..eae7993 100755
--- a/va/Android.mk
+++ b/va/Android.mk
@@ -28,17 +28,8 @@
 ifeq ($(ENABLE_IMG_GRAPHICS),true)
 
 LIBVA_DRIVERS_PATH = /system/lib
-
-# Version set to Android Jelly Bean
-ALOG_VERSION_REQ := 4.1
-ALOG_VERSION := $(filter $(ALOG_VERSION_REQ),$(firstword $(sort $(PLATFORM_VERSION) \
-                                   $(ALOG_VERSION_REQ))))
-
 include $(CLEAR_VARS)
 
-#LIBVA_MINOR_VERSION := 31
-#LIBVA_MAJOR_VERSION := 0 
-
 LOCAL_SRC_FILES := \
 	va.c \
 	va_trace.c \
@@ -47,14 +38,8 @@
 LOCAL_CFLAGS := \
 	-DANDROID \
 	-DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" \
-	-DLOG_TAG=\"libva\"
-
-# Android Jelly Bean defined ALOGx, older versions use LOGx
-ifeq ($(ALOG_VERSION), $(ALOG_VERSION_REQ))
-LOCAL_CFLAGS += -DANDROID_ALOG
-else
-LOCAL_CFLAGS += -DANDROID_LOG
-endif
+	-DLOG_TAG=\"libva\" \
+	-DANDROID_ALOG
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/..
 
diff --git a/va/va.h b/va/va.h
index e911be2..75a4bc0 100755
--- a/va/va.h
+++ b/va/va.h
@@ -2500,10 +2500,13 @@
 	unsigned char luma_log2_weight_denom;
 	unsigned char chroma_log2_weight_denom;
 	unsigned char cabac_init_idc;
-	unsigned char pic_order_cnt_lsb;
+        unsigned char reserved8bit;
 
-	unsigned char pic_parameter_set_id;
-	unsigned short idr_pic_id;
+        unsigned short pic_order_cnt_lsb;
+        unsigned short reserved16bit;
+
+        unsigned short idr_pic_id;
+        unsigned char pic_parameter_set_id;
 	unsigned char colour_plane_id;
 
 	char slice_alpha_c0_offset_div2;
diff --git a/va/va_android.h b/va/va_android.h
index 0193fb0..978becd 100644
--- a/va/va_android.h
+++ b/va/va_android.h
@@ -48,7 +48,8 @@
 
 #ifdef __cplusplus
 #ifdef ANDROID
-#include <gui/Surface.h>
+#include <system/window.h>
+#include <utils/StrongPointer.h>
 using namespace android;
 
 /*
