pixblockdsp: Change type of stride parameters to ptrdiff_t

Message ID 1473338065-13809-1-git-send-email-diego@biurrun.de
State New
Headers show

Commit Message

Diego Biurrun Sept. 8, 2016, 12:34 p.m.
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.
---

Added some missed changes to dv that lived in another patch.

 libavcodec/arm/pixblockdsp_init_arm.c |  5 +++--
 libavcodec/dv.h                       |  2 +-
 libavcodec/dvenc.c                    |  7 ++++---
 libavcodec/pixblockdsp.c              |  2 +-
 libavcodec/pixblockdsp.h              |  4 ++--
 libavcodec/pixblockdsp_template.c     |  4 ++--
 libavcodec/ppc/pixblockdsp.c          | 12 ++++++------
 libavcodec/x86/pixblockdsp.asm        |  7 ++-----
 libavcodec/x86/pixblockdsp_init.c     |  6 +++---
 9 files changed, 24 insertions(+), 25 deletions(-)

Comments

Vittorio Giovara Sept. 8, 2016, 2:10 p.m. | #1
On Thu, Sep 8, 2016 at 2:34 PM, Diego Biurrun <diego@biurrun.de> wrote:
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index e02f349..d68f708 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -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]);

should these two linesize vars be renamed to stride too?
Diego Biurrun Sept. 8, 2016, 3:03 p.m. | #2
On Thu, Sep 08, 2016 at 04:10:10PM +0200, Vittorio Giovara wrote:
> On Thu, Sep 8, 2016 at 2:34 PM, Diego Biurrun <diego@biurrun.de> wrote:
> > diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> > index e02f349..d68f708 100644
> > --- a/libavcodec/dvenc.c
> > +++ b/libavcodec/dvenc.c
> > @@ -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]);
> 
> should these two linesize vars be renamed to stride too?

dv uses linesize everywhere, I'll keep it that way.

Diego

Patch

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..8286af2 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 stride);
     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..d68f708 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -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 9cac70e..53ae401 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,