You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-11-29 05:57:37 +02:00
swscale/internal: use static_assert for enforcing offsets
Instead of sprinkling av_assert0 into random init functions. Sponsored-by: Sovereign Tech Fund Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#define SWSCALE_SWSCALE_INTERNAL_H
|
#define SWSCALE_SWSCALE_INTERNAL_H
|
||||||
|
|
||||||
#include <stdatomic.h>
|
#include <stdatomic.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "swscale.h"
|
#include "swscale.h"
|
||||||
@@ -705,6 +706,16 @@ struct SwsInternal {
|
|||||||
};
|
};
|
||||||
//FIXME check init (where 0)
|
//FIXME check init (where 0)
|
||||||
|
|
||||||
|
static_assert(offsetof(SwsInternal, redDither) + DITHER32_INT == offsetof(SwsInternal, dither32),
|
||||||
|
"dither32 must be at the same offset as redDither + DITHER32_INT");
|
||||||
|
|
||||||
|
#if ARCH_X86_64
|
||||||
|
/* x86 yuv2gbrp uses the SwsInternal for yuv coefficients
|
||||||
|
if struct offsets change the asm needs to be updated too */
|
||||||
|
static_assert(offsetof(SwsInternal, yuv2rgb_y_offset) == 40292,
|
||||||
|
"yuv2rgb_y_offset must be updated in x86 asm");
|
||||||
|
#endif
|
||||||
|
|
||||||
SwsFunc ff_yuv2rgb_get_func_ptr(SwsInternal *c);
|
SwsFunc ff_yuv2rgb_get_func_ptr(SwsInternal *c);
|
||||||
int ff_yuv2rgb_c_init_tables(SwsInternal *c, const int inv_table[4],
|
int ff_yuv2rgb_c_init_tables(SwsInternal *c, const int inv_table[4],
|
||||||
int fullRange, int brightness,
|
int fullRange, int brightness,
|
||||||
|
|||||||
@@ -1228,8 +1228,6 @@ SwsContext *sws_alloc_context(void)
|
|||||||
{
|
{
|
||||||
SwsInternal *c = av_mallocz(sizeof(SwsInternal));
|
SwsInternal *c = av_mallocz(sizeof(SwsInternal));
|
||||||
|
|
||||||
av_assert0(offsetof(SwsInternal, redDither) + DITHER32_INT == offsetof(SwsInternal, dither32));
|
|
||||||
|
|
||||||
if (c) {
|
if (c) {
|
||||||
c->av_class = &ff_sws_context_class;
|
c->av_class = &ff_sws_context_class;
|
||||||
av_opt_set_defaults(c);
|
av_opt_set_defaults(c);
|
||||||
|
|||||||
@@ -791,10 +791,6 @@ switch(c->dstBpc){ \
|
|||||||
|
|
||||||
if(c->flags & SWS_FULL_CHR_H_INT) {
|
if(c->flags & SWS_FULL_CHR_H_INT) {
|
||||||
|
|
||||||
/* yuv2gbrp uses the SwsInternal for yuv coefficients
|
|
||||||
if struct offsets change the asm needs to be updated too */
|
|
||||||
av_assert0(offsetof(SwsInternal, yuv2rgb_y_offset) == 40292);
|
|
||||||
|
|
||||||
#define YUV2ANYX_FUNC_CASE(fmt, name, opt) \
|
#define YUV2ANYX_FUNC_CASE(fmt, name, opt) \
|
||||||
case fmt: \
|
case fmt: \
|
||||||
c->yuv2anyX = ff_yuv2##name##_full_X_##opt; \
|
c->yuv2anyX = ff_yuv2##name##_full_X_##opt; \
|
||||||
|
|||||||
Reference in New Issue
Block a user