diff --git a/Android.mk b/Android.mk
index e369912..32656ff 100644
--- a/Android.mk
+++ b/Android.mk
@@ -37,6 +37,7 @@
                           libstagefright_foundation \
                           libutils \
                           libv4l2_codec2_vda \
+                          libvda_c2_pixelformat \
                           libvda_c2componentstore \
 
 # -Wno-unused-parameter is needed for libchrome/base codes
diff --git a/C2VDAAdaptor.cpp b/C2VDAAdaptor.cpp
index 81470c6..2e837a9 100644
--- a/C2VDAAdaptor.cpp
+++ b/C2VDAAdaptor.cpp
@@ -18,13 +18,6 @@
 
 namespace android {
 
-constexpr SupportedPixelFormat kSupportedPixelFormats[] = {
-        // {mCrcb, mSemiplanar, mPixelFormat}
-        {false, true, HalPixelFormat::NV12},
-        {true, false, HalPixelFormat::YV12},
-        // Add more buffer formats when needed
-};
-
 C2VDAAdaptor::C2VDAAdaptor() : mNumOutputBuffers(0u) {}
 
 C2VDAAdaptor::~C2VDAAdaptor() {
@@ -145,17 +138,6 @@
     return supportedProfiles;
 }
 
-//static
-HalPixelFormat C2VDAAdaptor::ResolveBufferFormat(bool crcb, bool semiplanar) {
-    auto value = std::find_if(std::begin(kSupportedPixelFormats), std::end(kSupportedPixelFormats),
-                              [crcb, semiplanar](const struct SupportedPixelFormat& f) {
-                                  return f.mCrcb == crcb && f.mSemiplanar == semiplanar;
-                              });
-    LOG_ALWAYS_FATAL_IF(value == std::end(kSupportedPixelFormats),
-                        "Unsupported pixel format: (crcb=%d, semiplanar=%d)", crcb, semiplanar);
-    return value->mPixelFormat;
-}
-
 void C2VDAAdaptor::ProvidePictureBuffers(uint32_t requested_num_of_buffers,
                                          media::VideoPixelFormat output_format,
                                          const media::Size& dimensions) {
diff --git a/C2VDAAdaptorProxy.cpp b/C2VDAAdaptorProxy.cpp
index 5c3a990..5b1558b 100644
--- a/C2VDAAdaptorProxy.cpp
+++ b/C2VDAAdaptorProxy.cpp
@@ -30,13 +30,6 @@
 
 namespace android {
 namespace arc {
-constexpr SupportedPixelFormat kSupportedPixelFormats[] = {
-        // {mCrcb, mSemiplanar, mPixelFormat}
-        {false, true, HalPixelFormat::NV12},
-        {true, false, HalPixelFormat::YV12},
-        // Add more buffer formats when needed
-};
-
 C2VDAAdaptorProxy::C2VDAAdaptorProxy()
       : C2VDAAdaptorProxy(::arc::MojoProcessSupport::getLeakyInstance()) {}
 
@@ -177,17 +170,6 @@
     return profiles;
 }
 
-//static
-HalPixelFormat C2VDAAdaptorProxy::ResolveBufferFormat(bool crcb, bool semiplanar) {
-    auto value = std::find_if(std::begin(kSupportedPixelFormats), std::end(kSupportedPixelFormats),
-                              [crcb, semiplanar](const struct SupportedPixelFormat& f) {
-                                  return f.mCrcb == crcb && f.mSemiplanar == semiplanar;
-                              });
-    LOG_ALWAYS_FATAL_IF(value == std::end(kSupportedPixelFormats),
-                        "Unsupported pixel format: (crcb=%d, semiplanar=%d)", crcb, semiplanar);
-    return value->mPixelFormat;
-}
-
 VideoDecodeAcceleratorAdaptor::Result C2VDAAdaptorProxy::initialize(
         media::VideoCodecProfile profile, bool secureMode,
         VideoDecodeAcceleratorAdaptor::Client* client) {
diff --git a/C2VDAComponent.cpp b/C2VDAComponent.cpp
index dd48d33..65656e3 100644
--- a/C2VDAComponent.cpp
+++ b/C2VDAComponent.cpp
@@ -13,10 +13,11 @@
 
 #define __C2_GENERATE_GLOBAL_VARS__
 #include <C2VDAAllocatorStore.h>
+#include <C2VDAComponent.h>
+#include <C2VDAPixelFormat.h>
+#include <C2VDASupport.h>  // to getParamReflector from vda store
 #include <C2VdaBqBlockPool.h>
 #include <C2VdaPooledBlockPool.h>
-#include <C2VDAComponent.h>
-#include <C2VDASupport.h>  // to getParamReflector from vda store
 
 #include <videodev2_custom.h>
 
@@ -821,11 +822,7 @@
     for (uint32_t i = 0; i < passedNumPlanes; ++i) {
         ALOGV("plane %u: stride: %d, offset: %u", i, layout.planes[i].rowInc, offsets[i]);
     }
-#ifdef V4L2_CODEC2_ARC
-    info.mPixelFormat = arc::C2VDAAdaptorProxy::ResolveBufferFormat(crcb, semiplanar);
-#else
-    info.mPixelFormat = C2VDAAdaptor::ResolveBufferFormat(crcb, semiplanar);
-#endif
+    info.mPixelFormat = resolveBufferFormat(crcb, semiplanar);
     ALOGV("HAL pixel format: 0x%x", static_cast<uint32_t>(info.mPixelFormat));
 
     ::base::ScopedFD passedHandle(dup(info.mGraphicBlock->handle()->data[0]));
@@ -857,8 +854,14 @@
         return;
     }
 
-    // TODO(hiroh): resolve pixel format here.
-    android::HalPixelFormat pixelFormat = pixelFormat == android::HalPixelFormat::NV12;
+    android::HalPixelFormat pixelFormat = getPlatformPixelFormat();
+    if (pixelFormat == android::HalPixelFormat::UNKNOWN) {
+        ALOGE("Failed to get pixel format on platform.");
+        reportError(C2_CORRUPTED);
+        return;
+    }
+    CHECK(pixelFormat == android::HalPixelFormat::YV12 ||
+          pixelFormat == android::HalPixelFormat::NV12);
     ALOGV("HAL pixel format: 0x%x", static_cast<uint32_t>(pixelFormat));
 
     GraphicBlockInfo info;
diff --git a/include/C2VDAAdaptor.h b/include/C2VDAAdaptor.h
index 8f24d10..3ba85f2 100644
--- a/include/C2VDAAdaptor.h
+++ b/include/C2VDAAdaptor.h
@@ -36,8 +36,6 @@
     static media::VideoDecodeAccelerator::SupportedProfiles GetSupportedProfiles(
             uint32_t inputFormatFourcc);
 
-    static HalPixelFormat ResolveBufferFormat(bool crcb, bool semiplanar);
-
     // Implementation of the media::VideoDecodeAccelerator::Client interface.
     void ProvidePictureBuffers(uint32_t requested_num_of_buffers,
                                media::VideoPixelFormat output_format,
diff --git a/include/C2VDAAdaptorProxy.h b/include/C2VDAAdaptorProxy.h
index fbfe009..eab6882 100644
--- a/include/C2VDAAdaptorProxy.h
+++ b/include/C2VDAAdaptorProxy.h
@@ -59,7 +59,6 @@
 
     static media::VideoDecodeAccelerator::SupportedProfiles GetSupportedProfiles(
             uint32_t inputFormatFourcc);
-    static HalPixelFormat ResolveBufferFormat(bool crcb, bool semiplanar);
 
 private:
     void onConnectionError(const std::string& pipeName);
diff --git a/include/VideoDecodeAcceleratorAdaptor.h b/include/VideoDecodeAcceleratorAdaptor.h
index c9fc50b..9118467 100644
--- a/include/VideoDecodeAcceleratorAdaptor.h
+++ b/include/VideoDecodeAcceleratorAdaptor.h
@@ -22,13 +22,6 @@
     uint32_t mStride;
 };
 
-// The HAL pixel format information supported by Android flexible YUV format.
-struct SupportedPixelFormat {
-    bool mCrcb;
-    bool mSemiplanar;
-    HalPixelFormat mPixelFormat;
-};
-
 // Video decoder accelerator adaptor interface.
 // The adaptor plays the role of providing unified adaptor API functions and client callback to
 // codec component side.
