[Libav-user] A question about sws_scale and pointer types
alexcohn at netvision.net.il
Sun Oct 2 13:35:12 CEST 2011
On Wed, Sep 28, 2011 at 04:06, James Felix Black <jfb at homonculus.net> wrote:
> I have a chunk of code that creates an AVPicture from a raw stream of YUV420P, and rescales it. Easy-peasy, but I'm getting the error:
> zc_libav.c:29: error: passing argument 2 of ‘sws_scale’ from incompatible pointer type
> (I run -pedantic-errors when building test builds.)
For ffmpeg sources, -pedantic-errors report numerous complaints for me
(regarding C++ style comments, etc). But the "incompatible pointer
type" is reported with default warnings, too (my ver is 4.5.3). This
is the explanation: expected `const uint8_t * const*' but argument is
of type `uint8_t **'.
> Looking at libswscale/swscale.h, I see that the function signature is:
> int sws_scale(struct SwsContext *c, const uint8_t* const srcSlice,
> const int srcStride, int srcSliceY, int srcSliceH,
> uint8_t* const dst, const int dstStride);
> My code (assume that in_pic and out_pic are properly generated AVPictures):
> I'm happy to cast that 'in_pic->data' to get the compiler to shut up, but I don't know how.
The fix is to cast this way:
(const uint8_t **)in_pic->data,
> If I turn off errors (-pedantic), it compiles and runs fine. So this is really about my neurotic need not to see warnings, I guess. But I'm still curious as to how someone with more C experience would handle this.
There is a breathtaking discussion of the subject here:
The bottom line is: it's just a problem in the C standard.
> Am I doomed to special-casing this makefile rule to turn off -pedantic-errors? That would make me sad, but then again, there is much that makes me sad.
> ~ jfb
> James Felix Black <jfb at homonculus.net>
> "Some strangey that!"
> Words: http://homonculus.net
> Libav-user mailing list
> Libav-user at ffmpeg.org
More information about the Libav-user