【问题标题】:Read uncompressed AVI using libavcodec使用 libavcodec 读取未压缩的 AVI
【发布时间】:2014-08-25 23:53:15
【问题描述】:

我正在尝试读取未压缩的 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] 是 width*3,但我发现它是 -width*3。

如果手动设置data_size,那么它不是负数,memcpy 会导致 seg 错误。

打包像素格式是否以特殊方式存储?

【问题讨论】:

    标签: libavcodec libavformat


    【解决方案1】:

    负线大小表示帧反转(原始 AVI 是这样编码的)。

    数据指针指向顶行,如果将负线大小添加到指针,您将到达下一行。这意味着您正在向后读取图像,因此在上面的代码中为 memcpy 使用非负线大小意味着您将向前读取图像并在第一行之后进入未分配的内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-23
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      相关资源
      最近更新 更多