summaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorDiego Biurrun <diego@biurrun.de>2016-09-06 16:06:12 +0200
committerDiego Biurrun <diego@biurrun.de>2016-09-14 14:12:36 +0200
commitde452e503734ebb0fdbce86e9d16693b3530fad3 (patch)
tree4a8055e1c5158b8d51c4f17b99c4befe9d45a19d /libavcodec
parentab3554e1a7c04a5ea30f9c905de92348478ef7c8 (diff)
downloadffmpeg-streaming-de452e503734ebb0fdbce86e9d16693b3530fad3.zip
ffmpeg-streaming-de452e503734ebb0fdbce86e9d16693b3530fad3.tar.gz
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.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/arm/pixblockdsp_init_arm.c5
-rw-r--r--libavcodec/dv.h2
-rw-r--r--libavcodec/dvenc.c9
-rw-r--r--libavcodec/pixblockdsp.c2
-rw-r--r--libavcodec/pixblockdsp.h4
-rw-r--r--libavcodec/pixblockdsp_template.c4
-rw-r--r--libavcodec/ppc/pixblockdsp.c12
-rw-r--r--libavcodec/x86/pixblockdsp.asm7
-rw-r--r--libavcodec/x86/pixblockdsp_init.c6
9 files changed, 25 insertions, 26 deletions
diff --git a/libavcodec/arm/pixblockdsp_init_arm.c b/libavcodec/arm/pixblockdsp_init_arm.c
index f20769b..bb32631 100644
--- a/libavcodec/arm/pixblockdsp_init_arm.c
+++ b/libavcodec/arm/pixblockdsp_init_arm.c
@@ -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,
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 1d1650c..f2c7ecf 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -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;
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index e02f349..399c434 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -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]);
diff --git a/libavcodec/pixblockdsp.c b/libavcodec/pixblockdsp.c
index 71423f9..9d68d26 100644
--- a/libavcodec/pixblockdsp.c
+++ b/libavcodec/pixblockdsp.c
@@ -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;
diff --git a/libavcodec/pixblockdsp.h b/libavcodec/pixblockdsp.h
index 8094d14..a9d5473 100644
--- a/libavcodec/pixblockdsp.h
+++ b/libavcodec/pixblockdsp.h
@@ -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);
diff --git a/libavcodec/pixblockdsp_template.c b/libavcodec/pixblockdsp_template.c
index 71d3cf1..3d86e2c 100644
--- a/libavcodec/pixblockdsp_template.c
+++ b/libavcodec/pixblockdsp_template.c
@@ -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;
}
}
diff --git a/libavcodec/ppc/pixblockdsp.c b/libavcodec/ppc/pixblockdsp.c
index 00e7949..96e7024 100644
--- a/libavcodec/ppc/pixblockdsp.c
+++ b/libavcodec/ppc/pixblockdsp.c
@@ -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;
diff --git a/libavcodec/x86/pixblockdsp.asm b/libavcodec/x86/pixblockdsp.asm
index c8fd1b2..8712442 100644
--- a/libavcodec/x86/pixblockdsp.asm
+++ b/libavcodec/x86/pixblockdsp.asm
@@ -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
diff --git a/libavcodec/x86/pixblockdsp_init.c b/libavcodec/x86/pixblockdsp_init.c
index 9582e0b..faa5141 100644
--- a/libavcodec/x86/pixblockdsp_init.c
+++ b/libavcodec/x86/pixblockdsp_init.c
@@ -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,
OpenPOWER on IntegriCloud