我正在尝试读取未压缩的AVI文件 - 基本的未压缩AVI是BGR位图。
if(frame.format == AV_PIX_FMT_BGR24)
{
int data_size = frame.linesize[0]*frame.height;
my_data_ptr = new uint8_t [data_size];
memcpy(my_data_ptr, frame.data[0], data_size);
}
我希望frame.linesize[0]
为宽* 3,但我发现它是-width * 3.
如果手动设置data_size
所以它不是负数,则memcpy会导致seg错误。
打包像素格式是否以特殊方式存储?
答案 0 :(得分:0)
负线大小表示帧被反转(原始AVI以这种方式编码)。
数据指针指向顶行,如果将负线条添加到指针,则转到下一行。这意味着您正在向后读取图像,因此在上面的代码中对memcpy使用非负线条大小意味着您将向前读取图像并在第一行之后进入未分配的内存。