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