static inline void scale_mv(AVSContext *h, int *d_x, int *d_y,
cavs_vector *src, int distp)
{
- int den = h->scale_den[src->ref];
+ int den = h->scale_den[FFMAX(src->ref, 0)];
- *d_x = (src->x * distp * den + 256 + (src->x >> 31)) >> 9;
- *d_y = (src->y * distp * den + 256 + (src->y >> 31)) >> 9;
+ *d_x = (src->x * distp * den + 256 + FF_SIGNBIT(src->x)) >> 9;
+ *d_y = (src->y * distp * den + 256 + FF_SIGNBIT(src->y)) >> 9;
}
static inline void mv_pred_median(AVSContext *h,
#define FF_SANE_NB_CHANNELS 63U
+ #define FF_SIGNBIT(x) (x >> CHAR_BIT * sizeof(x) - 1)
+
+#if HAVE_AVX
+# define STRIDE_ALIGN 32
+#elif HAVE_SIMD_ALIGN_16
+# define STRIDE_ALIGN 16
+#else
+# define STRIDE_ALIGN 8
+#endif
+
typedef struct FramePool {
/**
* Pools for each data plane. For audio all the planes have the same size,