Android YUV缓冲区转换为RGB的内存分配

Android YUV缓冲区转换为RGB的内存分配,android,c++,c,video-streaming,Android,C++,C,Video Streaming,在从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_decode

在从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);
  }
上面的代码片段适用于高端android设备。但在一些android设备上,在处理第一帧、第二帧之后,我在第一条memcpy()语句中遇到崩溃

这个代码有什么问题?以及如何从DecodeFrame2()的输出计算缓冲区大小。 如果我处理替代帧(而不是30帧,只有15帧替代帧), 很好


请帮我修一下这个

根据上述公式,yDataSize和uvDataSize非常庞大,
此问题已通过修改大小得到解决。

可能是我,但您所说的memcpy将YuvBufferedata和yuvData[0]作为参数,但您从未向我们展示如何定义这些参数或分配发生在何处。。。所以,不。。。没办法。如果你想得到有用的答案,你必须显示更多的代码。这是640*480分辨率的。我从照相机接收帧,并解压缩帧(解复用)->解码帧(H264)->YUVtoRGB转换。这些都发生在单个线程中。直到解码部分工作正常。我已将解码器的输出写入.yuv文件,并在yuv播放器上播放。比赛进行得很好。但当我试图将解码输出复制到另一个缓冲区(用于YUV到RGB的转换)时,它在低端设备上崩溃了。第一帧成功完成所有阶段。第二帧始终失败。