mirror of https://git.ffmpeg.org/ffmpeg.git
avutil/opt: Use correct function pointer type
av_get_sample/pix_fmt() return their respective enums and are therefore not of the type int (*)(const char*), yet they are called as-if they were of this type. This works in practice, but is actually undefined behaviour. With Clang 17 UBSan these violations are flagged, affecting lots of tests. The number of failing tests went down from 3363 to 164 here with this patch. Reviewed-by: Mark Thompson <sw@jkqxz.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
484e7716bc
commit
f705b8b5b4
|
@ -444,16 +444,26 @@ static int set_string_fmt(void *obj, const AVOption *o, const char *val, uint8_t
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_pix_fmt(const char *name)
|
||||
{
|
||||
return av_get_pix_fmt(name);
|
||||
}
|
||||
|
||||
static int set_string_pixel_fmt(void *obj, const AVOption *o, const char *val, uint8_t *dst)
|
||||
{
|
||||
return set_string_fmt(obj, o, val, dst,
|
||||
AV_PIX_FMT_NB, av_get_pix_fmt, "pixel format");
|
||||
AV_PIX_FMT_NB, get_pix_fmt, "pixel format");
|
||||
}
|
||||
|
||||
static int get_sample_fmt(const char *name)
|
||||
{
|
||||
return av_get_sample_fmt(name);
|
||||
}
|
||||
|
||||
static int set_string_sample_fmt(void *obj, const AVOption *o, const char *val, uint8_t *dst)
|
||||
{
|
||||
return set_string_fmt(obj, o, val, dst,
|
||||
AV_SAMPLE_FMT_NB, av_get_sample_fmt, "sample format");
|
||||
AV_SAMPLE_FMT_NB, get_sample_fmt, "sample format");
|
||||
}
|
||||
|
||||
static int set_string_dict(void *obj, const AVOption *o, const char *val, uint8_t **dst)
|
||||
|
|
Loading…
Reference in New Issue