libmix: use new vaCreateSurfaces API to map external buffer

BZ: 132242

use new vaCreateSurfaces API to map external buffer for
video decoder

Change-Id: I046d86901f37b6c954aac144777756edd033dc74
Signed-off-by: Nana GUo <nana.n.guo@intel.com>
Reviewed-on: http://android.intel.com:8080/126961
Reviewed-by: Shi, PingX <pingx.shi@intel.com>
Tested-by: Shi, PingX <pingx.shi@intel.com>
Reviewed-by: cactus <cactus@intel.com>
Tested-by: cactus <cactus@intel.com>
diff --git a/videodecoder/VideoDecoderBase.cpp b/videodecoder/VideoDecoderBase.cpp
index afd68df..79e33b7 100755
--- a/videodecoder/VideoDecoderBase.cpp
+++ b/videodecoder/VideoDecoderBase.cpp
@@ -808,35 +808,57 @@
 #endif
     }
     if (mConfigBuffer.flag & USE_NATIVE_GRAPHIC_BUFFER) {
-        mVASurfaceAttrib = new VASurfaceAttributeTPI;
+        VASurfaceAttrib attribs[2];
+        mVASurfaceAttrib = new VASurfaceAttribExternalBuffers;
         if (mVASurfaceAttrib == NULL) {
             return DECODE_MEMORY_FAIL;
         }
 
-        mVASurfaceAttrib->buffers= (unsigned int *)malloc(sizeof(unsigned int)*mNumSurfaces);
+        mVASurfaceAttrib->buffers= (unsigned long *)malloc(sizeof(unsigned long)*mNumSurfaces);
         if (mVASurfaceAttrib->buffers == NULL) {
             return DECODE_MEMORY_FAIL;
         }
-        mVASurfaceAttrib->count = mNumSurfaces;
-        mVASurfaceAttrib->luma_stride = mConfigBuffer.graphicBufferStride;
+        mVASurfaceAttrib->num_buffers = mNumSurfaces;
         mVASurfaceAttrib->pixel_format = mConfigBuffer.graphicBufferColorFormat;
         mVASurfaceAttrib->width = mVideoFormatInfo.width;
         mVASurfaceAttrib->height = mVideoFormatInfo.height;
-        mVASurfaceAttrib->type = VAExternalMemoryAndroidGrallocBuffer;
-        mVASurfaceAttrib->reserved[0] = (unsigned int)mConfigBuffer.nativeWindow;
+        mVASurfaceAttrib->data_size = mConfigBuffer.graphicBufferStride * mVideoFormatInfo.height * 1.5;
+        mVASurfaceAttrib->num_planes = 2;
+        mVASurfaceAttrib->pitches[0] = mConfigBuffer.graphicBufferStride;
+        mVASurfaceAttrib->pitches[1] = mConfigBuffer.graphicBufferStride;
+        mVASurfaceAttrib->pitches[2] = 0;
+        mVASurfaceAttrib->pitches[3] = 0;
+        mVASurfaceAttrib->offsets[0] = 0;
+        mVASurfaceAttrib->offsets[1] = mConfigBuffer.graphicBufferStride * mVideoFormatInfo.height;
+        mVASurfaceAttrib->offsets[2] = 0;
+        mVASurfaceAttrib->offsets[3] = 0;
+        mVASurfaceAttrib->private_data = (void *)mConfigBuffer.nativeWindow;
+        mVASurfaceAttrib->flags = 0;
 
         for (int i = 0; i < mNumSurfaces; i++) {
             mVASurfaceAttrib->buffers[i] = (unsigned int )mConfigBuffer.graphicBufferHandler[i];
         }
 
-        vaStatus = vaCreateSurfacesWithAttribute(
+        attribs[0].type = (VASurfaceAttribType)VASurfaceAttribMemoryType;
+        attribs[0].flags = VA_SURFACE_ATTRIB_SETTABLE;
+        attribs[0].value.type = VAGenericValueTypeInteger;
+        attribs[0].value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_ANDROID_GRALLOC;
+
+        attribs[1].type = (VASurfaceAttribType)VASurfaceAttribExternalBufferDescriptor;
+        attribs[1].flags = VA_SURFACE_ATTRIB_SETTABLE;
+        attribs[1].value.type = VAGenericValueTypePointer;
+        attribs[1].value.value.p = (void *)mVASurfaceAttrib;
+
+        vaStatus = vaCreateSurfaces(
             mVADisplay,
-            mVideoFormatInfo.surfaceWidth,
-            mVideoFormatInfo.surfaceHeight,
             format,
-            mNumSurfaces,
+            mVideoFormatInfo.width,
+            mVideoFormatInfo.height,
             mSurfaces,
-            mVASurfaceAttrib);
+            mNumSurfaces,
+            attribs,
+            2);
+
     } else {
         vaStatus = vaCreateSurfaces(
             mVADisplay,
diff --git a/videodecoder/VideoDecoderBase.h b/videodecoder/VideoDecoderBase.h
index 1f69cf1..292473c 100644
--- a/videodecoder/VideoDecoderBase.h
+++ b/videodecoder/VideoDecoderBase.h
@@ -151,7 +151,7 @@
     VideoSurfaceBuffer *mOutputHead; // head of output buffer list
     VideoSurfaceBuffer *mOutputTail;  // tail of output buffer list
     VASurfaceID *mSurfaces; // surfaces array
-    VASurfaceAttributeTPI *mVASurfaceAttrib;
+    VASurfaceAttribExternalBuffers *mVASurfaceAttrib;
     uint8_t **mSurfaceUserPtr; // mapped user space pointer
     int32_t mSurfaceAcquirePos; // position of surface to start acquiring
     int32_t mNextOutputPOC; // Picture order count of next output