diff options
| author | 2019-04-25 03:44:52 -0700 | |
|---|---|---|
| committer | 2019-05-07 14:27:18 +0000 | |
| commit | 23399ac7ee9ae64c52462783e8375885009ac058 (patch) | |
| tree | 4667e610428992d32e91aa7de42167b2d7c14b7c | |
| parent | d076fdd546ea146e180061975ea820e4387bc44a (diff) | |
Zero-initialize HIDL structs before passing
Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small
(only existing failures/flakes)
Bug: 131267328
Bug: 131356202
Change-Id: I91e6e0c692d470f4d3a713068545cedf5ae925a7
| -rw-r--r-- | libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp | 4 | ||||
| -rw-r--r-- | libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp | 96 | ||||
| -rw-r--r-- | libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp | 106 |
3 files changed, 103 insertions, 103 deletions
diff --git a/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp b/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp index e64ba9bcdd..cee1b811a4 100644 --- a/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp +++ b/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp @@ -1061,7 +1061,7 @@ status_t H2BGraphicBufferProducer::detachNextBuffer( status_t H2BGraphicBufferProducer::attachBuffer( int* outSlot, const sp<GraphicBuffer>& buffer) { - AnwBuffer tBuffer; + AnwBuffer tBuffer{}; wrapAs(&tBuffer, *buffer); status_t fnStatus; status_t transStatus = toStatusT(mBase->attachBuffer(tBuffer, @@ -1076,7 +1076,7 @@ status_t H2BGraphicBufferProducer::queueBuffer( int slot, const QueueBufferInput& input, QueueBufferOutput* output) { - HGraphicBufferProducer::QueueBufferInput tInput; + HGraphicBufferProducer::QueueBufferInput tInput{}; native_handle_t* nh; if (!wrapAs(&tInput, &nh, input)) { ALOGE("H2BGraphicBufferProducer::queueBuffer - " diff --git a/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp b/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp index e0395939e9..e891ec581e 100644 --- a/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp +++ b/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp @@ -15,7 +15,7 @@ */ //#define LOG_NDEBUG 0 -#define LOG_TAG "H2BGraphicBufferProducer@2.0" +#define LOG_TAG "B2HGraphicBufferProducer@2.0" #include <android-base/logging.h> @@ -30,13 +30,38 @@ #include <vndk/hardware_buffer.h> namespace android { - namespace hardware { namespace graphics { namespace bufferqueue { namespace V2_0 { namespace utils { +namespace /* unnamed */ { + +using BQueueBufferInput = ::android:: + IGraphicBufferProducer::QueueBufferInput; +using HQueueBufferInput = ::android::hardware::graphics::bufferqueue::V2_0:: + IGraphicBufferProducer::QueueBufferInput; +using BQueueBufferOutput = ::android:: + IGraphicBufferProducer::QueueBufferOutput; +using HQueueBufferOutput = ::android::hardware::graphics::bufferqueue::V2_0:: + IGraphicBufferProducer::QueueBufferOutput; + +using ::android::hardware::graphics::bufferqueue::V2_0::utils::b2h; +using ::android::hardware::graphics::bufferqueue::V2_0::utils::h2b; + +bool b2h(BQueueBufferOutput const& from, HQueueBufferOutput* to) { + to->width = from.width; + to->height = from.height; + to->transformHint = static_cast<int32_t>(from.transformHint); + to->numPendingBuffers = from.numPendingBuffers; + to->nextFrameNumber = from.nextFrameNumber; + to->bufferReplaced = from.bufferReplaced; + return true; +} + +} // unnamed namespace + // B2HGraphicBufferProducer // ======================== @@ -161,11 +186,7 @@ Return<void> B2HGraphicBufferProducer::queueBuffer( int32_t slot, QueueBufferInput const& hInput, queueBuffer_cb _hidl_cb) { - using HOutput = QueueBufferOutput; - using BInput = BGraphicBufferProducer::QueueBufferInput; - using BOutput = BGraphicBufferProducer::QueueBufferOutput; - - BInput bInput{ + BQueueBufferInput bInput{ hInput.timestamp, hInput.isAutoTimestamp, static_cast<android_dataspace>(hInput.dataSpace), @@ -178,35 +199,32 @@ Return<void> B2HGraphicBufferProducer::queueBuffer( // Convert crop. if (!h2b(hInput.crop, &bInput.crop)) { - _hidl_cb(HStatus::UNKNOWN_ERROR, HOutput{}); + _hidl_cb(HStatus::UNKNOWN_ERROR, QueueBufferOutput{}); return {}; } // Convert surfaceDamage. if (!h2b(hInput.surfaceDamage, &bInput.surfaceDamage)) { - _hidl_cb(HStatus::UNKNOWN_ERROR, HOutput{}); + _hidl_cb(HStatus::UNKNOWN_ERROR, QueueBufferOutput{}); return {}; } // Convert fence. if (!h2b(hInput.fence, &bInput.fence)) { - _hidl_cb(HStatus::UNKNOWN_ERROR, HOutput{}); + _hidl_cb(HStatus::UNKNOWN_ERROR, QueueBufferOutput{}); return {}; } - BOutput bOutput{}; + BQueueBufferOutput bOutput{}; HStatus hStatus{}; - bool converted = b2h( - mBase->queueBuffer(static_cast<int>(slot), bInput, &bOutput), - &hStatus); + QueueBufferOutput hOutput{}; + bool converted = + b2h( + mBase->queueBuffer(static_cast<int>(slot), bInput, &bOutput), + &hStatus) && + b2h(bOutput, &hOutput); - _hidl_cb(converted ? hStatus : HStatus::UNKNOWN_ERROR, - HOutput{bOutput.width, - bOutput.height, - static_cast<int32_t>(bOutput.transformHint), - bOutput.numPendingBuffers, - bOutput.nextFrameNumber, - bOutput.bufferReplaced}); + _hidl_cb(converted ? hStatus : HStatus::UNKNOWN_ERROR, hOutput); return {}; } @@ -236,33 +254,23 @@ Return<void> B2HGraphicBufferProducer::connect( HConnectionType hConnectionType, bool producerControlledByApp, connect_cb _hidl_cb) { - using BOutput = BGraphicBufferProducer::QueueBufferOutput; - using HOutput = HGraphicBufferProducer::QueueBufferOutput; sp<BProducerListener> bListener = new H2BProducerListener(hListener); - if (!bListener) { - _hidl_cb(HStatus::UNKNOWN_ERROR, HOutput{}); + int bConnectionType{}; + if (!bListener || !h2b(hConnectionType, &bConnectionType)) { + _hidl_cb(HStatus::UNKNOWN_ERROR, QueueBufferOutput{}); return {}; } - int bConnectionType; - if (!h2b(hConnectionType, &bConnectionType)) { - _hidl_cb(HStatus::UNKNOWN_ERROR, HOutput{}); - return {}; - } - BOutput bOutput{}; + BQueueBufferOutput bOutput{}; HStatus hStatus{}; - bool converted = b2h( - mBase->connect(bListener, - bConnectionType, - producerControlledByApp, - &bOutput), - &hStatus); - _hidl_cb(converted ? hStatus : HStatus::UNKNOWN_ERROR, - HOutput{bOutput.width, - bOutput.height, - static_cast<int32_t>(bOutput.transformHint), - bOutput.numPendingBuffers, - bOutput.nextFrameNumber, - bOutput.bufferReplaced}); + QueueBufferOutput hOutput{}; + bool converted = + b2h(mBase->connect(bListener, + bConnectionType, + producerControlledByApp, + &bOutput), + &hStatus) && + b2h(bOutput, &hOutput); + _hidl_cb(converted ? hStatus : HStatus::UNKNOWN_ERROR, hOutput); return {}; } diff --git a/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp b/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp index 1023ef108a..2f5b73ccbb 100644 --- a/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp +++ b/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp @@ -29,13 +29,54 @@ #include <vndk/hardware_buffer.h> namespace android { - namespace hardware { namespace graphics { namespace bufferqueue { namespace V2_0 { namespace utils { +namespace /* unnamed */ { + +using BQueueBufferInput = ::android:: + IGraphicBufferProducer::QueueBufferInput; +using HQueueBufferInput = ::android::hardware::graphics::bufferqueue::V2_0:: + IGraphicBufferProducer::QueueBufferInput; +using BQueueBufferOutput = ::android:: + IGraphicBufferProducer::QueueBufferOutput; +using HQueueBufferOutput = ::android::hardware::graphics::bufferqueue::V2_0:: + IGraphicBufferProducer::QueueBufferOutput; + +using ::android::hardware::graphics::bufferqueue::V2_0::utils::b2h; +using ::android::hardware::graphics::bufferqueue::V2_0::utils::h2b; + +bool b2h(BQueueBufferInput const& from, HQueueBufferInput* to, + HFenceWrapper* hFenceWrapper) { + to->timestamp = from.timestamp; + to->isAutoTimestamp = static_cast<bool>(from.isAutoTimestamp); + to->dataSpace = static_cast<int32_t>(from.dataSpace); + to->transform = static_cast<int32_t>(from.transform); + to->stickyTransform = static_cast<int32_t>(from.stickyTransform); + if (!b2h(from.crop, &to->crop) || + !b2h(from.surfaceDamage, &to->surfaceDamage) || + !b2h(from.fence, hFenceWrapper)) { + return false; + } + to->fence = hFenceWrapper->getHandle(); + return true; +} + +bool h2b(HQueueBufferOutput const& from, BQueueBufferOutput* to) { + to->width = from.width; + to->height = from.height; + to->transformHint = static_cast<uint32_t>(from.transformHint); + to->numPendingBuffers = from.numPendingBuffers; + to->nextFrameNumber = from.nextFrameNumber; + to->bufferReplaced = from.bufferReplaced; + return true; +} + +} // unnamed namespace + // H2BGraphicBufferProducer // ======================== @@ -209,47 +250,13 @@ status_t H2BGraphicBufferProducer::queueBuffer( int slot, QueueBufferInput const& input, QueueBufferOutput* output) { - HRect hCrop{}; - (void)b2h(input.crop, &hCrop); - - using HInput = HGraphicBufferProducer::QueueBufferInput; - HInput hInput{ - input.timestamp, - static_cast<bool>(input.isAutoTimestamp), - static_cast<int32_t>(input.dataSpace), - {}, // crop - static_cast<int32_t>(input.transform), - static_cast<int32_t>(input.stickyTransform), - {}, // fence - {} // surfaceDamage - }; - - // Convert crop. - if (!b2h(input.crop, &hInput.crop)) { - LOG(ERROR) << "queueBuffer: corrupted input crop rectangle."; - return UNKNOWN_ERROR; - } - - // Convert surfaceDamage. - size_t numRects; - Rect const* rectArray = input.surfaceDamage.getArray(&numRects); - hInput.surfaceDamage.resize(numRects); - for (size_t i = 0; i < numRects; ++i) { - if (!b2h(rectArray[i], &hInput.surfaceDamage[i])) { - LOG(ERROR) << "queueBuffer: corrupted input surface damage."; - return UNKNOWN_ERROR; - } - } - - // Convert fence. + HQueueBufferInput hInput{}; HFenceWrapper hFenceWrapper; - if (!b2h(input.fence, &hFenceWrapper)) { - LOG(ERROR) << "queueBuffer: corrupted input fence."; + if (!b2h(input, &hInput, &hFenceWrapper)) { + LOG(ERROR) << "queueBuffer: corrupted input."; return UNKNOWN_ERROR; } - hInput.fence = hFenceWrapper.getHandle(); - using HOutput = HGraphicBufferProducer::QueueBufferOutput; bool converted{}; status_t bStatus{}; Return<void> transResult = mBase->queueBuffer( @@ -257,15 +264,8 @@ status_t H2BGraphicBufferProducer::queueBuffer( hInput, [&converted, &bStatus, output]( HStatus hStatus, - HOutput const& hOutput) { - converted = h2b(hStatus, &bStatus); - output->width = hOutput.width; - output->height = hOutput.height; - output->transformHint = - static_cast<uint32_t>(hOutput.transformHint); - output->numPendingBuffers = hOutput.numPendingBuffers; - output->nextFrameNumber = hOutput.nextFrameNumber; - output->bufferReplaced = hOutput.bufferReplaced; + HQueueBufferOutput const& hOutput) { + converted = h2b(hStatus, &bStatus) && h2b(hOutput, output); }); if (!transResult.isOk()) { @@ -332,7 +332,6 @@ status_t H2BGraphicBufferProducer::connect( } } - using HOutput = HGraphicBufferProducer::QueueBufferOutput; bool converted{}; status_t bStatus{}; Return<void> transResult = mBase->connect( @@ -341,15 +340,8 @@ status_t H2BGraphicBufferProducer::connect( producerControlledByApp, [&converted, &bStatus, output]( HStatus hStatus, - HOutput hOutput) { - converted = h2b(hStatus, &bStatus); - output->width = hOutput.width; - output->height = hOutput.height; - output->transformHint = - static_cast<uint32_t>(hOutput.transformHint); - output->numPendingBuffers = hOutput.numPendingBuffers; - output->nextFrameNumber = hOutput.nextFrameNumber; - output->bufferReplaced = hOutput.bufferReplaced; + HQueueBufferOutput const& hOutput) { + converted = h2b(hStatus, &bStatus) && h2b(hOutput, output); }); if (!transResult.isOk()) { LOG(ERROR) << "connect: transaction failed."; |