Commit b4f64c58 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'da5be235'

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

Conflicts:
	libavcodec/dsputil.c
	libavcodec/rv40dsp.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 6967cf3c da5be235
...@@ -1314,28 +1314,6 @@ static void wmv2_mspel8_h_lowpass(uint8_t *dst, uint8_t *src, ...@@ -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)\
......
...@@ -44,12 +44,6 @@ void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride); ...@@ -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);
......
...@@ -253,58 +253,6 @@ static inline void OPNAME ## _no_rnd_pixels16_l4_8(uint8_t *dst, \ ...@@ -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
......
...@@ -24,12 +24,15 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment