Use view::Surface instead of IGBPs in OutputConfiguration
We are currently limiting the use of IGBPs outside of libgui to allow for
further development of bufferqueues without external breakages. More
information at go/warren-buffers.
BYPASS_IGBP_IGBC_API_REASON: this CL is part of the migration.
Bug: 342197849
Test: atest android.hardware.cts.CameraTest
Flag: com.android.graphics.libgui.flags.wb_libcameraservice
Change-Id: I308eac2a11aceff7d598f3b14cfc87dfe4a1a767
diff --git a/camera/camera2/CaptureRequest.cpp b/camera/camera2/CaptureRequest.cpp
index 071f34e..d2fcde6 100644
--- a/camera/camera2/CaptureRequest.cpp
+++ b/camera/camera2/CaptureRequest.cpp
@@ -24,6 +24,7 @@
#include <camera/StringUtils.h>
#include <binder/Parcel.h>
+#include <gui/Flags.h> // remove with WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
#include <gui/Surface.h>
#include <gui/view/Surface.h>
@@ -112,11 +113,14 @@
return err;
}
+#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+ sp<Surface> surface = surfaceShim.toSurface();
+#else
sp<Surface> surface;
if (surfaceShim.graphicBufferProducer != NULL) {
surface = new Surface(surfaceShim.graphicBufferProducer);
}
-
+#endif
mSurfaceList.push_back(surface);
}
@@ -206,9 +210,13 @@
parcel->writeString16(String16("android.view.Surface"));
// Surface.writeToParcel
+#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+ view::Surface surfaceShim = view::Surface::fromSurface(mSurfaceList[i]);
+#else
view::Surface surfaceShim;
surfaceShim.name = String16("unknown_name");
surfaceShim.graphicBufferProducer = mSurfaceList[i]->getIGraphicBufferProducer();
+#endif
if ((err = surfaceShim.writeToParcel(parcel)) != OK) {
ALOGE("%s: Failed to write output target Surface %d to parcel: %s (%d)",
__FUNCTION__, i, strerror(-err), err);
diff --git a/camera/camera2/OutputConfiguration.cpp b/camera/camera2/OutputConfiguration.cpp
index a89d7ca..f67214b 100644
--- a/camera/camera2/OutputConfiguration.cpp
+++ b/camera/camera2/OutputConfiguration.cpp
@@ -37,9 +37,8 @@
const int OutputConfiguration::ROTATION_0 = 0;
const int OutputConfiguration::INVALID_SET_ID = -1;
-const std::vector<sp<IGraphicBufferProducer>>&
- OutputConfiguration::getGraphicBufferProducers() const {
- return mGbps;
+const std::vector<ParcelableSurfaceType>& OutputConfiguration::getSurfaces() const {
+ return mSurfaces;
}
int OutputConfiguration::getRotation() const {
@@ -102,24 +101,23 @@
return mMirrorMode;
}
-int OutputConfiguration::getMirrorMode(sp<IGraphicBufferProducer> surface) const {
+int OutputConfiguration::getMirrorMode(ParcelableSurfaceType surface) const {
if (!flags::mirror_mode_shared_surfaces()) {
return mMirrorMode;
}
- if (mGbps.size() != mMirrorModeForProducers.size()) {
- ALOGE("%s: mGbps size doesn't match mMirrorModeForProducers: %zu vs %zu",
- __FUNCTION__, mGbps.size(), mMirrorModeForProducers.size());
+ if (mSurfaces.size() != mMirrorModeForProducers.size()) {
+ ALOGE("%s: mSurfaces size doesn't match mMirrorModeForProducers: %zu vs %zu",
+ __FUNCTION__, mSurfaces.size(), mMirrorModeForProducers.size());
return mMirrorMode;
}
// Use per-producer mirror mode if available.
- for (size_t i = 0; i < mGbps.size(); i++) {
- if (mGbps[i] == surface) {
+ for (size_t i = 0; i < mSurfaces.size(); i++) {
+ if (mSurfaces[i] == surface) {
return mMirrorModeForProducers[i];
}
}
-
// For surface that doesn't belong to this output configuration, use
// mMirrorMode as default.
ALOGW("%s: Surface doesn't belong to this OutputConfiguration!", __FUNCTION__);
@@ -144,9 +142,9 @@
bool OutputConfiguration::isComplete() const {
return !((mSurfaceType == SURFACE_TYPE_MEDIA_RECORDER ||
- mSurfaceType == SURFACE_TYPE_MEDIA_CODEC ||
- mSurfaceType == SURFACE_TYPE_IMAGE_READER) &&
- mGbps.empty());
+ mSurfaceType == SURFACE_TYPE_MEDIA_CODEC ||
+ mSurfaceType == SURFACE_TYPE_IMAGE_READER) &&
+ mSurfaces.empty());
}
OutputConfiguration::OutputConfiguration() :
@@ -348,7 +346,7 @@
ALOGV("%s: OutputConfiguration: %p, name %s", __FUNCTION__,
surface.graphicBufferProducer.get(),
toString8(surface.name).c_str());
- mGbps.push_back(surface.graphicBufferProducer);
+ mSurfaces.push_back(flagtools::toParcelableSurfaceType(surface));
}
mSensorPixelModesUsed = std::move(sensorPixelModesUsed);
@@ -369,10 +367,10 @@
return err;
}
-OutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
+OutputConfiguration::OutputConfiguration(ParcelableSurfaceType& surface, int rotation,
const std::string& physicalId,
int surfaceSetID, bool isShared) {
- mGbps.push_back(gbp);
+ mSurfaces.push_back(surface);
mRotation = rotation;
mSurfaceSetID = surfaceSetID;
mIsDeferred = false;
@@ -392,17 +390,17 @@
}
OutputConfiguration::OutputConfiguration(
- const std::vector<sp<IGraphicBufferProducer>>& gbps,
+ const std::vector<ParcelableSurfaceType>& surfaces,
int rotation, const std::string& physicalCameraId, int surfaceSetID, int surfaceType,
int width, int height, bool isShared)
- : mGbps(gbps), mRotation(rotation), mSurfaceSetID(surfaceSetID), mSurfaceType(surfaceType),
- mWidth(width), mHeight(height), mIsDeferred(false), mIsShared(isShared),
- mPhysicalCameraId(physicalCameraId), mIsMultiResolution(false),
+ : mSurfaces(surfaces), mRotation(rotation), mSurfaceSetID(surfaceSetID),
+ mSurfaceType(surfaceType), mWidth(width), mHeight(height), mIsDeferred(false),
+ mIsShared(isShared), mPhysicalCameraId(physicalCameraId), mIsMultiResolution(false),
mDynamicRangeProfile(ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD),
mColorSpace(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED),
mStreamUseCase(ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT),
mTimestampBase(TIMESTAMP_BASE_DEFAULT),
- mMirrorMode(MIRROR_MODE_AUTO), mMirrorModeForProducers(gbps.size(), mMirrorMode),
+ mMirrorMode(MIRROR_MODE_AUTO), mMirrorModeForProducers(surfaces.size(), mMirrorMode),
mUseReadoutTimestamp(false), mFormat(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED),
mDataspace(0), mUsage(0) { }
@@ -432,14 +430,18 @@
err = parcel->writeInt32(mIsShared ? 1 : 0);
if (err != OK) return err;
+#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+ err = parcel->writeParcelableVector(mSurfaces);
+#else
std::vector<view::Surface> surfaceShims;
- for (auto& gbp : mGbps) {
+ for (auto& gbp : mSurfaces) {
view::Surface surfaceShim;
surfaceShim.name = String16("unknown_name"); // name of surface
surfaceShim.graphicBufferProducer = gbp;
surfaceShims.push_back(surfaceShim);
}
err = parcel->writeParcelableVector(surfaceShims);
+#endif
if (err != OK) return err;
String16 physicalCameraId = toString16(mPhysicalCameraId);
@@ -513,10 +515,9 @@
return false;
}
-bool OutputConfiguration::gbpsEqual(const OutputConfiguration& other) const {
- const std::vector<sp<IGraphicBufferProducer> >& otherGbps =
- other.getGraphicBufferProducers();
- return simpleVectorsEqual(otherGbps, mGbps);
+bool OutputConfiguration::surfacesEqual(const OutputConfiguration& other) const {
+ const std::vector<ParcelableSurfaceType>& otherSurfaces = other.getSurfaces();
+ return simpleVectorsEqual(otherSurfaces, mSurfaces);
}
bool OutputConfiguration::sensorPixelModesUsedEqual(const OutputConfiguration& other) const {
@@ -527,7 +528,6 @@
bool OutputConfiguration::mirrorModesEqual(const OutputConfiguration& other) const {
const std::vector<int>& otherMirrorModes = other.getMirrorModes();
return simpleVectorsEqual(otherMirrorModes, mMirrorModeForProducers);
-
}
bool OutputConfiguration::sensorPixelModesUsedLessThan(const OutputConfiguration& other) const {
@@ -540,17 +540,16 @@
return simpleVectorsLessThan(mMirrorModeForProducers, otherMirrorModes);
}
-bool OutputConfiguration::gbpsLessThan(const OutputConfiguration& other) const {
- const std::vector<sp<IGraphicBufferProducer> >& otherGbps =
- other.getGraphicBufferProducers();
+bool OutputConfiguration::surfacesLessThan(const OutputConfiguration& other) const {
+ const std::vector<ParcelableSurfaceType>& otherSurfaces = other.getSurfaces();
- if (mGbps.size() != otherGbps.size()) {
- return mGbps.size() < otherGbps.size();
+ if (mSurfaces.size() != otherSurfaces.size()) {
+ return mSurfaces.size() < otherSurfaces.size();
}
- for (size_t i = 0; i < mGbps.size(); i++) {
- if (mGbps[i] != otherGbps[i]) {
- return mGbps[i] < otherGbps[i];
+ for (size_t i = 0; i < mSurfaces.size(); i++) {
+ if (mSurfaces[i] != otherSurfaces[i]) {
+ return mSurfaces[i] < otherSurfaces[i];
}
}
diff --git a/camera/include/camera/android/hardware/ICamera.h b/camera/include/camera/android/hardware/ICamera.h
index eb887fb..3c1670a 100644
--- a/camera/include/camera/android/hardware/ICamera.h
+++ b/camera/include/camera/android/hardware/ICamera.h
@@ -34,8 +34,13 @@
class ICameraClient;
-class ICamera: public android::IInterface
-{
+#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+typedef Surface ProducerType;
+#else
+typedef IGraphicBufferProducer ProducerType;
+#endif
+
+class ICamera : public android::IInterface {
/**
* Keep up-to-date with ICamera.aidl in frameworks/base
*/
diff --git a/camera/include/camera/camera2/OutputConfiguration.h b/camera/include/camera/camera2/OutputConfiguration.h
index 671d065..13bedb3 100644
--- a/camera/include/camera/camera2/OutputConfiguration.h
+++ b/camera/include/camera/camera2/OutputConfiguration.h
@@ -19,7 +19,12 @@
#include <string>
+#include <gui/Flags.h> // remove with WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+#include <gui/view/Surface.h>
+#else
#include <gui/IGraphicBufferProducer.h>
+#endif
#include <binder/Parcelable.h>
namespace android {
@@ -59,7 +64,7 @@
MIRROR_MODE_V = 3,
};
- const std::vector<sp<IGraphicBufferProducer>>& getGraphicBufferProducers() const;
+ const std::vector<ParcelableSurfaceType>& getSurfaces() const;
int getRotation() const;
int getSurfaceSetID() const;
int getSurfaceType() const;
@@ -73,7 +78,7 @@
bool isMultiResolution() const;
int64_t getStreamUseCase() const;
int getTimestampBase() const;
- int getMirrorMode(sp<IGraphicBufferProducer> surface) const;
+ int getMirrorMode(ParcelableSurfaceType surface) const;
int getMirrorMode() const;
bool useReadoutTimestamp() const;
int getFormat() const;
@@ -100,11 +105,11 @@
// getSurfaceSetID will be INVALID_SET_ID if error occurred
OutputConfiguration(const android::Parcel& parcel);
- OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
+ OutputConfiguration(ParcelableSurfaceType& surface, int rotation,
const std::string& physicalCameraId,
int surfaceSetID = INVALID_SET_ID, bool isShared = false);
- OutputConfiguration(const std::vector<sp<IGraphicBufferProducer>>& gbps,
+ OutputConfiguration(const std::vector<ParcelableSurfaceType>& surfaces,
int rotation, const std::string& physicalCameraId,
int surfaceSetID = INVALID_SET_ID,
int surfaceType = SURFACE_TYPE_UNKNOWN, int width = 0,
@@ -121,7 +126,7 @@
mHeight == other.mHeight &&
mIsDeferred == other.mIsDeferred &&
mIsShared == other.mIsShared &&
- gbpsEqual(other) &&
+ surfacesEqual(other) &&
mPhysicalCameraId == other.mPhysicalCameraId &&
mIsMultiResolution == other.mIsMultiResolution &&
sensorPixelModesUsedEqual(other) &&
@@ -201,18 +206,21 @@
if (mUsage != other.mUsage) {
return mUsage < other.mUsage;
}
- return gbpsLessThan(other);
+ return surfacesLessThan(other);
}
bool operator > (const OutputConfiguration& other) const {
return (*this != other && !(*this < other));
}
- bool gbpsEqual(const OutputConfiguration& other) const;
+ bool surfacesEqual(const OutputConfiguration& other) const;
bool sensorPixelModesUsedEqual(const OutputConfiguration& other) const;
bool sensorPixelModesUsedLessThan(const OutputConfiguration& other) const;
- bool gbpsLessThan(const OutputConfiguration& other) const;
- void addGraphicProducer(sp<IGraphicBufferProducer> gbp) {mGbps.push_back(gbp);}
+ bool surfacesLessThan(const OutputConfiguration& other) const;
+ void addSurface(ParcelableSurfaceType surface) { mSurfaces.push_back(surface); }
+#if not WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+ void addGraphicProducer(sp<IGraphicBufferProducer> gbp) {addSurface(gbp);}
+#endif
bool mirrorModesEqual(const OutputConfiguration& other) const;
bool mirrorModesLessThan(const OutputConfiguration& other) const;
const std::vector<int32_t>& getMirrorModes() const {return mMirrorModeForProducers;}
@@ -239,7 +247,7 @@
}
private:
- std::vector<sp<IGraphicBufferProducer>> mGbps;
+ std::vector<ParcelableSurfaceType> mSurfaces;
int mRotation;
int mSurfaceSetID;
int mSurfaceType;
diff --git a/camera/ndk/impl/ACameraDevice.cpp b/camera/ndk/impl/ACameraDevice.cpp
index aed740f..9db13ad 100644
--- a/camera/ndk/impl/ACameraDevice.cpp
+++ b/camera/ndk/impl/ACameraDevice.cpp
@@ -231,25 +231,27 @@
SessionConfiguration sessionConfiguration(0 /*inputWidth*/, 0 /*inputHeight*/,
-1 /*inputFormat*/, CAMERA3_STREAM_CONFIGURATION_NORMAL_MODE);
for (const auto& output : sessionOutputContainer->mOutputs) {
- sp<IGraphicBufferProducer> iGBP(nullptr);
- ret = getIGBPfromAnw(output.mWindow, iGBP);
+ sp<SurfaceType> surface(nullptr);
+ ret = getSurfacefromAnw(output.mWindow, surface);
if (ret != ACAMERA_OK) {
ALOGE("Camera device %s failed to extract graphic producer from native window",
getId());
return ret;
}
- OutputConfiguration outConfig(iGBP, output.mRotation, output.mPhysicalCameraId,
+ ParcelableSurfaceType pSurface = flagtools::convertSurfaceTypeToParcelable(surface);
+ OutputConfiguration outConfig(pSurface, output.mRotation, output.mPhysicalCameraId,
OutputConfiguration::INVALID_SET_ID, true);
for (auto& anw : output.mSharedWindows) {
- ret = getIGBPfromAnw(anw, iGBP);
+ ret = getSurfacefromAnw(anw, surface);
if (ret != ACAMERA_OK) {
ALOGE("Camera device %s failed to extract graphic producer from native window",
getId());
return ret;
}
- outConfig.addGraphicProducer(iGBP);
+ pSurface = flagtools::convertSurfaceTypeToParcelable(surface);
+ outConfig.addSurface(pSurface);
}
sessionConfiguration.addOutputConfiguration(outConfig);
@@ -295,25 +297,27 @@
return ACAMERA_ERROR_INVALID_PARAMETER;
}
- sp<IGraphicBufferProducer> iGBP(nullptr);
- ret = getIGBPfromAnw(output->mWindow, iGBP);
+ sp<SurfaceType> surface(nullptr);
+ ret = getSurfacefromAnw(output->mWindow, surface);
if (ret != ACAMERA_OK) {
ALOGE("Camera device %s failed to extract graphic producer from native window",
getId());
return ret;
}
- OutputConfiguration outConfig(iGBP, output->mRotation, output->mPhysicalCameraId,
- OutputConfiguration::INVALID_SET_ID, true);
+ ParcelableSurfaceType pSurface = flagtools::convertSurfaceTypeToParcelable(surface);
+ OutputConfiguration outConfig(pSurface, output->mRotation, output->mPhysicalCameraId,
+ OutputConfiguration::INVALID_SET_ID, true);
for (auto& anw : output->mSharedWindows) {
- ret = getIGBPfromAnw(anw, iGBP);
+ ret = getSurfacefromAnw(anw, surface);
if (ret != ACAMERA_OK) {
ALOGE("Camera device %s failed to extract graphic producer from native window",
getId());
return ret;
}
- outConfig.addGraphicProducer(iGBP);
+ pSurface = flagtools::convertSurfaceTypeToParcelable(surface);
+ outConfig.addSurface(pSurface);
}
auto remoteRet = mRemote->updateOutputConfiguration(streamId, outConfig);
@@ -427,9 +431,9 @@
for (const auto& kvPair : mConfiguredOutputs) {
int streamId = kvPair.first;
const OutputConfiguration& outConfig = kvPair.second.second;
- const auto& gbps = outConfig.getGraphicBufferProducers();
- for (int surfaceId = 0; surfaceId < (int) gbps.size(); surfaceId++) {
- if (gbps[surfaceId] == surface->getIGraphicBufferProducer()) {
+ const auto& surfaces = outConfig.getSurfaces();
+ for (int surfaceId = 0; surfaceId < (int)surfaces.size(); surfaceId++) {
+ if (surfaces[surfaceId] == flagtools::surfaceToSurfaceType(surface)) {
found = true;
req->mStreamIdxList.push_back(streamId);
req->mSurfaceIdxList.push_back(surfaceId);
@@ -634,16 +638,13 @@
return ACAMERA_OK;
}
-camera_status_t
-CameraDevice::getIGBPfromAnw(
- ANativeWindow* anw,
- sp<IGraphicBufferProducer>& out) {
+camera_status_t CameraDevice::getSurfacefromAnw(ANativeWindow* anw, sp<SurfaceType>& out) {
sp<Surface> surface;
camera_status_t ret = getSurfaceFromANativeWindow(anw, surface);
if (ret != ACAMERA_OK) {
return ret;
}
- out = surface->getIGraphicBufferProducer();
+ out = flagtools::surfaceToSurfaceType(surface);
return ACAMERA_OK;
}
@@ -681,14 +682,16 @@
std::set<std::pair<ANativeWindow*, OutputConfiguration>> outputSet;
for (const auto& outConfig : outputs->mOutputs) {
ANativeWindow* anw = outConfig.mWindow;
- sp<IGraphicBufferProducer> iGBP(nullptr);
- ret = getIGBPfromAnw(anw, iGBP);
+ sp<SurfaceType> surface(nullptr);
+ ret = getSurfacefromAnw(anw, surface);
if (ret != ACAMERA_OK) {
return ret;
}
+ ParcelableSurfaceType pSurface = flagtools::convertSurfaceTypeToParcelable(surface);
outputSet.insert(std::make_pair(
- anw, OutputConfiguration(iGBP, outConfig.mRotation, outConfig.mPhysicalCameraId,
- OutputConfiguration::INVALID_SET_ID, outConfig.mIsShared)));
+ anw,
+ OutputConfiguration(pSurface, outConfig.mRotation, outConfig.mPhysicalCameraId,
+ OutputConfiguration::INVALID_SET_ID, outConfig.mIsShared)));
}
auto addSet = outputSet;
std::vector<int> deleteList;
@@ -885,10 +888,14 @@
return;
}
- const auto& gbps = outputPairIt->second.second.getGraphicBufferProducers();
- for (const auto& outGbp : gbps) {
+ const auto& outSurfaces = outputPairIt->second.second.getSurfaces();
+ for (const auto& outSurface : outSurfaces) {
for (const auto& surface : request->mSurfaceList) {
- if (surface->getIGraphicBufferProducer() == outGbp) {
+ if ( outSurface == surface
+#if not WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
+ ->getIGraphicBufferProducer()
+#endif
+ ) {
ANativeWindow* anw = static_cast<ANativeWindow*>(surface.get());
ALOGV("Camera %s Lost output buffer for ANW %p frame %" PRId64,
getId(), anw, frameNumber);
diff --git a/camera/ndk/impl/ACameraDevice.h b/camera/ndk/impl/ACameraDevice.h
index d3aed4b..930c0a7 100644
--- a/camera/ndk/impl/ACameraDevice.h
+++ b/camera/ndk/impl/ACameraDevice.h
@@ -38,8 +38,9 @@
#include <camera/camera2/SessionConfiguration.h>
#include <camera/camera2/CaptureRequest.h>
-#include <camera/NdkCameraManager.h>
#include <camera/NdkCameraCaptureSession.h>
+#include <camera/NdkCameraManager.h>
+#include <gui/Flags.h> // remove with WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
#include "ACameraMetadata.h"
@@ -178,8 +179,10 @@
// Input message will be posted and cleared after this returns
void postSessionMsgAndCleanup(sp<AMessage>& msg);
- static camera_status_t getIGBPfromAnw(
- ANativeWindow* anw, sp<IGraphicBufferProducer>& out);
+ // Only used when WB_LIBCAMERASERVICE_WITH_DEPENDENCIES is active
+ static ParcelableSurfaceType convertSurfaceTypeToView(sp<SurfaceType> surface);
+
+ static camera_status_t getSurfacefromAnw(ANativeWindow* anw, sp<SurfaceType>& out);
static camera_status_t getSurfaceFromANativeWindow(
ANativeWindow* anw, sp<Surface>& out);
diff --git a/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp b/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp
index b6fa817..22e04fc 100644
--- a/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp
+++ b/camera/tests/fuzzer/camera_c2OutputConfiguration_fuzzer.cpp
@@ -19,6 +19,7 @@
#include <fuzzer/FuzzedDataProvider.h>
#include <gui/IGraphicBufferProducer.h>
#include <gui/Surface.h>
+#include <gui/Flags.h> // remove with WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
#include <gui/SurfaceComposerClient.h>
#include "camera2common.h"
@@ -37,11 +38,11 @@
private:
void invokeC2OutputConfigFuzzer();
unique_ptr<OutputConfiguration> getC2OutputConfig();
- sp<IGraphicBufferProducer> createIGraphicBufferProducer();
+ sp<SurfaceType> createSurface();
FuzzedDataProvider* mFDP = nullptr;
};
-sp<IGraphicBufferProducer> C2OutputConfigurationFuzzer::createIGraphicBufferProducer() {
+sp<SurfaceType> C2OutputConfigurationFuzzer::createSurface() {
sp<SurfaceComposerClient> composerClient = new SurfaceComposerClient;
sp<SurfaceControl> surfaceControl = composerClient->createSurface(
static_cast<String8>(mFDP->ConsumeRandomLengthString(kMaxBytes).c_str()) /* name */,
@@ -51,10 +52,9 @@
mFDP->ConsumeIntegral<int32_t>() /* flags */);
if (surfaceControl) {
sp<Surface> surface = surfaceControl->getSurface();
- return surface->getIGraphicBufferProducer();
+ return flagtools::surfaceToSurfaceType(surface);
} else {
- sp<IGraphicBufferProducer> gbp;
- return gbp;
+ return nullptr;
}
}
@@ -69,9 +69,9 @@
string physicalCameraId = mFDP->ConsumeRandomLengthString(kMaxBytes);
int32_t surfaceSetID = mFDP->ConsumeIntegral<int32_t>();
bool isShared = mFDP->ConsumeBool();
- sp<IGraphicBufferProducer> iGBP = createIGraphicBufferProducer();
+ sp<SurfaceType> surface = createSurface();
outputConfiguration = make_unique<OutputConfiguration>(
- iGBP, rotation, physicalCameraId, surfaceSetID, isShared);
+ surface, rotation, physicalCameraId, surfaceSetID, isShared);
},
[&]() {
@@ -79,14 +79,15 @@
string physicalCameraId = mFDP->ConsumeRandomLengthString(kMaxBytes);
int32_t surfaceSetID = mFDP->ConsumeIntegral<int32_t>();
bool isShared = mFDP->ConsumeBool();
- size_t iGBPSize = mFDP->ConsumeIntegralInRange<size_t>(kSizeMin, kSizeMax);
- vector<sp<IGraphicBufferProducer>> iGBPs;
- for (size_t idx = 0; idx < iGBPSize; ++idx) {
- sp<IGraphicBufferProducer> iGBP = createIGraphicBufferProducer();
- iGBPs.push_back(iGBP);
+ size_t surfaceSize =
+ mFDP->ConsumeIntegralInRange<size_t>(kSizeMin, kSizeMax);
+ vector<sp<SurfaceType>> surfaces;
+ for (size_t idx = 0; idx < surfaceSize; ++idx) {
+ sp<SurfaceType> surface = createSurface();
+ surfaces.push_back(surface);
}
outputConfiguration = make_unique<OutputConfiguration>(
- iGBPs, rotation, physicalCameraId, surfaceSetID, isShared);
+ surfaces, rotation, physicalCameraId, surfaceSetID, isShared);
},
});
selectOutputConfigurationConstructor();
@@ -107,22 +108,22 @@
[&]() { outputConfiguration->isDeferred(); },
[&]() { outputConfiguration->isShared(); },
[&]() { outputConfiguration->getPhysicalCameraId(); },
- [&]() { outputConfiguration->gbpsEqual(*outputConfiguration2); },
+ [&]() { outputConfiguration->surfacesEqual(*outputConfiguration2); },
[&]() { outputConfiguration->sensorPixelModesUsedEqual(*outputConfiguration2); },
- [&]() { outputConfiguration->gbpsLessThan(*outputConfiguration2); },
+ [&]() { outputConfiguration->surfacesLessThan(*outputConfiguration2); },
[&]() { outputConfiguration->sensorPixelModesUsedLessThan(*outputConfiguration2); },
- [&]() { outputConfiguration->getGraphicBufferProducers(); },
+ [&]() { outputConfiguration->getSurfaces(); },
[&]() {
- sp<IGraphicBufferProducer> gbp = createIGraphicBufferProducer();
- outputConfiguration->addGraphicProducer(gbp);
+ sp<SurfaceType> surface = createSurface();
+ outputConfiguration->addSurface(surface);
},
[&]() { outputConfiguration->isMultiResolution(); },
[&]() { outputConfiguration->getColorSpace(); },
[&]() { outputConfiguration->getStreamUseCase(); },
[&]() { outputConfiguration->getTimestampBase(); },
[&]() {
- sp<IGraphicBufferProducer> gbp = createIGraphicBufferProducer();
- outputConfiguration->getMirrorMode(gbp);
+ sp<SurfaceType> surface = createSurface();
+ outputConfiguration->getMirrorMode(surface);
},
[&]() { outputConfiguration->useReadoutTimestamp(); },
});