Merge pull request #21170 from JJJoonngg:4.x

Check buffer size when frameWidth * frameHeight bigger than allocated buffer size
pull/21179/head
Jong Sin Kim 3 years ago committed by GitHub
parent 369b260e12
commit 2da1f9181a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 21
      modules/videoio/src/cap_android_mediandk.cpp

@ -97,10 +97,29 @@ public:
LOGV("buffer size: %zu", bufferSize);
LOGV("width (frame): %d", frameWidth);
LOGV("height (frame): %d", frameHeight);
if (info.flags & AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM) {
if (info.flags & AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM)
{
LOGV("output EOS");
sawOutputEOS = true;
}
if ((size_t)frameWidth * frameHeight * 3 / 2 > bufferSize)
{
if (bufferSize == 3110400 && frameWidth == 1920 && frameHeight == 1088)
{
frameHeight = 1080;
LOGV("Buffer size is too small, force using height = %d", frameHeight);
}
else if(bufferSize == 3110400 && frameWidth == 1088 && frameHeight == 1920)
{
frameWidth = 1080;
LOGV("Buffer size is too small, force using width = %d", frameWidth);
}
else
{
LOGE("Buffer size is too small. Frame is ignored. Enable verbose logging to see actual values of parameters");
return false;
}
}
AMediaCodec_releaseOutputBuffer(mediaCodec.get(), bufferIndex, info.size != 0);
return true;
} else if (bufferIndex == AMEDIACODEC_INFO_OUTPUT_BUFFERS_CHANGED) {

Loading…
Cancel
Save