pixblockdsp: Change type of stride parameters to ptrdiff_t
This avoids SIMD-optimized functions having to sign-extend their line size argument manually to be able to do pointer arithmetic. Also adjust parameter names to be "stride" everywhere.
This commit is contained in:
parent
ab3554e1a7
commit
de452e5037
|
@ -24,9 +24,10 @@
|
|||
#include "libavcodec/avcodec.h"
|
||||
#include "libavcodec/pixblockdsp.h"
|
||||
|
||||
void ff_get_pixels_armv6(int16_t *block, const uint8_t *pixels, int stride);
|
||||
void ff_get_pixels_armv6(int16_t *block, const uint8_t *pixels,
|
||||
ptrdiff_t stride);
|
||||
void ff_diff_pixels_armv6(int16_t *block, const uint8_t *s1,
|
||||
const uint8_t *s2, int stride);
|
||||
const uint8_t *s2, ptrdiff_t stride);
|
||||
|
||||
av_cold void ff_pixblockdsp_init_arm(PixblockDSPContext *c,
|
||||
AVCodecContext *avctx,
|
||||
|
|
|
@ -45,7 +45,7 @@ typedef struct DVVideoContext {
|
|||
|
||||
uint8_t dv_zigzag[2][64];
|
||||
|
||||
void (*get_pixels)(int16_t *block, const uint8_t *pixels, int line_size);
|
||||
void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize);
|
||||
void (*fdct[2])(int16_t *block);
|
||||
void (*idct_put[2])(uint8_t *dest, int line_size, int16_t *block);
|
||||
me_cmp_func ildct_cmp;
|
||||
|
|
|
@ -197,7 +197,7 @@ static av_always_inline PutBitContext *dv_encode_ac(EncBlockInfo *bi,
|
|||
}
|
||||
|
||||
static av_always_inline int dv_guess_dct_mode(DVVideoContext *s, uint8_t *data,
|
||||
int linesize)
|
||||
ptrdiff_t linesize)
|
||||
{
|
||||
if (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) {
|
||||
int ps = s->ildct_cmp(NULL, data, NULL, linesize, 8) - 400;
|
||||
|
@ -234,8 +234,8 @@ static const int dv_weight_248[64] = {
|
|||
};
|
||||
|
||||
static av_always_inline int dv_init_enc_block(EncBlockInfo *bi, uint8_t *data,
|
||||
int linesize, DVVideoContext *s,
|
||||
int bias)
|
||||
ptrdiff_t linesize,
|
||||
DVVideoContext *s, int bias)
|
||||
{
|
||||
const int *weight;
|
||||
const uint8_t *zigzag_scan;
|
||||
|
@ -413,7 +413,8 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
|
|||
DVVideoContext *s = avctx->priv_data;
|
||||
DVwork_chunk *work_chunk = arg;
|
||||
int mb_index, i, j;
|
||||
int mb_x, mb_y, c_offset, linesize, y_stride;
|
||||
int mb_x, mb_y, c_offset;
|
||||
ptrdiff_t linesize, y_stride;
|
||||
uint8_t *y_ptr;
|
||||
uint8_t *dif;
|
||||
LOCAL_ALIGNED_8(uint8_t, scratch, [128]);
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "pixblockdsp_template.c"
|
||||
|
||||
static void diff_pixels_c(int16_t *restrict block, const uint8_t *s1,
|
||||
const uint8_t *s2, int stride)
|
||||
const uint8_t *s2, ptrdiff_t stride)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
typedef struct PixblockDSPContext {
|
||||
void (*get_pixels)(int16_t *block /* align 16 */,
|
||||
const uint8_t *pixels /* align 8 */,
|
||||
int line_size);
|
||||
ptrdiff_t stride);
|
||||
void (*diff_pixels)(int16_t *block /* align 16 */,
|
||||
const uint8_t *s1 /* align 8 */,
|
||||
const uint8_t *s2 /* align 8 */,
|
||||
int stride);
|
||||
ptrdiff_t stride);
|
||||
} PixblockDSPContext;
|
||||
|
||||
void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx);
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include "bit_depth_template.c"
|
||||
|
||||
static void FUNCC(get_pixels)(int16_t *restrict block, const uint8_t *_pixels,
|
||||
int line_size)
|
||||
ptrdiff_t stride)
|
||||
{
|
||||
const pixel *pixels = (const pixel *) _pixels;
|
||||
int i;
|
||||
|
@ -34,7 +34,7 @@ static void FUNCC(get_pixels)(int16_t *restrict block, const uint8_t *_pixels,
|
|||
block[5] = pixels[5];
|
||||
block[6] = pixels[6];
|
||||
block[7] = pixels[7];
|
||||
pixels += line_size / sizeof(pixel);
|
||||
pixels += stride / sizeof(pixel);
|
||||
block += 8;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#if HAVE_ALTIVEC && HAVE_BIGENDIAN
|
||||
|
||||
static void get_pixels_altivec(int16_t *restrict block, const uint8_t *pixels,
|
||||
int line_size)
|
||||
ptrdiff_t stride)
|
||||
{
|
||||
int i;
|
||||
vec_u8 perm = vec_lvsl(0, pixels);
|
||||
|
@ -56,12 +56,12 @@ static void get_pixels_altivec(int16_t *restrict block, const uint8_t *pixels,
|
|||
// Save the data to the block, we assume the block is 16-byte aligned.
|
||||
vec_st(shorts, i * 16, (vec_s16 *)block);
|
||||
|
||||
pixels += line_size;
|
||||
pixels += stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void diff_pixels_altivec(int16_t *restrict block, const uint8_t *s1,
|
||||
const uint8_t *s2, int stride)
|
||||
const uint8_t *s2, ptrdiff_t stride)
|
||||
{
|
||||
int i;
|
||||
vec_u8 perm1 = vec_lvsl(0, s1);
|
||||
|
@ -135,7 +135,7 @@ static void diff_pixels_altivec(int16_t *restrict block, const uint8_t *s1,
|
|||
|
||||
#if HAVE_VSX
|
||||
static void get_pixels_vsx(int16_t *restrict block, const uint8_t *pixels,
|
||||
int line_size)
|
||||
ptrdiff_t stride)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
|
@ -143,12 +143,12 @@ static void get_pixels_vsx(int16_t *restrict block, const uint8_t *pixels,
|
|||
|
||||
vec_vsx_st(shorts, i * 16, block);
|
||||
|
||||
pixels += line_size;
|
||||
pixels += stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void diff_pixels_vsx(int16_t *restrict block, const uint8_t *s1,
|
||||
const uint8_t *s2, int stride)
|
||||
const uint8_t *s2, ptrdiff_t stride)
|
||||
{
|
||||
int i;
|
||||
vec_s16 shorts1, shorts2;
|
||||
|
|
|
@ -26,9 +26,8 @@
|
|||
SECTION .text
|
||||
|
||||
INIT_MMX mmx
|
||||
; void ff_get_pixels_mmx(int16_t *block, const uint8_t *pixels, int line_size)
|
||||
; void ff_get_pixels_mmx(int16_t *block, const uint8_t *pixels, ptrdiff_t stride)
|
||||
cglobal get_pixels, 3,4
|
||||
movsxdifnidn r2, r2d
|
||||
add r0, 128
|
||||
mov r3, -128
|
||||
pxor m7, m7
|
||||
|
@ -52,7 +51,6 @@ cglobal get_pixels, 3,4
|
|||
|
||||
INIT_XMM sse2
|
||||
cglobal get_pixels, 3, 4
|
||||
movsxdifnidn r2, r2d
|
||||
lea r3, [r2*3]
|
||||
pxor m4, m4
|
||||
movh m0, [r1]
|
||||
|
@ -84,9 +82,8 @@ cglobal get_pixels, 3, 4
|
|||
|
||||
INIT_MMX mmx
|
||||
; void ff_diff_pixels_mmx(int16_t *block, const uint8_t *s1, const uint8_t *s2,
|
||||
; int stride);
|
||||
; ptrdiff_t stride);
|
||||
cglobal diff_pixels, 4,5
|
||||
movsxdifnidn r3, r3d
|
||||
pxor m7, m7
|
||||
add r0, 128
|
||||
mov r4, -128
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
#include "libavutil/x86/cpu.h"
|
||||
#include "libavcodec/pixblockdsp.h"
|
||||
|
||||
void ff_get_pixels_mmx(int16_t *block, const uint8_t *pixels, int line_size);
|
||||
void ff_get_pixels_sse2(int16_t *block, const uint8_t *pixels, int line_size);
|
||||
void ff_get_pixels_mmx(int16_t *block, const uint8_t *pixels, ptrdiff_t stride);
|
||||
void ff_get_pixels_sse2(int16_t *block, const uint8_t *pixels, ptrdiff_t stride);
|
||||
void ff_diff_pixels_mmx(int16_t *block, const uint8_t *s1, const uint8_t *s2,
|
||||
int stride);
|
||||
ptrdiff_t stride);
|
||||
|
||||
av_cold void ff_pixblockdsp_init_x86(PixblockDSPContext *c,
|
||||
AVCodecContext *avctx,
|
||||
|
|
Loading…
Reference in New Issue
Block a user