1
mirror of https://git.videolan.org/git/ffmpeg.git synced 2024-08-29 20:56:12 +02:00

Merge commit 'da5be235250a61d6994408b054e3e3acf2e0f90f'

* commit 'da5be235250a61d6994408b054e3e3acf2e0f90f':
  dsputil: Move RV40-specific bits into rv40dsp

Conflicts:
	libavcodec/dsputil.c
	libavcodec/rv40dsp.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2014-03-26 15:24:50 +01:00
commit b4f64c58fc
4 changed files with 85 additions and 85 deletions

View File

@ -1314,28 +1314,6 @@ static void wmv2_mspel8_h_lowpass(uint8_t *dst, uint8_t *src,
} }
} }
#if CONFIG_RV40_DECODER
void ff_put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
put_pixels16_xy2_8_c(dst, src, stride, 16);
}
void ff_avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
avg_pixels16_xy2_8_c(dst, src, stride, 16);
}
void ff_put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
put_pixels8_xy2_8_c(dst, src, stride, 8);
}
void ff_avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
avg_pixels8_xy2_8_c(dst, src, stride, 8);
}
#endif /* CONFIG_RV40_DECODER */
#if CONFIG_DIRAC_DECODER #if CONFIG_DIRAC_DECODER
#define DIRAC_MC(OPNAME)\ #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], int stride, int h)\

View File

@ -44,12 +44,6 @@ void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_put_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride); void ff_put_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_avg_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride); void ff_avg_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
/* RV40 functions */
void ff_put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy, void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
int dxx, int dxy, int dyx, int dyy, int shift, int r, int dxx, int dxy, int dyx, int dyy, int shift, int r,
int width, int height); int width, int height);

View File

@ -253,58 +253,6 @@ static inline void OPNAME ## _no_rnd_pixels16_l4_8(uint8_t *dst, \
src_stride2, src_stride3, \ src_stride2, src_stride3, \
src_stride4, h); \ src_stride4, h); \
} \ } \
\
static inline void OPNAME ## _pixels8_xy2_8_c(uint8_t *block, \
const uint8_t *pixels, \
ptrdiff_t line_size, \
int h) \
{ \
/* FIXME HIGH BIT DEPTH */ \
int j; \
\
for (j = 0; j < 2; j++) { \
int i; \
const uint32_t a = AV_RN32(pixels); \
const uint32_t b = AV_RN32(pixels + 1); \
uint32_t l0 = (a & 0x03030303UL) + \
(b & 0x03030303UL) + \
0x02020202UL; \
uint32_t h0 = ((a & 0xFCFCFCFCUL) >> 2) + \
((b & 0xFCFCFCFCUL) >> 2); \
uint32_t l1, h1; \
\
pixels += line_size; \
for (i = 0; i < h; i += 2) { \
uint32_t a = AV_RN32(pixels); \
uint32_t b = AV_RN32(pixels + 1); \
l1 = (a & 0x03030303UL) + \
(b & 0x03030303UL); \
h1 = ((a & 0xFCFCFCFCUL) >> 2) + \
((b & 0xFCFCFCFCUL) >> 2); \
OP(*((uint32_t *) block), \
h0 + h1 + (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \
pixels += line_size; \
block += line_size; \
a = AV_RN32(pixels); \
b = AV_RN32(pixels + 1); \
l0 = (a & 0x03030303UL) + \
(b & 0x03030303UL) + \
0x02020202UL; \
h0 = ((a & 0xFCFCFCFCUL) >> 2) + \
((b & 0xFCFCFCFCUL) >> 2); \
OP(*((uint32_t *) block), \
h0 + h1 + (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \
pixels += line_size; \
block += line_size; \
} \
pixels += 4 - line_size * (h + 1); \
block += 4 - line_size * h; \
} \
} \
\
CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_8_c, \
OPNAME ## _pixels8_xy2_8_c, \
8) \
#define op_avg(a, b) a = rnd_avg32(a, b) #define op_avg(a, b) a = rnd_avg32(a, b)
#define op_put(a, b) a = b #define op_put(a, b) a = b

View File

@ -24,12 +24,15 @@
* RV40 decoder motion compensation functions * RV40 decoder motion compensation functions
*/ */
#include "libavutil/common.h"
#include "libavutil/intreadwrite.h"
#include "avcodec.h" #include "avcodec.h"
#include "h264qpel.h" #include "h264qpel.h"
#include "mathops.h" #include "mathops.h"
#include "pixels.h"
#include "rnd_avg.h"
#include "rv34dsp.h" #include "rv34dsp.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "libavutil/common.h"
#define RV40_LOWPASS(OPNAME, OP) \ #define RV40_LOWPASS(OPNAME, OP) \
static av_unused void OPNAME ## rv40_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\ static av_unused void OPNAME ## rv40_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\
@ -204,6 +207,83 @@ RV40_MC(put_, 16)
RV40_MC(avg_, 8) RV40_MC(avg_, 8)
RV40_MC(avg_, 16) RV40_MC(avg_, 16)
#define PIXOP2(OPNAME, OP) \
static inline void OPNAME ## _pixels8_xy2_8_c(uint8_t *block, \
const uint8_t *pixels, \
ptrdiff_t line_size, \
int h) \
{ \
/* FIXME HIGH BIT DEPTH */ \
int j; \
\
for (j = 0; j < 2; j++) { \
int i; \
const uint32_t a = AV_RN32(pixels); \
const uint32_t b = AV_RN32(pixels + 1); \
uint32_t l0 = (a & 0x03030303UL) + \
(b & 0x03030303UL) + \
0x02020202UL; \
uint32_t h0 = ((a & 0xFCFCFCFCUL) >> 2) + \
((b & 0xFCFCFCFCUL) >> 2); \
uint32_t l1, h1; \
\
pixels += line_size; \
for (i = 0; i < h; i += 2) { \
uint32_t a = AV_RN32(pixels); \
uint32_t b = AV_RN32(pixels + 1); \
l1 = (a & 0x03030303UL) + \
(b & 0x03030303UL); \
h1 = ((a & 0xFCFCFCFCUL) >> 2) + \
((b & 0xFCFCFCFCUL) >> 2); \
OP(*((uint32_t *) block), \
h0 + h1 + (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \
pixels += line_size; \
block += line_size; \
a = AV_RN32(pixels); \
b = AV_RN32(pixels + 1); \
l0 = (a & 0x03030303UL) + \
(b & 0x03030303UL) + \
0x02020202UL; \
h0 = ((a & 0xFCFCFCFCUL) >> 2) + \
((b & 0xFCFCFCFCUL) >> 2); \
OP(*((uint32_t *) block), \
h0 + h1 + (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \
pixels += line_size; \
block += line_size; \
} \
pixels += 4 - line_size * (h + 1); \
block += 4 - line_size * h; \
} \
} \
\
CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_8_c, \
OPNAME ## _pixels8_xy2_8_c, \
8) \
#define op_avg(a, b) a = rnd_avg32(a, b)
#define op_put(a, b) a = b
PIXOP2(avg, op_avg)
PIXOP2(put, op_put)
#undef op_avg
#undef op_put
static void put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
put_pixels16_xy2_8_c(dst, src, stride, 16);
}
static void avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
avg_pixels16_xy2_8_c(dst, src, stride, 16);
}
static void put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
put_pixels8_xy2_8_c(dst, src, stride, 8);
}
static void avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride)
{
avg_pixels8_xy2_8_c(dst, src, stride, 8);
}
static const int rv40_bias[4][4] = { static const int rv40_bias[4][4] = {
{ 0, 16, 32, 16 }, { 0, 16, 32, 16 },
{ 32, 28, 32, 28 }, { 32, 28, 32, 28 },
@ -553,7 +633,7 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c)
c->put_pixels_tab[0][12] = put_rv40_qpel16_mc03_c; c->put_pixels_tab[0][12] = put_rv40_qpel16_mc03_c;
c->put_pixels_tab[0][13] = put_rv40_qpel16_mc13_c; c->put_pixels_tab[0][13] = put_rv40_qpel16_mc13_c;
c->put_pixels_tab[0][14] = put_rv40_qpel16_mc23_c; c->put_pixels_tab[0][14] = put_rv40_qpel16_mc23_c;
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_c; c->put_pixels_tab[0][15] = put_rv40_qpel16_mc33_c;
c->avg_pixels_tab[0][ 0] = qpel.avg_h264_qpel_pixels_tab[0][0]; c->avg_pixels_tab[0][ 0] = qpel.avg_h264_qpel_pixels_tab[0][0];
c->avg_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c; c->avg_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c;
c->avg_pixels_tab[0][ 2] = qpel.avg_h264_qpel_pixels_tab[0][2]; c->avg_pixels_tab[0][ 2] = qpel.avg_h264_qpel_pixels_tab[0][2];
@ -569,7 +649,7 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c)
c->avg_pixels_tab[0][12] = avg_rv40_qpel16_mc03_c; c->avg_pixels_tab[0][12] = avg_rv40_qpel16_mc03_c;
c->avg_pixels_tab[0][13] = avg_rv40_qpel16_mc13_c; c->avg_pixels_tab[0][13] = avg_rv40_qpel16_mc13_c;
c->avg_pixels_tab[0][14] = avg_rv40_qpel16_mc23_c; c->avg_pixels_tab[0][14] = avg_rv40_qpel16_mc23_c;
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_c; c->avg_pixels_tab[0][15] = avg_rv40_qpel16_mc33_c;
c->put_pixels_tab[1][ 0] = qpel.put_h264_qpel_pixels_tab[1][0]; c->put_pixels_tab[1][ 0] = qpel.put_h264_qpel_pixels_tab[1][0];
c->put_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c; c->put_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c;
c->put_pixels_tab[1][ 2] = qpel.put_h264_qpel_pixels_tab[1][2]; c->put_pixels_tab[1][ 2] = qpel.put_h264_qpel_pixels_tab[1][2];
@ -585,7 +665,7 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c)
c->put_pixels_tab[1][12] = put_rv40_qpel8_mc03_c; c->put_pixels_tab[1][12] = put_rv40_qpel8_mc03_c;
c->put_pixels_tab[1][13] = put_rv40_qpel8_mc13_c; c->put_pixels_tab[1][13] = put_rv40_qpel8_mc13_c;
c->put_pixels_tab[1][14] = put_rv40_qpel8_mc23_c; c->put_pixels_tab[1][14] = put_rv40_qpel8_mc23_c;
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_c; c->put_pixels_tab[1][15] = put_rv40_qpel8_mc33_c;
c->avg_pixels_tab[1][ 0] = qpel.avg_h264_qpel_pixels_tab[1][0]; c->avg_pixels_tab[1][ 0] = qpel.avg_h264_qpel_pixels_tab[1][0];
c->avg_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c; c->avg_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c;
c->avg_pixels_tab[1][ 2] = qpel.avg_h264_qpel_pixels_tab[1][2]; c->avg_pixels_tab[1][ 2] = qpel.avg_h264_qpel_pixels_tab[1][2];
@ -601,7 +681,7 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c)
c->avg_pixels_tab[1][12] = avg_rv40_qpel8_mc03_c; c->avg_pixels_tab[1][12] = avg_rv40_qpel8_mc03_c;
c->avg_pixels_tab[1][13] = avg_rv40_qpel8_mc13_c; c->avg_pixels_tab[1][13] = avg_rv40_qpel8_mc13_c;
c->avg_pixels_tab[1][14] = avg_rv40_qpel8_mc23_c; c->avg_pixels_tab[1][14] = avg_rv40_qpel8_mc23_c;
c->avg_pixels_tab[1][15] = ff_avg_rv40_qpel8_mc33_c; c->avg_pixels_tab[1][15] = avg_rv40_qpel8_mc33_c;
c->put_chroma_pixels_tab[0] = put_rv40_chroma_mc8_c; c->put_chroma_pixels_tab[0] = put_rv40_chroma_mc8_c;
c->put_chroma_pixels_tab[1] = put_rv40_chroma_mc4_c; c->put_chroma_pixels_tab[1] = put_rv40_chroma_mc4_c;