mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-02 20:35:37 +02:00
RV40: reuse some H.264 motion compensation functions in RV40.
Since RV40 is based on H.264, it uses the same interpolation filters and functions for halfpel interpolation in one direction can be reused. Unfortunately other cases are implemented differently and produce slightly different output because of rounding. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
22141917a9
commit
a80852316e
@ -106,10 +106,6 @@ static void OPNAME ## rv40_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, i
|
|||||||
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\
|
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
static void OPNAME ## rv40_qpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\
|
|
||||||
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\
|
|
||||||
}\
|
|
||||||
\
|
|
||||||
static void OPNAME ## rv40_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\
|
static void OPNAME ## rv40_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\
|
||||||
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\
|
OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\
|
||||||
}\
|
}\
|
||||||
@ -139,10 +135,6 @@ static void OPNAME ## rv40_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, i
|
|||||||
OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\
|
OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
static void OPNAME ## rv40_qpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\
|
|
||||||
OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\
|
|
||||||
}\
|
|
||||||
\
|
|
||||||
static void OPNAME ## rv40_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
|
static void OPNAME ## rv40_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
|
||||||
uint8_t full[SIZE*(SIZE+5)];\
|
uint8_t full[SIZE*(SIZE+5)];\
|
||||||
uint8_t * const full_mid = full + SIZE*2;\
|
uint8_t * const full_mid = full + SIZE*2;\
|
||||||
@ -305,13 +297,13 @@ RV40_WEIGHT_FUNC(8)
|
|||||||
av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
|
av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
|
||||||
c->put_pixels_tab[0][ 0] = dsp->put_h264_qpel_pixels_tab[0][0];
|
c->put_pixels_tab[0][ 0] = dsp->put_h264_qpel_pixels_tab[0][0];
|
||||||
c->put_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c;
|
c->put_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c;
|
||||||
c->put_pixels_tab[0][ 2] = put_rv40_qpel16_mc20_c;
|
c->put_pixels_tab[0][ 2] = dsp->put_h264_qpel_pixels_tab[0][2];
|
||||||
c->put_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c;
|
c->put_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c;
|
||||||
c->put_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c;
|
c->put_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c;
|
||||||
c->put_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c;
|
c->put_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c;
|
||||||
c->put_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c;
|
c->put_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c;
|
||||||
c->put_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c;
|
c->put_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c;
|
||||||
c->put_pixels_tab[0][ 8] = put_rv40_qpel16_mc02_c;
|
c->put_pixels_tab[0][ 8] = dsp->put_h264_qpel_pixels_tab[0][8];
|
||||||
c->put_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c;
|
c->put_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c;
|
||||||
c->put_pixels_tab[0][10] = put_rv40_qpel16_mc22_c;
|
c->put_pixels_tab[0][10] = put_rv40_qpel16_mc22_c;
|
||||||
c->put_pixels_tab[0][11] = put_rv40_qpel16_mc32_c;
|
c->put_pixels_tab[0][11] = put_rv40_qpel16_mc32_c;
|
||||||
@ -321,13 +313,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
|
|||||||
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_c;
|
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_c;
|
||||||
c->avg_pixels_tab[0][ 0] = dsp->avg_h264_qpel_pixels_tab[0][0];
|
c->avg_pixels_tab[0][ 0] = dsp->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] = avg_rv40_qpel16_mc20_c;
|
c->avg_pixels_tab[0][ 2] = dsp->avg_h264_qpel_pixels_tab[0][2];
|
||||||
c->avg_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c;
|
c->avg_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c;
|
||||||
c->avg_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c;
|
c->avg_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c;
|
||||||
c->avg_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c;
|
c->avg_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c;
|
||||||
c->avg_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c;
|
c->avg_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c;
|
||||||
c->avg_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c;
|
c->avg_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c;
|
||||||
c->avg_pixels_tab[0][ 8] = avg_rv40_qpel16_mc02_c;
|
c->avg_pixels_tab[0][ 8] = dsp->avg_h264_qpel_pixels_tab[0][8];
|
||||||
c->avg_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c;
|
c->avg_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c;
|
||||||
c->avg_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c;
|
c->avg_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c;
|
||||||
c->avg_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c;
|
c->avg_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c;
|
||||||
@ -337,13 +329,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
|
|||||||
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_c;
|
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_c;
|
||||||
c->put_pixels_tab[1][ 0] = dsp->put_h264_qpel_pixels_tab[1][0];
|
c->put_pixels_tab[1][ 0] = dsp->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] = put_rv40_qpel8_mc20_c;
|
c->put_pixels_tab[1][ 2] = dsp->put_h264_qpel_pixels_tab[1][2];
|
||||||
c->put_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c;
|
c->put_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c;
|
||||||
c->put_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c;
|
c->put_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c;
|
||||||
c->put_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c;
|
c->put_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c;
|
||||||
c->put_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c;
|
c->put_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c;
|
||||||
c->put_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c;
|
c->put_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c;
|
||||||
c->put_pixels_tab[1][ 8] = put_rv40_qpel8_mc02_c;
|
c->put_pixels_tab[1][ 8] = dsp->put_h264_qpel_pixels_tab[1][8];
|
||||||
c->put_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c;
|
c->put_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c;
|
||||||
c->put_pixels_tab[1][10] = put_rv40_qpel8_mc22_c;
|
c->put_pixels_tab[1][10] = put_rv40_qpel8_mc22_c;
|
||||||
c->put_pixels_tab[1][11] = put_rv40_qpel8_mc32_c;
|
c->put_pixels_tab[1][11] = put_rv40_qpel8_mc32_c;
|
||||||
@ -353,13 +345,13 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
|
|||||||
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_c;
|
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_c;
|
||||||
c->avg_pixels_tab[1][ 0] = dsp->avg_h264_qpel_pixels_tab[1][0];
|
c->avg_pixels_tab[1][ 0] = dsp->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] = avg_rv40_qpel8_mc20_c;
|
c->avg_pixels_tab[1][ 2] = dsp->avg_h264_qpel_pixels_tab[1][2];
|
||||||
c->avg_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c;
|
c->avg_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c;
|
||||||
c->avg_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c;
|
c->avg_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c;
|
||||||
c->avg_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c;
|
c->avg_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c;
|
||||||
c->avg_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c;
|
c->avg_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c;
|
||||||
c->avg_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c;
|
c->avg_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c;
|
||||||
c->avg_pixels_tab[1][ 8] = avg_rv40_qpel8_mc02_c;
|
c->avg_pixels_tab[1][ 8] = dsp->avg_h264_qpel_pixels_tab[1][8];
|
||||||
c->avg_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c;
|
c->avg_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c;
|
||||||
c->avg_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c;
|
c->avg_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c;
|
||||||
c->avg_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c;
|
c->avg_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user