Fix external surface issue using new gmm API.
Need to upgrade gmmlib version to 6f15b795e1511febf233b42d7dde603f52fcfdab
diff --git a/media_driver/linux/common/ddi/media_libva_util.cpp b/media_driver/linux/common/ddi/media_libva_util.cpp
index 5421293..8d96393 100755
--- a/media_driver/linux/common/ddi/media_libva_util.cpp
+++ b/media_driver/linux/common/ddi/media_libva_util.cpp
@@ -313,13 +313,8 @@
         // Default set as compression not supported, surface compression import only support from Memory Type VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2
         bMemCompEnable   = false;
         bMemCompRC       = false;
-        pitch = mediaSurface->pSurfDesc->uiPitches[0];
-        if (pitch == 0)
-        {
-            DDI_ASSERTMESSAGE("Invalid pitch value.");
-            hRes = VA_STATUS_ERROR_INVALID_PARAMETER;
-            goto finish;
-        }
+        pitch            = mediaSurface->pSurfDesc->uiPitches[0];
+        DDI_CHK_CONDITION(pitch == 0, "Invalid pich.", VA_STATUS_ERROR_INVALID_PARAMETER);
         // DRM buffer allocated by Application, No need to re-allocate new DRM buffer
         if ((mediaSurface->pSurfDesc->uiVaMemType == VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM) ||
             (mediaSurface->pSurfDesc->uiVaMemType == VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME))
@@ -485,16 +480,48 @@
         }
         else
         {
+            int32_t baseHeight = 0;
+            DDI_CHK_CONDITION(mediaSurface->pSurfDesc->uiPlanes == 0,
+                "Invalid plane number.",
+                VA_STATUS_ERROR_INVALID_PARAMETER);
+
+            if (mediaSurface->pSurfDesc->uiPlanes == 1)
+            {
+                DDI_CHK_CONDITION(mediaSurface->pSurfDesc->uiSize == 0,
+                    "Invalid Size.",
+                    VA_STATUS_ERROR_INVALID_PARAMETER);
+                baseHeight = mediaSurface->pSurfDesc->uiSize / pitch;
+            }
+            else
+            {
+                DDI_CHK_CONDITION(mediaSurface->pSurfDesc->uiOffsets[1] == 0,
+                    "Invalid offset.",
+                    VA_STATUS_ERROR_INVALID_PARAMETER);
+                baseHeight = mediaSurface->pSurfDesc->uiOffsets[1] / pitch;
+            }
             // Create GmmResourceInfo
             MOS_ZeroMemory(&gmmCustomParams, sizeof(gmmCustomParams));
             gmmCustomParams.Type          = RESOURCE_2D;
             gmmCustomParams.Format        = mediaDrvCtx->m_caps->ConvertMediaFmtToGmmFmt(format);
             gmmCustomParams.BaseWidth64   = width;
-            gmmCustomParams.BaseHeight    = height;
+            gmmCustomParams.BaseHeight    = baseHeight;
             gmmCustomParams.Pitch         = pitch;
             gmmCustomParams.Size          = mediaSurface->pSurfDesc->uiSize;
             gmmCustomParams.BaseAlignment = 4096;
             gmmCustomParams.NoOfPlanes    = mediaSurface->pSurfDesc->uiPlanes;
+            switch (tileformat)
+            {
+                case I915_TILING_Y:
+                    gmmCustomParams.Flags.Info.TiledY = true;
+                    break;
+                case I915_TILING_X:
+                    gmmCustomParams.Flags.Info.TiledX = true;
+                    break;
+                case I915_TILING_NONE:
+                default:
+                    gmmCustomParams.Flags.Info.Linear = true;
+            }
+
             switch(mediaSurface->pSurfDesc->uiPlanes)
             {
                 case 1:
@@ -506,6 +533,8 @@
                     gmmCustomParams.PlaneOffset.Y[GMM_PLANE_Y] = mediaSurface->pSurfDesc->uiOffsets[0] / pitch;
                     gmmCustomParams.PlaneOffset.X[GMM_PLANE_U] = 0;
                     gmmCustomParams.PlaneOffset.Y[GMM_PLANE_U] = mediaSurface->pSurfDesc->uiOffsets[1] / pitch;
+                    gmmCustomParams.PlaneOffset.X[GMM_PLANE_V] = 0;
+                    gmmCustomParams.PlaneOffset.Y[GMM_PLANE_V] = mediaSurface->pSurfDesc->uiOffsets[1] / pitch;
                     break;
                 case 3:
                     if (mediaSurface->format == Media_Format_YV12)
@@ -548,7 +577,7 @@
             mediaSurface->bMapped          = false;
             mediaSurface->format           = format;
             mediaSurface->iWidth           = width;
-            mediaSurface->iHeight          = mediaSurface->pSurfDesc->uiOffsets[1] / pitch;
+            mediaSurface->iHeight          = gmmResourceInfo->GetBaseHeight();
             mediaSurface->iRealHeight      = height;
             mediaSurface->iPitch           = pitch;
             mediaSurface->iRefCount        = 0;