ffmpeg:加载图像的函数

时间:2014-03-17 16:29:58

标签: c ffmpeg

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

  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);

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

1 个答案:

答案 0 :(得分:3)

我怀疑你传递了不正确的参数。根据{{​​3}},你的论点应该是:

  1. uint8_t * [4]
  2. int [4]
  3. int *
  4. int *
  5. enum AVPixelFormat *
  6. const char *
  7. void *
  8. 您的前两个论点似乎不正确。

    • 你的第一个参数是uint8_t **如果你为至少4个uint8_t指针分配了内存,那么它仍然没问题,但是data没有指向有效的内存。
    • 您的第二个参数是int *,它具有不指向有效内存的相同问题。

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

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

    uint8_t *data[4];
    int linesize[4];
    

    然后将ff_load_image称为:

    int i = ff_load_image(data, linesize, &width, &height, &pix_fmt,
                          filename, &log_ctx);
    

    此外,您可能需要查看ff_load_image documentation