【发布时间】:2019-12-04 09:08:54
【问题描述】:
我想将DecodeFrameNoDelay函数的输出格式为yuvData和bufferInfo转换为OpenCV矩阵,我可以使用imshow函数在窗口上显示框架
将 git 链接到 DecodeFrameNoDelay 详细信息:https://github.com/cisco/openh264/wiki/ISVCDecoder#decodeframenodelay
以下是我使用 Openh264 解码帧的代码
ISVCDecoder *decoder;
SBufferInfo bufferInfo;
SDecodingParam decodingParam;
uint8_t** yuvData;
void init(int width, int height) {
WelsCreateDecoder(&decoder);
decodingParam = {0};
decodingParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC;
decoder->Initialize(&decodingParam);
bufferInfo = {0};
bufferInfo.iBufferStatus = 1;
yuvData = new uint8_t*[3];
yuvData[0] = new uint8_t[width * height];
yuvData[1] = new uint8_t[width * height / 4];
yuvData[2] = new uint8_t[width * height / 4];
}
bool decode(const unsigned char* rawEncodedData, int rawEncodedDataLength, uint8_t** yuvData, char *name) {
int err = decoder->DecodeFrameNoDelay(rawEncodedData, rawEncodedDataLength, yuvData, &bufferInfo);
if (err != 0) {
std::cout << "H264 decoding failed. Error code: " << err << "." << std::endl;
parseErrorCode(err);
return false;
}
printf("H264 decoding success, err: %d, name: %s, status: %d\n", err, name, bufferInfo.iBufferStatus);
return true;
}
感谢任何帮助。
谢谢和最好的问候。
【问题讨论】:
-
您需要通过设置图像大小的构造函数版本或使用
create()函数创建Mat对象,然后将像素信息从yuvData缓冲区逐平面复制到Mat的data缓冲区.然后可以将其转换为其他编码,例如RGB,因为我不确定 OpenCV 是否可以做任何事情,除了转换 YUV 图像...