Merge "HAL V7.0: Update example APM config files"
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp
index 3919ea2..aa4a004 100644
--- a/media/codec2/sfplugin/CCodecBufferChannel.cpp
+++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
@@ -1066,9 +1066,6 @@
Mutexed<OutputSurface>::Locked output(mOutputSurface);
output->maxDequeueBuffers = numOutputSlots +
reorderDepth.value + kRenderingDepth;
- if (!secure) {
- output->maxDequeueBuffers += numInputSlots;
- }
outputSurface = output->surface ?
output->surface->getIGraphicBufferProducer() : nullptr;
if (outputSurface) {
@@ -1529,6 +1526,7 @@
}
std::optional<uint32_t> newInputDelay, newPipelineDelay;
+ bool needMaxDequeueBufferCountUpdate = false;
while (!worklet->output.configUpdate.empty()) {
std::unique_ptr<C2Param> param;
worklet->output.configUpdate.back().swap(param);
@@ -1537,24 +1535,10 @@
case C2PortReorderBufferDepthTuning::CORE_INDEX: {
C2PortReorderBufferDepthTuning::output reorderDepth;
if (reorderDepth.updateFrom(*param)) {
- bool secure = mComponent->getName().find(".secure") !=
- std::string::npos;
- mOutput.lock()->buffers->setReorderDepth(
- reorderDepth.value);
ALOGV("[%s] onWorkDone: updated reorder depth to %u",
mName, reorderDepth.value);
- size_t numOutputSlots = mOutput.lock()->numSlots;
- size_t numInputSlots = mInput.lock()->numSlots;
- Mutexed<OutputSurface>::Locked output(mOutputSurface);
- output->maxDequeueBuffers = numOutputSlots +
- reorderDepth.value + kRenderingDepth;
- if (!secure) {
- output->maxDequeueBuffers += numInputSlots;
- }
- if (output->surface) {
- output->surface->setMaxDequeuedBufferCount(
- output->maxDequeueBuffers);
- }
+ mOutput.lock()->buffers->setReorderDepth(reorderDepth.value);
+ needMaxDequeueBufferCountUpdate = true;
} else {
ALOGD("[%s] onWorkDone: failed to read reorder depth",
mName);
@@ -1598,14 +1582,11 @@
if (outputDelay.updateFrom(*param)) {
ALOGV("[%s] onWorkDone: updating output delay %u",
mName, outputDelay.value);
- bool secure = mComponent->getName().find(".secure") !=
- std::string::npos;
- (void)mPipelineWatcher.lock()->outputDelay(
- outputDelay.value);
+ (void)mPipelineWatcher.lock()->outputDelay(outputDelay.value);
+ needMaxDequeueBufferCountUpdate = true;
bool outputBuffersChanged = false;
size_t numOutputSlots = 0;
- size_t numInputSlots = mInput.lock()->numSlots;
{
Mutexed<Output>::Locked output(mOutput);
if (!output->buffers) {
@@ -1631,16 +1612,6 @@
if (outputBuffersChanged) {
mCCodecCallback->onOutputBuffersChanged();
}
-
- uint32_t depth = mOutput.lock()->buffers->getReorderDepth();
- Mutexed<OutputSurface>::Locked output(mOutputSurface);
- output->maxDequeueBuffers = numOutputSlots + depth + kRenderingDepth;
- if (!secure) {
- output->maxDequeueBuffers += numInputSlots;
- }
- if (output->surface) {
- output->surface->setMaxDequeuedBufferCount(output->maxDequeueBuffers);
- }
}
}
break;
@@ -1669,6 +1640,20 @@
input->numSlots = newNumSlots;
}
}
+ if (needMaxDequeueBufferCountUpdate) {
+ size_t numOutputSlots = 0;
+ uint32_t reorderDepth = 0;
+ {
+ Mutexed<Output>::Locked output(mOutput);
+ numOutputSlots = output->numSlots;
+ reorderDepth = output->buffers->getReorderDepth();
+ }
+ Mutexed<OutputSurface>::Locked output(mOutputSurface);
+ output->maxDequeueBuffers = numOutputSlots + reorderDepth + kRenderingDepth;
+ if (output->surface) {
+ output->surface->setMaxDequeuedBufferCount(output->maxDequeueBuffers);
+ }
+ }
int32_t flags = 0;
if (worklet->output.flags & C2FrameData::FLAG_END_OF_STREAM) {
diff --git a/media/libstagefright/codecs/m4v_h263/fuzzer/mpeg4_h263_enc_fuzzer.cpp b/media/libstagefright/codecs/m4v_h263/fuzzer/mpeg4_h263_enc_fuzzer.cpp
index f154706..423325d 100644
--- a/media/libstagefright/codecs/m4v_h263/fuzzer/mpeg4_h263_enc_fuzzer.cpp
+++ b/media/libstagefright/codecs/m4v_h263/fuzzer/mpeg4_h263_enc_fuzzer.cpp
@@ -137,7 +137,8 @@
void Codec::encodeFrames(const uint8_t *data, size_t size) {
size_t inputBufferSize = (mFrameWidth * mFrameHeight * 3) / 2;
size_t outputBufferSize = inputBufferSize * 2;
- uint8_t outputBuffer[outputBufferSize];
+ uint8_t *outputBuffer = new uint8_t[outputBufferSize];
+ uint8_t *inputBuffer = new uint8_t[inputBufferSize];
// Get VOL header.
int32_t sizeOutputBuffer = outputBufferSize;
@@ -146,10 +147,9 @@
size_t numFrame = 0;
while (size > 0) {
size_t bytesConsumed = std::min(size, inputBufferSize);
- uint8_t inputBuffer[inputBufferSize];
memcpy(inputBuffer, data, bytesConsumed);
- if (bytesConsumed < sizeof(inputBuffer)) {
- memset(inputBuffer + bytesConsumed, data[0], sizeof(inputBuffer) - bytesConsumed);
+ if (bytesConsumed < inputBufferSize) {
+ memset(inputBuffer + bytesConsumed, data[0], inputBufferSize - bytesConsumed);
}
VideoEncFrameIO videoIn{}, videoOut{};
videoIn.height = mFrameHeight;
@@ -170,6 +170,8 @@
data += bytesConsumed;
size -= bytesConsumed;
}
+ delete[] inputBuffer;
+ delete[] outputBuffer;
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {