[FFmpeg-devel] new warning in libavcodec/dv.c
Dominique Leuenberger
dominique-ffmpeg-devel
Thu Feb 19 12:20:46 CET 2009
Hi,
this code snipet produces a new warning (especially on newer compilers):
static av_always_inline int dv_guess_dct_mode(DVVideoContext *s,
uint8_t *data, int linesize) {
if (s->avctx->flags & CODEC_FLAG_INTERLACED_DCT) {
int ps = s->ildct_cmp(NULL, data, NULL, linesize, 8) - 400;
if (ps > 0) {
int is = s->ildct_cmp(NULL, data , NULL,
linesize<<1, 4) +
s->ildct_cmp(NULL, data + linesize, NULL,
linesize<<1, 4);
return (ps > is);
}
} else
return 0;
}
The 'issue' is reaching a non-void function without returning a value.
At first sight, of course you would say this is nonsense and a wrong
warning by the compiler, but by looking closer you can see that the
compiler is right:
in case of the nested if (ps > 0) not being evaluated to true, no
return value is specified. the 'final' else is never reached. and thus
no return value given at all.
I think the 'simplest' solution would be to just drop the else and
have return 0; unconditional happening at the end. On the other hand
I'm not sure if this is what it is supposed to do.
Dominique
More information about the ffmpeg-devel
mailing list