c - 不兼容的指针类型错误、sws_scale、ffmpeg

标签 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 的优势,并且编译此代码吗?

最佳答案

这在 C++ 中没问题,但 C 对于 const 没有相同的规则。它不喜欢将非常量 uint8_t ** 传递给采用 const uint8_t *const * 的函数。

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

关于c - 不兼容的指针类型错误、sws_scale、ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7578009/

相关文章:

node.js - 如何使用 fluent-ffmpeg 从图像缓冲区创建视频?

video - 为什么 ffmpeg 中的位移复杂滤波器对 Cb 和 Cr 平面的位移与 lum 不同?

从左边开始计算连续的 1 位的个数

C(UNIX 环境)Fork 系统调用从不返回 0,不创建子进程

arrays - 在Go中,如何确定数组中 slice 的偏移量?

c - 不带 printf 的指针地址 C

Android - 使用 com.netcompss.loader.LoadJNI 连接 2 视频

c - 打印格式

c - BCRYPT_HASH_FUNCTION_TABLE 在哪里定义的?

c - C标准是否指定递增指针时进位传播的距离?