mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Camera: VTS: Fix fence fd double close
Fence fd is closed when processCaptureResult returns. In order to wait for the release fence *after* processCaptureResult returns, the fence fd needs to be duped. Test: Vendor testing Bug: 241281568 Change-Id: Ib74f9bb141802713b476a2ef48a2252125a7915d
This commit is contained in:
@@ -148,7 +148,7 @@ void CameraAidlTest::waitForReleaseFence(
|
|||||||
const native_handle_t* releaseFenceHandle = bufferAndTimestamp.buffer.releaseFence;
|
const native_handle_t* releaseFenceHandle = bufferAndTimestamp.buffer.releaseFence;
|
||||||
if (releaseFenceHandle != nullptr && releaseFenceHandle->numFds == 1 &&
|
if (releaseFenceHandle != nullptr && releaseFenceHandle->numFds == 1 &&
|
||||||
releaseFenceHandle->data[0] >= 0) {
|
releaseFenceHandle->data[0] >= 0) {
|
||||||
releaseFence = new android::Fence(releaseFenceHandle->data[0]);
|
releaseFence = new android::Fence(dup(releaseFenceHandle->data[0]));
|
||||||
}
|
}
|
||||||
if (releaseFence && releaseFence->isValid()) {
|
if (releaseFence && releaseFence->isValid()) {
|
||||||
releaseFence->wait(/*ms*/ 300);
|
releaseFence->wait(/*ms*/ 300);
|
||||||
|
|||||||
@@ -478,6 +478,20 @@ class CameraAidlTest : public ::testing::TestWithParam<std::string> {
|
|||||||
hasInputBuffer(hasInput),
|
hasInputBuffer(hasInput),
|
||||||
collectedResult(1, 10),
|
collectedResult(1, 10),
|
||||||
expectedPhysicalResults(extraPhysicalResult) {}
|
expectedPhysicalResults(extraPhysicalResult) {}
|
||||||
|
|
||||||
|
~InFlightRequest() {
|
||||||
|
for (auto& buffer : resultOutputBuffers) {
|
||||||
|
native_handle_t* acquireFenceHandle = const_cast<native_handle_t*>(
|
||||||
|
buffer.buffer.acquireFence);
|
||||||
|
native_handle_close(acquireFenceHandle);
|
||||||
|
native_handle_delete(acquireFenceHandle);
|
||||||
|
|
||||||
|
native_handle_t* releaseFenceHandle = const_cast<native_handle_t*>(
|
||||||
|
buffer.buffer.releaseFence);
|
||||||
|
native_handle_close(releaseFenceHandle);
|
||||||
|
native_handle_delete(releaseFenceHandle);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool matchDeviceName(const std::string& deviceName, const std::string& providerType,
|
static bool matchDeviceName(const std::string& deviceName, const std::string& providerType,
|
||||||
|
|||||||
@@ -428,8 +428,8 @@ bool DeviceCb::processCaptureResultLocked(
|
|||||||
bufferId,
|
bufferId,
|
||||||
outputBuffer,
|
outputBuffer,
|
||||||
buffer.status,
|
buffer.status,
|
||||||
::android::makeFromAidl(buffer.acquireFence),
|
::android::dupFromAidl(buffer.acquireFence),
|
||||||
::android::makeFromAidl(buffer.releaseFence)};
|
::android::dupFromAidl(buffer.releaseFence)};
|
||||||
streamBufferAndTimestamp.timeStamp = systemTime();
|
streamBufferAndTimestamp.timeStamp = systemTime();
|
||||||
request->resultOutputBuffers.push_back(streamBufferAndTimestamp);
|
request->resultOutputBuffers.push_back(streamBufferAndTimestamp);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user