我的代碼非常簡單;它消耗YUV420P數據,調整它的大小,併產生一個PNG或JPEG圖像(OS X Lion,Apple的gcc 4.2.1)。它工作正常;我使用的ffmpeg(HEAD,作爲喃喃天前),但在-pedantic-錯誤模式下運行時(這是我喜歡做的事,不時):不兼容的指針類型錯誤,sws_scale,ffmpeg
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.htypedef struct AVPicture {
uint8_t *data[4];
int linesize[4]; ///< number of bytes per line
} AVPicture;
正如我上面提到,當我改變-pedantic-錯誤-pedantic,我得到的同樣的投訴,但代碼編譯並正確運行。對於我自己的神經質的理智,是否有任何方法來獲得-pedantic-errors的優點,並且你知道,編譯這些代碼?
事實證明,正確的調用是'(const uint8_t * const *)in_pic-> data,'。不過謝謝你的回答。 –
謝謝你的分享,James!我遇到了我的AVbin項目(libav/ffmpeg包裝)的確切情況。現在要少擔心的警告。 – Nathan