ffmpeg:加载图像的函数

jam*_*e_y 2 c ffmpeg

我尝试使用ff_load_imageimg2dec.c 中定义的函数加载图像文件:

  char* filename = argv[1];
  uint8_t* data;
  int linesize, width, height, log_ctx;
  enum AVPixelFormat pix_fmt = AV_PIX_FMT_RGB24;

  //load the image
  int i = ff_load_image(&data, &linesize, &width, &height, &pix_fmt, filename, &log_ctx);
  printf("%i\n", i);
Run Code Online (Sandbox Code Playgroud)

但是,我无缘无故地遇到了分段错误。我已经把printf语句放在了所有地方ff_load_image,它已经到达函数的末尾。为什么会出现分段错误?有没有更好的方法来加载图像?我想获得图片中的每个像素。

Ani*_*amy 5

我怀疑你传递了不正确的论点。根据ff_load_image文档,您的论点应该是:

  1. uint8_t *[4]
  2. 内部 [4]
  3. 整数 *
  4. 整数 *
  5. 枚举 AVPixelFormat *
  6. 常量字符 *
  7. 空白 *

您的前两个论点似乎不正确。

  • 您的第一个参数是uint8_t **,如果您为至少 4 个uint8_t指针分配了内存,但未data指向有效内存,这仍然可以。
  • 您的第二个论点是int *没有指向有效内存的相同问题。

因此,您的程序可能正在调用未定义的行为。

我会将您的初始化更改为:

uint8_t *data[4];
int linesize[4];
Run Code Online (Sandbox Code Playgroud)

然后调用ff_load_image为:

int i = ff_load_image(data, linesize, &width, &height, &pix_fmt,
                      filename, &log_ctx);
Run Code Online (Sandbox Code Playgroud)

此外,您可能想查看如何使用ff_load_image.