diff --git a/imagedecoder/JPEGBlitter.h b/imagedecoder/JPEGBlitter.h
index 9514b25..b9fcc08 100644
--- a/imagedecoder/JPEGBlitter.h
+++ b/imagedecoder/JPEGBlitter.h
@@ -29,7 +29,7 @@
 #ifndef JPEG_BLITTER_H
 #define JPEG_BLITTER_H
 
-#include "../videovpp/VideoVPPBase.h"
+#include <VideoVPPBase.h>
 #include "JPEGCommon.h"
 #include <utils/threads.h>
 
diff --git a/imagedecoder/JPEGCommon_Gen.h b/imagedecoder/JPEGCommon_Gen.h
index 2cc90ae..ce3bf08 100644
--- a/imagedecoder/JPEGCommon_Gen.h
+++ b/imagedecoder/JPEGCommon_Gen.h
@@ -32,10 +32,6 @@
 #include <ufo/graphics.h>
 #include <ufo/gralloc.h>
 #include "JPEGCommon.h"
-// temp workaround
-#define HAL_PIXEL_FORMAT_YCbCr_422_H_INTEL HAL_PIXEL_FORMAT_YCrCb_422_H_INTEL // 422H (YU16)
-#define HAL_PIXEL_FORMAT_IMC3 0x103 // IMC3
-#define HAL_PIXEL_FORMAT_444P 0x104 // 444P
 
 #endif
 
diff --git a/imagedecoder/JPEGDecoder_gen.cpp b/imagedecoder/JPEGDecoder_gen.cpp
index 9b5f242..8fa25a8 100644
--- a/imagedecoder/JPEGDecoder_gen.cpp
+++ b/imagedecoder/JPEGDecoder_gen.cpp
@@ -50,10 +50,6 @@
         return HAL_PIXEL_FORMAT_NV12_TILED_INTEL;
     case VA_FOURCC_RGBA:
         return HAL_PIXEL_FORMAT_RGBA_8888;
-    case VA_FOURCC_IMC3:
-        return HAL_PIXEL_FORMAT_IMC3;
-    case VA_FOURCC_444P:
-        return HAL_PIXEL_FORMAT_444P;
     case VA_FOURCC_422V:
     case VA_FOURCC_411P:
     default:
@@ -73,10 +69,6 @@
         return VA_FOURCC_NV12;
     case HAL_PIXEL_FORMAT_RGBA_8888:
         return VA_FOURCC_RGBA;
-    case HAL_PIXEL_FORMAT_444P:
-        return VA_FOURCC_444P;
-    case HAL_PIXEL_FORMAT_IMC3:
-        return VA_FOURCC_IMC3;
     default:
         return 0;
     }
@@ -149,27 +141,6 @@
 
     uint32_t fourcc = pixelFormat2Fourcc(pixel_format);
     VTRACE("enter %s, pixel_format 0x%x, fourcc %s", __FUNCTION__, pixel_format, fourcc2str(NULL, fourcc));
-    if ((fourcc != VA_FOURCC_422H) ||
-        (fourcc != VA_FOURCC_YUY2) ||
-        (fourcc != VA_FOURCC_RGBA)){
-        VASurfaceAttrib attrib;
-        attrib.type = VASurfaceAttribPixelFormat;
-        attrib.flags = VA_SURFACE_ATTRIB_SETTABLE;
-        attrib.value.type = VAGenericValueTypeInteger;
-        attrib.value.value.i = fourcc;
-        VAStatus va_status = vaCreateSurfaces(mDisplay,
-                                    fourcc2VaFormat(fourcc),
-                                    width,
-                                    height,
-                                    surf_id,
-                                    1,
-                                    &attrib,
-                                    1);
-        VTRACE("%s createSurface for %s", __FUNCTION__, fourcc2str(NULL, fourcc));
-        if (va_status != VA_STATUS_SUCCESS)
-            return JD_RESOURCE_FAILURE;
-        return JD_SUCCESS;
-    }
 
     int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
     if (err) {
