You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
vp56: 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.
This commit is contained in:
@@ -25,8 +25,8 @@
|
|||||||
#include "libavcodec/avcodec.h"
|
#include "libavcodec/avcodec.h"
|
||||||
#include "libavcodec/vp56dsp.h"
|
#include "libavcodec/vp56dsp.h"
|
||||||
|
|
||||||
void ff_vp6_edge_filter_hor_neon(uint8_t *yuv, int stride, int t);
|
void ff_vp6_edge_filter_hor_neon(uint8_t *yuv, ptrdiff_t stride, int t);
|
||||||
void ff_vp6_edge_filter_ver_neon(uint8_t *yuv, int stride, int t);
|
void ff_vp6_edge_filter_ver_neon(uint8_t *yuv, ptrdiff_t stride, int t);
|
||||||
|
|
||||||
av_cold void ff_vp6dsp_init_arm(VP56DSPContext *s, enum AVCodecID codec)
|
av_cold void ff_vp6dsp_init_arm(VP56DSPContext *s, enum AVCodecID codec)
|
||||||
{
|
{
|
||||||
|
@@ -72,7 +72,7 @@ typedef struct VP56mv {
|
|||||||
typedef void (*VP56ParseVectorAdjustment)(VP56Context *s,
|
typedef void (*VP56ParseVectorAdjustment)(VP56Context *s,
|
||||||
VP56mv *vect);
|
VP56mv *vect);
|
||||||
typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src,
|
typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src,
|
||||||
int offset1, int offset2, int stride,
|
int offset1, int offset2, ptrdiff_t stride,
|
||||||
VP56mv mv, int mask, int select, int luma);
|
VP56mv mv, int mask, int select, int luma);
|
||||||
typedef void (*VP56ParseCoeff)(VP56Context *s);
|
typedef void (*VP56ParseCoeff)(VP56Context *s);
|
||||||
typedef void (*VP56DefaultModelsInit)(VP56Context *s);
|
typedef void (*VP56DefaultModelsInit)(VP56Context *s);
|
||||||
@@ -178,7 +178,7 @@ struct vp56_context {
|
|||||||
int flip; /* are we flipping ? */
|
int flip; /* are we flipping ? */
|
||||||
int frbi; /* first row block index in MB */
|
int frbi; /* first row block index in MB */
|
||||||
int srbi; /* second row block index in MB */
|
int srbi; /* second row block index in MB */
|
||||||
int stride[4]; /* stride for each plan */
|
ptrdiff_t stride[4]; /* stride for each plan */
|
||||||
|
|
||||||
const uint8_t *vp56_coord_div;
|
const uint8_t *vp56_coord_div;
|
||||||
VP56ParseVectorAdjustment parse_vector_adjustment;
|
VP56ParseVectorAdjustment parse_vector_adjustment;
|
||||||
|
@@ -58,7 +58,8 @@ static int vp6_adjust(int v, int t)
|
|||||||
|
|
||||||
|
|
||||||
#define VP56_EDGE_FILTER(pfx, suf, pix_inc, line_inc) \
|
#define VP56_EDGE_FILTER(pfx, suf, pix_inc, line_inc) \
|
||||||
static void pfx##_edge_filter_##suf(uint8_t *yuv, int stride, int t) \
|
static void pfx ## _edge_filter_ ## suf(uint8_t *yuv, ptrdiff_t stride, \
|
||||||
|
int t) \
|
||||||
{ \
|
{ \
|
||||||
int pix2_inc = 2 * pix_inc; \
|
int pix2_inc = 2 * pix_inc; \
|
||||||
int i, v; \
|
int i, v; \
|
||||||
|
@@ -21,18 +21,20 @@
|
|||||||
#ifndef AVCODEC_VP56DSP_H
|
#ifndef AVCODEC_VP56DSP_H
|
||||||
#define AVCODEC_VP56DSP_H
|
#define AVCODEC_VP56DSP_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
|
||||||
typedef struct VP56DSPContext {
|
typedef struct VP56DSPContext {
|
||||||
void (*edge_filter_hor)(uint8_t *yuv, int stride, int t);
|
void (*edge_filter_hor)(uint8_t *yuv, ptrdiff_t stride, int t);
|
||||||
void (*edge_filter_ver)(uint8_t *yuv, int stride, int t);
|
void (*edge_filter_ver)(uint8_t *yuv, ptrdiff_t stride, int t);
|
||||||
|
|
||||||
void (*vp6_filter_diag4)(uint8_t *dst, uint8_t *src, int stride,
|
void (*vp6_filter_diag4)(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
const int16_t *h_weights,const int16_t *v_weights);
|
const int16_t *h_weights,const int16_t *v_weights);
|
||||||
} VP56DSPContext;
|
} VP56DSPContext;
|
||||||
|
|
||||||
void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride,
|
void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
const int16_t *h_weights, const int16_t *v_weights);
|
const int16_t *h_weights, const int16_t *v_weights);
|
||||||
|
|
||||||
void ff_vp56dsp_init(VP56DSPContext *s, enum AVCodecID codec);
|
void ff_vp56dsp_init(VP56DSPContext *s, enum AVCodecID codec);
|
||||||
|
@@ -514,7 +514,7 @@ static void vp6_parse_coeff(VP56Context *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vp6_block_variance(uint8_t *src, int stride)
|
static int vp6_block_variance(uint8_t *src, ptrdiff_t stride)
|
||||||
{
|
{
|
||||||
int sum = 0, square_sum = 0;
|
int sum = 0, square_sum = 0;
|
||||||
int y, x;
|
int y, x;
|
||||||
@@ -529,7 +529,7 @@ static int vp6_block_variance(uint8_t *src, int stride)
|
|||||||
return (16*square_sum - sum*sum) >> 8;
|
return (16*square_sum - sum*sum) >> 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vp6_filter_hv4(uint8_t *dst, uint8_t *src, int stride,
|
static void vp6_filter_hv4(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
int delta, const int16_t *weights)
|
int delta, const int16_t *weights)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
@@ -547,7 +547,7 @@ static void vp6_filter_hv4(uint8_t *dst, uint8_t *src, int stride,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void vp6_filter_diag2(VP56Context *s, uint8_t *dst, uint8_t *src,
|
static void vp6_filter_diag2(VP56Context *s, uint8_t *dst, uint8_t *src,
|
||||||
int stride, int h_weight, int v_weight)
|
ptrdiff_t stride, int h_weight, int v_weight)
|
||||||
{
|
{
|
||||||
uint8_t *tmp = s->edge_emu_buffer+16;
|
uint8_t *tmp = s->edge_emu_buffer+16;
|
||||||
s->h264chroma.put_h264_chroma_pixels_tab[0](tmp, src, stride, 9, h_weight, 0);
|
s->h264chroma.put_h264_chroma_pixels_tab[0](tmp, src, stride, 9, h_weight, 0);
|
||||||
@@ -555,7 +555,7 @@ static void vp6_filter_diag2(VP56Context *s, uint8_t *dst, uint8_t *src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void vp6_filter(VP56Context *s, uint8_t *dst, uint8_t *src,
|
static void vp6_filter(VP56Context *s, uint8_t *dst, uint8_t *src,
|
||||||
int offset1, int offset2, int stride,
|
int offset1, int offset2, ptrdiff_t stride,
|
||||||
VP56mv mv, int mask, int select, int luma)
|
VP56mv mv, int mask, int select, int luma)
|
||||||
{
|
{
|
||||||
int filter4 = 0;
|
int filter4 = 0;
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
#include "vp56dsp.h"
|
#include "vp56dsp.h"
|
||||||
|
|
||||||
|
|
||||||
void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride,
|
void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
const int16_t *h_weights, const int16_t *v_weights)
|
const int16_t *h_weights, const int16_t *v_weights)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
@@ -115,7 +115,7 @@ SECTION .text
|
|||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro vp6_filter_diag4 0
|
%macro vp6_filter_diag4 0
|
||||||
; void ff_vp6_filter_diag4_<opt>(uint8_t *dst, uint8_t *src, int stride,
|
; void ff_vp6_filter_diag4_<opt>(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
; const int16_t h_weight[4], const int16_t v_weights[4])
|
; const int16_t h_weight[4], const int16_t v_weights[4])
|
||||||
cglobal vp6_filter_diag4, 5, 7, 8
|
cglobal vp6_filter_diag4, 5, 7, 8
|
||||||
mov r5, rsp ; backup stack pointer
|
mov r5, rsp ; backup stack pointer
|
||||||
@@ -126,9 +126,6 @@ cglobal vp6_filter_diag4, 5, 7, 8
|
|||||||
sub rsp, 8*15
|
sub rsp, 8*15
|
||||||
movq m6, [pw_64]
|
movq m6, [pw_64]
|
||||||
%endif
|
%endif
|
||||||
%if ARCH_X86_64
|
|
||||||
movsxd r2, r2d
|
|
||||||
%endif
|
|
||||||
|
|
||||||
sub r1, r2
|
sub r1, r2
|
||||||
|
|
||||||
|
@@ -25,9 +25,9 @@
|
|||||||
#include "libavutil/x86/cpu.h"
|
#include "libavutil/x86/cpu.h"
|
||||||
#include "libavcodec/vp56dsp.h"
|
#include "libavcodec/vp56dsp.h"
|
||||||
|
|
||||||
void ff_vp6_filter_diag4_mmx(uint8_t *dst, uint8_t *src, int stride,
|
void ff_vp6_filter_diag4_mmx(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
const int16_t *h_weights,const int16_t *v_weights);
|
const int16_t *h_weights,const int16_t *v_weights);
|
||||||
void ff_vp6_filter_diag4_sse2(uint8_t *dst, uint8_t *src, int stride,
|
void ff_vp6_filter_diag4_sse2(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
|
||||||
const int16_t *h_weights,const int16_t *v_weights);
|
const int16_t *h_weights,const int16_t *v_weights);
|
||||||
|
|
||||||
av_cold void ff_vp6dsp_init_x86(VP56DSPContext* c, enum AVCodecID codec)
|
av_cold void ff_vp6dsp_init_x86(VP56DSPContext* c, enum AVCodecID codec)
|
||||||
|
Reference in New Issue
Block a user