不兼容的指针类型错误,sws_scale,ffmpeg

时间:2011-09-28 03:34:56

标签: c pointers ffmpeg

我的代码很简单;它消耗YUV420P数据,调整大小并生成PNG或JPEG图像(OS X Lion,Apple的gcc 4.2.1)。它工作正常;我正在使用ffmpeg(HEAD,就像几天前的笨蛋一样),但是当运行在-pedantic-errors模式时(我不时喜欢这样做):

zc_libav.c:30: error: passing argument 2 of ‘sws_scale’ from incompatible pointer type

哎哟!那么,我的代码是什么样的?

sws_scale(sws_ctx, 
          in_pic->data,
          in_pic->linesize, 
          0, 
          in->y, 
          out_pic->data, 
          out_pic->linesize); 

(您可以假设为了参数,in_pic和out_pic AVPicture结构已正确初始化,因为代码正常工作)。

那么,有什么违规的数据类型?

来自libswscale / swscale.h的

int sws_scale(struct SwsContext *c, const uint8_t* const srcSlice[], …

来自libavcodec / avcodec.h

typedef struct AVPicture {
  uint8_t *data[4];
  int linesize[4];       ///< number of bytes per line
} AVPicture;

正如我上面提到的,当我将-pedantic-errors更改为-pedantic时,我得到相同的抱怨,但代码编译并正确运行。对于我自己的神经质理智,有没有办法获得-pedantic-errors的优点,你知道,编译这段代码吗?

1 个答案:

答案 0 :(得分:4)

这在C ++中可以,但是C没有关于const的相同规则。它不喜欢你将非const uint8_t **传递给一个带有const uint8_t * const *的函数。

在C中,您可以将X *转换为const X *,但它仅适用于一个指针级别。下一个指针级别必须完全匹配。