diff --git a/camera/tests/CameraBinderTests.cpp b/camera/tests/CameraBinderTests.cpp
index 5f7f2f6..89fc033 100644
--- a/camera/tests/CameraBinderTests.cpp
+++ b/camera/tests/CameraBinderTests.cpp
@@ -548,10 +548,9 @@
                   opaqueConsumer->setDefaultBufferFormat(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED));
 
         sp<Surface> surface = opaqueConsumer->getSurface();
-
-        sp<IGraphicBufferProducer> producer = surface->getIGraphicBufferProducer();
+        ParcelableSurfaceType pSurface = flagtools::surfaceToParcelableSurfaceType(surface);
         std::string noPhysicalId;
-        OutputConfiguration output(producer, /*rotation*/ 0, noPhysicalId);
+        OutputConfiguration output(pSurface, /*rotation*/ 0, noPhysicalId);
 #else
         sp<IGraphicBufferProducer> gbProducer;
         sp<IGraphicBufferConsumer> gbConsumer;
diff --git a/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp b/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp
index 22e04fc..836bdab 100644
--- a/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp
+++ b/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp
@@ -70,8 +70,10 @@
                         int32_t surfaceSetID = mFDP->ConsumeIntegral<int32_t>();
                         bool isShared = mFDP->ConsumeBool();
                         sp<SurfaceType> surface = createSurface();
+                        ParcelableSurfaceType pSurface =
+                            flagtools::convertSurfaceTypeToParcelable(surface);
                         outputConfiguration = make_unique<OutputConfiguration>(
-                                surface, rotation, physicalCameraId, surfaceSetID, isShared);
+                                pSurface, rotation, physicalCameraId, surfaceSetID, isShared);
                     },
 
                     [&]() {
@@ -81,10 +83,12 @@
                         bool isShared = mFDP->ConsumeBool();
                         size_t surfaceSize =
                                 mFDP->ConsumeIntegralInRange<size_t>(kSizeMin, kSizeMax);
-                        vector<sp<SurfaceType>> surfaces;
+                        vector<ParcelableSurfaceType> surfaces;
                         for (size_t idx = 0; idx < surfaceSize; ++idx) {
                             sp<SurfaceType> surface = createSurface();
-                            surfaces.push_back(surface);
+                            ParcelableSurfaceType pSurface =
+                                flagtools::convertSurfaceTypeToParcelable(surface);
+                            surfaces.push_back(pSurface);
                         }
                         outputConfiguration = make_unique<OutputConfiguration>(
                                 surfaces, rotation, physicalCameraId, surfaceSetID, isShared);
@@ -115,7 +119,9 @@
                 [&]() { outputConfiguration->getSurfaces(); },
                 [&]() {
                     sp<SurfaceType> surface = createSurface();
-                    outputConfiguration->addSurface(surface);
+                    ParcelableSurfaceType pSurface =
+                        flagtools::convertSurfaceTypeToParcelable(surface);
+                    outputConfiguration->addSurface(pSurface);
                 },
                 [&]() { outputConfiguration->isMultiResolution(); },
                 [&]() { outputConfiguration->getColorSpace(); },
@@ -123,7 +129,9 @@
                 [&]() { outputConfiguration->getTimestampBase(); },
                 [&]() {
                     sp<SurfaceType> surface = createSurface();
-                    outputConfiguration->getMirrorMode(surface);
+                    ParcelableSurfaceType pSurface =
+                        flagtools::convertSurfaceTypeToParcelable(surface);
+                    outputConfiguration->getMirrorMode(pSurface);
                 },
                 [&]() { outputConfiguration->useReadoutTimestamp(); },
         });
diff --git a/camera/tests/fuzzer/camera_c2SessionConfiguration_fuzzer.cpp b/camera/tests/fuzzer/camera_c2SessionConfiguration_fuzzer.cpp
index 7cd0e59..b19ffc8 100644
--- a/camera/tests/fuzzer/camera_c2SessionConfiguration_fuzzer.cpp
+++ b/camera/tests/fuzzer/camera_c2SessionConfiguration_fuzzer.cpp
@@ -17,7 +17,12 @@
 #include <camera2/OutputConfiguration.h>
 #include <camera2/SessionConfiguration.h>
 #include <fuzzer/FuzzedDataProvider.h>
+#include <gui/Flags.h> // remove with WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+#include <gui/Surface.h>
+#else
 #include <gui/IGraphicBufferProducer.h>
+#endif
 #include <gui/Surface.h>
 #include <gui/SurfaceComposerClient.h>
 #include "camera2common.h"
@@ -53,7 +58,7 @@
         outputConfiguration = new OutputConfiguration();
         sessionConfiguration->addOutputConfiguration(*outputConfiguration);
     } else {
-        sp<IGraphicBufferProducer> iGBP = nullptr;
+        ParcelableSurfaceType pSurface;
         sp<SurfaceComposerClient> composerClient = new SurfaceComposerClient;
         sp<SurfaceControl> surfaceControl = composerClient->createSurface(
                 static_cast<String8>(fdp.ConsumeRandomLengthString().c_str()),
@@ -61,7 +66,7 @@
                 fdp.ConsumeIntegral<int32_t>(), fdp.ConsumeIntegral<int32_t>());
         if (surfaceControl) {
             sp<Surface> surface = surfaceControl->getSurface();
-            iGBP = surface->getIGraphicBufferProducer();
+            pSurface = flagtools::surfaceToParcelableSurfaceType(surface);
             surface.clear();
         }
         int32_t rotation = fdp.ConsumeIntegral<int32_t>();
@@ -69,7 +74,7 @@
         int32_t surfaceSetID = fdp.ConsumeIntegral<int32_t>();
         bool isShared = fdp.ConsumeBool();
         outputConfiguration =
-                new OutputConfiguration(iGBP, rotation, physicalCameraId, surfaceSetID, isShared);
+            new OutputConfiguration(pSurface, rotation, physicalCameraId, surfaceSetID, isShared);
         sessionConfiguration->addOutputConfiguration(*outputConfiguration);
     }
 
