1
0
mirror of https://git.ffmpeg.org/ffmpeg.git synced 2026-10-24 02:09:03 +03:00

avcodec/diracdsp: Use ptrdiff_t for stride

Reviewed-by: Lynne <dev@lynne.ee>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2026-08-07 16:13:01 +02:00
parent 7635b501b8
commit fc866eaab3
7 changed files with 81 additions and 59 deletions

View File

@@ -227,9 +227,9 @@ typedef struct DiracContext {
DECLARE_ALIGNED(16, uint8_t, obmc_weight)[3][MAX_BLOCKSIZE*MAX_BLOCKSIZE];
void (*put_pixels_tab[4])(uint8_t *dst, const uint8_t *src[5], int stride, int h);
void (*avg_pixels_tab[4])(uint8_t *dst, const uint8_t *src[5], int stride, int h);
void (*add_obmc)(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen);
void (*put_pixels_tab[4])(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h);
void (*avg_pixels_tab[4])(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h);
void (*add_obmc)(uint16_t *dst, const uint8_t *src, ptrdiff_t stride, const uint8_t *obmc_weight, int yblen);
dirac_weight_func weight_func;
dirac_biweight_func biweight_func;

View File

@@ -29,8 +29,8 @@
+3*((src)[-2*stride] + (src)[3*stride]) \
-1*((src)[-3*stride] + (src)[4*stride]) + 16) >> 5)
static void dirac_hpel_filter(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, const uint8_t *src,
int stride, int width, int height)
static void dirac_hpel_filter(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc,
const uint8_t *src, ptrdiff_t stride, int width, int height)
{
int x, y;
@@ -52,7 +52,7 @@ static void dirac_hpel_filter(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, const
}
#define PIXOP_BILINEAR(PFX, OP, WIDTH) \
static void ff_ ## PFX ## _dirac_pixels ## WIDTH ## _bilinear_c(uint8_t *dst, const uint8_t *src[5], int stride, int h) \
static void ff_ ## PFX ## _dirac_pixels ## WIDTH ## _bilinear_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h) \
{ \
int x; \
const uint8_t *s0 = src[0]; \
@@ -88,8 +88,9 @@ PIXOP_BILINEAR(avg, OP_AVG, 32)
#define op_scale2(x) dst[x] = av_clip_uint8( (src[x]*weights + dst[x]*weightd + (1<<(log2_denom-1))) >> log2_denom)
#define DIRAC_WEIGHT(W) \
static void weight_dirac_pixels ## W ## _c(uint8_t *block, int stride, int log2_denom, \
int weight, int h) { \
static void weight_dirac_pixels ## W ## _c(uint8_t *block, ptrdiff_t stride, \
int log2_denom, int weight, int h) \
{ \
int x; \
while (h--) { \
for (x = 0; x < W; x++) { \
@@ -99,7 +100,8 @@ PIXOP_BILINEAR(avg, OP_AVG, 32)
block += stride; \
} \
} \
static void biweight_dirac_pixels ## W ## _c(uint8_t *dst, const uint8_t *src, int stride, int log2_denom, \
static void biweight_dirac_pixels ## W ## _c(uint8_t *dst, const uint8_t *src, \
ptrdiff_t stride, int log2_denom, \
int weightd, int weights, int h) { \
int x; \
while (h--) { \
@@ -117,7 +119,7 @@ DIRAC_WEIGHT(16)
DIRAC_WEIGHT(32)
#define ADD_OBMC(xblen) \
static void add_obmc ## xblen ## _c(uint16_t *dst, const uint8_t *src, int stride, \
static void add_obmc ## xblen ## _c(uint16_t *dst, const uint8_t *src, ptrdiff_t stride, \
const uint8_t *obmc_weight, int yblen) \
{ \
int x; \
@@ -136,7 +138,9 @@ ADD_OBMC(8)
ADD_OBMC(16)
ADD_OBMC(32)
static void put_signed_rect_clamped_8bit_c(uint8_t *dst, int dst_stride, const uint8_t *_src, int src_stride, int width, int height)
static void put_signed_rect_clamped_8bit_c(uint8_t *dst, ptrdiff_t dst_stride,
const uint8_t *_src, ptrdiff_t src_stride,
int width, int height)
{
int x, y;
const int16_t *src = (const int16_t *)_src;
@@ -153,8 +157,9 @@ static void put_signed_rect_clamped_8bit_c(uint8_t *dst, int dst_stride, const u
}
#define PUT_SIGNED_RECT_CLAMPED(PX) \
static void put_signed_rect_clamped_ ## PX ## bit_c(uint8_t *_dst, int dst_stride, const uint8_t *_src, \
int src_stride, int width, int height) \
static void put_signed_rect_clamped_ ## PX ## bit_c(uint8_t *_dst, ptrdiff_t dst_stride, \
const uint8_t *_src, ptrdiff_t src_stride, \
int width, int height) \
{ \
int x, y; \
uint16_t *dst = (uint16_t *)_dst; \
@@ -174,8 +179,8 @@ static void put_signed_rect_clamped_ ## PX ## bit_c(uint8_t *_dst, int dst_strid
PUT_SIGNED_RECT_CLAMPED(10)
PUT_SIGNED_RECT_CLAMPED(12)
static void add_rect_clamped_c(uint8_t *dst, const uint16_t *src, int stride,
const int16_t *idwt, int idwt_stride,
static void add_rect_clamped_c(uint8_t *dst, const uint16_t *src, ptrdiff_t stride,
const int16_t *idwt, ptrdiff_t idwt_stride,
int width, int height)
{
int x, y;

View File

@@ -24,11 +24,13 @@
#include <stdint.h>
#include <stddef.h>
typedef void (*dirac_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int h);
typedef void (*dirac_biweight_func)(uint8_t *dst, const uint8_t *src, int stride, int log2_denom, int weightd, int weights, int h);
typedef void (*dirac_weight_func)(uint8_t *block, ptrdiff_t stride, int log2_denom, int weight, int h);
typedef void (*dirac_biweight_func)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride,
int log2_denom, int weightd, int weights, int h);
typedef struct {
void (*dirac_hpel_filter)(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, const uint8_t *src, int stride, int width, int height);
void (*dirac_hpel_filter)(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc,
const uint8_t *src, ptrdiff_t stride, int width, int height);
/**
* dirac_pixels_tab[width][subpel]
* width is 2 for 32, 1 for 16, 0 for 8
@@ -39,13 +41,20 @@ typedef struct {
* src[0-3] is each of the hpel planes
* src[4] is the 1/8 pel weights if needed
*/
void (*put_dirac_pixels_tab[3][4])(uint8_t *dst, const uint8_t *src[5], int stride, int h);
void (*avg_dirac_pixels_tab[3][4])(uint8_t *dst, const uint8_t *src[5], int stride, int h);
void (*put_dirac_pixels_tab[3][4])(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h);
void (*avg_dirac_pixels_tab[3][4])(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h);
void (*put_signed_rect_clamped[3])(uint8_t *dst/*align 16*/, int dst_stride, const uint8_t *src/*align 16*/, int src_stride, int width, int height/*mod 2*/);
void (*put_rect_clamped)(uint8_t *dst/*align 16*/, int dst_stride, const uint8_t *src/*align 16*/, int src_stride, int width, int height/*mod 2*/);
void (*add_rect_clamped)(uint8_t *dst/*align 16*/, const uint16_t *src/*align 16*/, int stride, const int16_t *idwt/*align 16*/, int idwt_stride, int width, int height/*mod 2*/);
void (*add_dirac_obmc[3])(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen);
void (*put_signed_rect_clamped[3])(uint8_t *dst/*align 16*/, ptrdiff_t dst_stride,
const uint8_t *src/*align 16*/, ptrdiff_t src_stride,
int width, int height/*mod 2*/);
void (*put_rect_clamped)(uint8_t *dst/*align 16*/, ptrdiff_t dst_stride,
const uint8_t *src/*align 16*/, ptrdiff_t src_stride,
int width, int height/*mod 2*/);
void (*add_rect_clamped)(uint8_t *dst/*align 16*/, const uint16_t *src/*align 16*/,
ptrdiff_t stride, const int16_t *idwt/*align 16*/,
ptrdiff_t idwt_stride, int width, int height/*mod 2*/);
void (*add_dirac_obmc[3])(uint16_t *dst, const uint8_t *src, ptrdiff_t stride,
const uint8_t *obmc_weight, int yblen);
/* 0-1: int16_t and int32_t asm/c, 2-3: int16 and int32_t, C only */
void (*dequant_subband[4])(uint8_t *src, uint8_t *dst, ptrdiff_t stride, const int qf, const int qs, int tot_v, int tot_h);
@@ -55,9 +64,9 @@ typedef struct {
} DiracDSPContext;
#define DECL_DIRAC_PIXOP(PFX, EXT) \
void ff_ ## PFX ## _dirac_pixels8_ ## EXT(uint8_t *dst, const uint8_t *src[5], int stride, int h); \
void ff_ ## PFX ## _dirac_pixels16_ ## EXT(uint8_t *dst, const uint8_t *src[5], int stride, int h); \
void ff_ ## PFX ## _dirac_pixels32_ ## EXT(uint8_t *dst, const uint8_t *src[5], int stride, int h)
void ff_ ## PFX ## _dirac_pixels8_ ## EXT(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h); \
void ff_ ## PFX ## _dirac_pixels16_ ## EXT(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h); \
void ff_ ## PFX ## _dirac_pixels32_ ## EXT(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)
DECL_DIRAC_PIXOP(put, c);
DECL_DIRAC_PIXOP(avg, c);

View File

@@ -738,41 +738,41 @@ void ff_put_pixels8_l2_8(uint8_t *dst, const uint8_t *src1, const uint8_t *src2,
#if CONFIG_DIRAC_DECODER
#define DIRAC_MC(OPNAME)\
void ff_ ## OPNAME ## _dirac_pixels8_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels8_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels8_8_c(dst, src[0], stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels16_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels16_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels16_8_c(dst, src[0], stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels32_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels32_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels16_8_c(dst , src[0] , stride, h);\
OPNAME ## _pixels16_8_c(dst+16, src[0]+16, stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels8_l2_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels8_l2_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels8_l2_8(dst, src[0], src[1], stride, stride, stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels16_l2_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels16_l2_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels16_l2_8(dst, src[0], src[1], stride, stride, stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels32_l2_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels32_l2_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels16_l2_8(dst , src[0] , src[1] , stride, stride, stride, h);\
OPNAME ## _pixels16_l2_8(dst+16, src[0]+16, src[1]+16, stride, stride, stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels8_l4_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels8_l4_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels8_l4_8(dst, src[0], src[1], src[2], src[3], stride, stride, stride, stride, stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels16_l4_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels16_l4_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels16_l4_8(dst, src[0], src[1], src[2], src[3], stride, stride, stride, stride, stride, h);\
}\
void ff_ ## OPNAME ## _dirac_pixels32_l4_c(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
void ff_ ## OPNAME ## _dirac_pixels32_l4_c(uint8_t *dst, const uint8_t *src[5], ptrdiff_t stride, int h)\
{\
OPNAME ## _pixels16_l4_8(dst , src[0] , src[1] , src[2] , src[3] , stride, stride, stride, stride, stride, h);\
OPNAME ## _pixels16_l4_8(dst+16, src[0]+16, src[1]+16, src[2]+16, src[3]+16, stride, stride, stride, stride, stride, h);\

View File

@@ -132,15 +132,15 @@ cglobal dirac_hpel_filter_h_%1, 3,3,8, dst, src, width
%endmacro
%macro PUT_RECT 1
; void put_rect_clamped(uint8_t *dst, int dst_stride, int16_t *src, int src_stride, int width, int height)
; void ff_put_signed_rect_clamped_sse2(uint8_t *dst, ptrdiff_t dst_stride,
; const int16_t *src, ptrdiff_t src_stride,
; int width, int height)
cglobal put_signed_rect_clamped_%1, 5,9,3, dst, dst_stride, src, src_stride, w, dst2, src2
mova m0, [pb_80]
add wd, (mmsize-1)
and wd, ~(mmsize-1)
%if ARCH_X86_64
movsxd dst_strideq, dst_strided
movsxd src_strideq, src_strided
mov r7d, r5m
mov r8d, wd
%define wspill r8d
@@ -175,15 +175,15 @@ cglobal put_signed_rect_clamped_%1, 5,9,3, dst, dst_stride, src, src_stride, w,
%endm
%macro ADD_RECT 1
; void add_rect_clamped(uint8_t *dst, uint16_t *src, int stride, int16_t *idwt, int idwt_stride, int width, int height)
; void ff_add_rect_clamped_sse2(uint8_t *dst, const uint16_t *src, ptrdiff_t stride,
; const int16_t *idwt, ptrdiff_t idwt_stride,
; int width, int height)
cglobal add_rect_clamped_%1, 7,9,3, dst, src, stride, idwt, idwt_stride, w, h
mova m0, [pw_32]
add wd, (mmsize-1)
and wd, ~(mmsize-1)
%if ARCH_X86_64
movsxd strideq, strided
movsxd idwt_strideq, idwt_strided
mov r8d, wd
%define wspill r8d
%else
@@ -215,10 +215,10 @@ cglobal add_rect_clamped_%1, 7,9,3, dst, src, stride, idwt, idwt_stride, w, h
%endm
%macro ADD_OBMC 2
; void add_obmc(uint16_t *dst, uint8_t *src, int stride, uint8_t *obmc_weight, int yblen)
; void ff_add_dirac_obmc16/32_sse2(uint16_t *dst, const uint8_t *src,
; ptrdiff_t stride, const uint8_t *obmc_weight, int yblen)
cglobal add_dirac_obmc%1_%2, 5,5,5, dst, src, stride, obmc, yblen
pxor m4, m4
movsxdifnidn strideq, strided
.loop:
%assign i 0
%rep %1 / mmsize
@@ -258,7 +258,6 @@ ADD_OBMC 16, sse2
cglobal add_dirac_obmc8_sse2, 5,5,4, dst, src, stride, obmc, yblen
pxor m3, m3
movsxdifnidn strideq, strided
.loop:
movh m0, [srcq]
punpcklbw m0, m3
@@ -314,11 +313,11 @@ cglobal dequant_subband_32, 7, 7, 4, src, dst, stride, qf, qs, tot_v, tot_h
RET
INIT_XMM sse4
; void put_signed_rect_clamped_10(uint8_t *dst, int dst_stride, const uint8_t *src, int src_stride, int width, int height)
; void ff_put_signed_rect_clamped_10_sse4(uint8_t *dst, ptrdiff_t dst_stride,
; const uint8_t *src, ptrdiff_t src_stride,
; int width, int height)
%if ARCH_X86_64
cglobal put_signed_rect_clamped_10, 6, 8, 5, dst, dst_stride, src, src_stride, w, h, t1, t2
movsxd dst_strideq, dst_strided
movsxd src_strideq, src_strided
%else
cglobal put_signed_rect_clamped_10, 5, 7, 5, dst, dst_stride, src, src_stride, w, t1, t2
%define hd r5mp

View File

@@ -22,15 +22,23 @@
#include "libavcodec/diracdsp.h"
#include "fpel.h"
void ff_add_rect_clamped_sse2(uint8_t *, const uint16_t *, int, const int16_t *, int, int, int);
void ff_add_rect_clamped_sse2(uint8_t *dst, const uint16_t *src, ptrdiff_t stride,
const int16_t *idwt, ptrdiff_t idwt_stride,
int width, int height);
void ff_add_dirac_obmc8_sse2(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen);
void ff_add_dirac_obmc16_sse2(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen);
void ff_add_dirac_obmc32_sse2(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen);
void ff_add_dirac_obmc8_sse2(uint16_t *dst, const uint8_t *src, ptrdiff_t stride,
const uint8_t *obmc_weight, int yblen);
void ff_add_dirac_obmc16_sse2(uint16_t *dst, const uint8_t *src, ptrdiff_t stride,
const uint8_t *obmc_weight, int yblen);
void ff_add_dirac_obmc32_sse2(uint16_t *dst, const uint8_t *src, ptrdiff_t stride,
const uint8_t *obmc_weight, int yblen);
void ff_put_rect_clamped_sse2(uint8_t *dst, int dst_stride, const int16_t *src, int src_stride, int width, int height);
void ff_put_signed_rect_clamped_sse2(uint8_t *dst, int dst_stride, const int16_t *src, int src_stride, int width, int height);
void ff_put_signed_rect_clamped_10_sse4(uint8_t *dst, int dst_stride, const uint8_t *src, int src_stride, int width, int height);
void ff_put_rect_clamped_sse2(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src,
ptrdiff_t src_stride, int width, int height);
void ff_put_signed_rect_clamped_sse2(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src,
ptrdiff_t src_stride, int width, int height);
void ff_put_signed_rect_clamped_10_sse4(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src,
ptrdiff_t src_stride, int width, int height);
void ff_dequant_subband_32_sse4(uint8_t *src, uint8_t *dst, ptrdiff_t stride, const int qf, const int qs, int tot_v, int tot_h);
@@ -40,7 +48,7 @@ void ff_dequant_subband_32_sse4(uint8_t *src, uint8_t *dst, ptrdiff_t stride, co
void ff_dirac_hpel_filter_h_ ## EXT(uint8_t *, const uint8_t *, int); \
\
static void dirac_hpel_filter_ ## EXT(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, \
const uint8_t *src, int stride, int width, int height) \
const uint8_t *src, ptrdiff_t stride, int width, int height) \
{ \
while( height-- ) \
{ \
@@ -57,7 +65,7 @@ void ff_dequant_subband_32_sse4(uint8_t *src, uint8_t *dst, ptrdiff_t stride, co
#define DIRAC_PIXOP(OPNAME, EXT)\
static void OPNAME ## _dirac_pixels16_ ## EXT(uint8_t *dst, const uint8_t *src[5], \
int stride, int h) \
ptrdiff_t stride, int h) \
{\
if (h&3)\
ff_ ## OPNAME ## _dirac_pixels16_c(dst, src, stride, h);\
@@ -65,7 +73,7 @@ static void OPNAME ## _dirac_pixels16_ ## EXT(uint8_t *dst, const uint8_t *src[5
ff_ ## OPNAME ## _pixels16_ ## EXT(dst, src[0], stride, h);\
}\
static void OPNAME ## _dirac_pixels32_ ## EXT(uint8_t *dst, const uint8_t *src[5], \
int stride, int h) \
ptrdiff_t stride, int h) \
{\
if (h&3) {\
ff_ ## OPNAME ## _dirac_pixels32_c(dst, src, stride, h);\

View File

@@ -68,7 +68,8 @@ static void check_add_obmc(size_t func_index, int xblen)
ff_diracdsp_init(&h);
if (check_func(h.add_dirac_obmc[func_index], "diracdsp.add_dirac_obmc_%d", xblen)) {
declare_func(void, uint16_t*, const uint8_t*, int, const uint8_t *, int);
declare_func(void, uint16_t *dst, const uint8_t *src, ptrdiff_t stride,
const uint8_t *obmc_weight, int yblen);
RANDOMIZE_BUFFER8(src, YBLEN_MAX * xblen);
RANDOMIZE_DESTS(dst, YBLEN_MAX * xblen);