我在从 DecodeFrame2() 复制数据时在少数 Android 设备上遇到问题
这是我的代码:
uint8_t* m_yuvData[3];
SBufferInfo yuvDataInfo;
memset(&yuvDataInfo, 0, sizeof(SBufferInfo));
m_yuvData[0] = NULL;
m_yuvData[1] = NULL;
m_yuvData[2] = NULL;
DECODING_STATE decodingState = m_decoder->DecodeFrame2(bufferData, bufferDataSize, m_yuvData, &yuvDataInfo);
if(yuvDataInfo.iBufferStatus == 1)
{
int yStride = yuvDataInfo->UsrData.sSystemBuffer.iStride[0];
int uvStride = yuvDataInfo->UsrData.sSystemBuffer.iStride[1];
uint32_t width = yuvDataInfo->UsrData.sSystemBuffer.iWidth;
uint32_t height = yuvDataInfo->UsrData.sSystemBuffer.iHeight;
size_t yDataSize = (width * height) + (height * yStride);
size_t uvDataSize = (((width * height) / 4) + (height * uvStride));
size_t requiredSize = yDataSize + (2 * uvDataSize);
uint8_t* yuvBufferedData = (uint8_t*)malloc(requiredSize);
// when i move yuvData[0] to another location i am getting crash.
memcpy(yuvBufferedData, yuvData[0], yDataSize);
memcpy(yuvBufferedData + yDataSize, yuvData[1], uvDataSize);
memcpy(yuvBufferedData + yDataSize + uvDataSize, yuvData[2], uvDataSize);
}
上面的代码 fragment 适用于高端 Android 设备。但在处理第一帧、第二帧之后的少数 Android 设备上,我在第一个 memcpy() 语句中崩溃。
这段代码有什么问题?以及如何根据 DecodeFrame2() 的输出计算缓冲区大小。 如果我处理替代帧(而不是 30 个,只是 15 个替代帧), 它复制得很好。
请帮我解决这个问题吗?
最佳答案
根据上面的公式,yDataSize和uvDataSize非常巨大, 此问题已通过修改大小得到解决。
关于android - YUV 缓冲区转换为 RGB 的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380385/