MediaCodec
YUV420
然后你可以随心所欲地处理它。。。但就我而言,我需要改变信仰
在里面
BGR
,这是相当昂贵的转换。
所以,问题是,是否有可能立即(无需转换)获得
BGR
从…起
媒体编解码器
我的代码现在
uint8_t *buf = AMediaCodec_getOutputBuffer(m_data.codec, static_cast<size_t>(status), /*bufsize*/nullptr);
cv::Mat YUVframe(cv::Size(m_frameSize.width, static_cast<int>(m_frameSize.height * 1.5)), CV_8UC1, buf);
cv::Mat colImg(m_frameSize, CV_8UC3);
cv::cvtColor(YUVframe, colImg, CV_YUV420sp2BGR, 3);
auto dataSize = colImg.rows * colImg.cols * colImg.channels();
imageData.assign(colImg.data, colImg.data + dataSize);
所以,正如你在这里看到的
cv::Mat YUVframe(cv::Size(m_frameSize.width, static_cast<int>(m_frameSize.height * 1.5)), CV_8UC1, buf);
我越来越
YUVframe
从编解码器缓冲区,然后在这里
cv::cvtColor(YUVframe, colImg, CV_YUV420sp2BGR, 3);
转换需要很多时间。对我来说,表现至关重要。