| @@ -883,7 +883,7 @@ static int binkb_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, | |||||
| c->dsp.clear_block(block); | c->dsp.clear_block(block); | ||||
| v = binkb_get_value(c, BINKB_SRC_INTER_COEFS); | v = binkb_get_value(c, BINKB_SRC_INTER_COEFS); | ||||
| read_residue(gb, block, v); | read_residue(gb, block, v); | ||||
| c->dsp.add_pixels8(dst, block, stride); | |||||
| c->bdsp.add_pixels8(dst, block, stride); | |||||
| break; | break; | ||||
| case 4: | case 4: | ||||
| xoff = binkb_get_value(c, BINKB_SRC_X_OFF); | xoff = binkb_get_value(c, BINKB_SRC_X_OFF); | ||||
| @@ -1120,7 +1120,7 @@ static int bink_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, | |||||
| c->dsp.clear_block(block); | c->dsp.clear_block(block); | ||||
| v = get_bits(gb, 7); | v = get_bits(gb, 7); | ||||
| read_residue(gb, block, v); | read_residue(gb, block, v); | ||||
| c->dsp.add_pixels8(dst, block, stride); | |||||
| c->bdsp.add_pixels8(dst, block, stride); | |||||
| break; | break; | ||||
| case INTRA_BLOCK: | case INTRA_BLOCK: | ||||
| memset(dctblock, 0, sizeof(*dctblock) * 64); | memset(dctblock, 0, sizeof(*dctblock) * 64); | ||||
| @@ -24,6 +24,7 @@ | |||||
| * Bink DSP routines | * Bink DSP routines | ||||
| */ | */ | ||||
| #include "config.h" | |||||
| #include "libavutil/attributes.h" | #include "libavutil/attributes.h" | ||||
| #include "binkdsp.h" | #include "binkdsp.h" | ||||
| @@ -128,9 +129,29 @@ static void scale_block_c(const uint8_t src[64]/*align 8*/, uint8_t *dst/*align | |||||
| } | } | ||||
| } | } | ||||
| static void add_pixels8_c(uint8_t *restrict pixels, int16_t *block, | |||||
| int line_size) | |||||
| { | |||||
| int i; | |||||
| for (i = 0; i < 8; i++) { | |||||
| pixels[0] += block[0]; | |||||
| pixels[1] += block[1]; | |||||
| pixels[2] += block[2]; | |||||
| pixels[3] += block[3]; | |||||
| pixels[4] += block[4]; | |||||
| pixels[5] += block[5]; | |||||
| pixels[6] += block[6]; | |||||
| pixels[7] += block[7]; | |||||
| pixels += line_size; | |||||
| block += 8; | |||||
| } | |||||
| } | |||||
| av_cold void ff_binkdsp_init(BinkDSPContext *c) | av_cold void ff_binkdsp_init(BinkDSPContext *c) | ||||
| { | { | ||||
| c->idct_add = bink_idct_add_c; | c->idct_add = bink_idct_add_c; | ||||
| c->idct_put = bink_idct_put_c; | c->idct_put = bink_idct_put_c; | ||||
| c->scale_block = scale_block_c; | c->scale_block = scale_block_c; | ||||
| c->add_pixels8 = add_pixels8_c; | |||||
| } | } | ||||
| @@ -33,6 +33,7 @@ typedef struct BinkDSPContext { | |||||
| void (*idct_put)(uint8_t *dest/*align 8*/, int line_size, int32_t *block/*align 16*/); | void (*idct_put)(uint8_t *dest/*align 8*/, int line_size, int32_t *block/*align 16*/); | ||||
| void (*idct_add)(uint8_t *dest/*align 8*/, int line_size, int32_t *block/*align 16*/); | void (*idct_add)(uint8_t *dest/*align 8*/, int line_size, int32_t *block/*align 16*/); | ||||
| void (*scale_block)(const uint8_t src[64]/*align 8*/, uint8_t *dst/*align 8*/, int linesize); | void (*scale_block)(const uint8_t src[64]/*align 8*/, uint8_t *dst/*align 8*/, int linesize); | ||||
| void (*add_pixels8)(uint8_t *pixels, int16_t *block, int line_size); | |||||
| } BinkDSPContext; | } BinkDSPContext; | ||||
| void ff_binkdsp_init(BinkDSPContext *c); | void ff_binkdsp_init(BinkDSPContext *c); | ||||
| @@ -347,25 +347,6 @@ static void put_signed_pixels_clamped_c(const int16_t *block, | |||||
| } | } | ||||
| } | } | ||||
| static void add_pixels8_c(uint8_t *restrict pixels, int16_t *block, | |||||
| int line_size) | |||||
| { | |||||
| int i; | |||||
| for (i = 0; i < 8; i++) { | |||||
| pixels[0] += block[0]; | |||||
| pixels[1] += block[1]; | |||||
| pixels[2] += block[2]; | |||||
| pixels[3] += block[3]; | |||||
| pixels[4] += block[4]; | |||||
| pixels[5] += block[5]; | |||||
| pixels[6] += block[6]; | |||||
| pixels[7] += block[7]; | |||||
| pixels += line_size; | |||||
| block += 8; | |||||
| } | |||||
| } | |||||
| static void add_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels, | static void add_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels, | ||||
| int line_size) | int line_size) | ||||
| { | { | ||||
| @@ -2290,8 +2271,6 @@ av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx) | |||||
| c->shrink[2] = ff_shrink44; | c->shrink[2] = ff_shrink44; | ||||
| c->shrink[3] = ff_shrink88; | c->shrink[3] = ff_shrink88; | ||||
| c->add_pixels8 = add_pixels8_c; | |||||
| c->draw_edges = draw_edges_8_c; | c->draw_edges = draw_edges_8_c; | ||||
| c->clear_block = clear_block_8_c; | c->clear_block = clear_block_8_c; | ||||
| @@ -136,7 +136,6 @@ typedef struct DSPContext { | |||||
| void (*add_pixels_clamped)(const int16_t *block /* align 16 */, | void (*add_pixels_clamped)(const int16_t *block /* align 16 */, | ||||
| uint8_t *pixels /* align 8 */, | uint8_t *pixels /* align 8 */, | ||||
| int line_size); | int line_size); | ||||
| void (*add_pixels8)(uint8_t *pixels, int16_t *block, int line_size); | |||||
| int (*sum_abs_dctelem)(int16_t *block /* align 16 */); | int (*sum_abs_dctelem)(int16_t *block /* align 16 */); | ||||
| /** | /** | ||||
| * translational global motion compensation. | * translational global motion compensation. | ||||