Adds a diff_pixels_unaligned() Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872503
Showing the changes to libavcodec (4 of 4 files). Show all
Unified · Split
| @@ -628,7 +628,7 @@ static int dct_sad8x8_c(MpegEncContext *s, uint8_t *src1, · 627 unmodified lines | |||
| 628 | 628 | ||
| 629 | av_assert2(h == 8); | 629 | av_assert2(h == 8); |
| 630 | 630 | ||
| 631 | s->pdsp.diff_pixels(temp, src1, src2, stride); | 631 | s->pdsp.diff_pixels_unaligned(temp, src1, src2, stride); |
| 632 | s->fdsp.fdct(temp); | 632 | s->fdsp.fdct(temp); |
| 633 | return s->mecc.sum_abs_dctelem(temp); | 633 | return s->mecc.sum_abs_dctelem(temp); |
| 634 | } | 634 | } |
| @@ -668,7 +668,7 @@ static int dct264_sad8x8_c(MpegEncContext *s, uint8_t *src1, · 33 unmodified lines | |||
| 668 | int16_t dct[8][8]; | 668 | int16_t dct[8][8]; |
| 669 | int i, sum = 0; | 669 | int i, sum = 0; |
| 670 | 670 | ||
| 671 | s->pdsp.diff_pixels(dct[0], src1, src2, stride); | 671 | s->pdsp.diff_pixels_unaligned(dct[0], src1, src2, stride); |
| 672 | 672 | ||
| 673 | #define SRC(x) dct[i][x] | 673 | #define SRC(x) dct[i][x] |
| 674 | #define DST(x, v) dct[i][x] = v | 674 | #define DST(x, v) dct[i][x] = v |
| @@ -695,7 +695,7 @@ static int dct_max8x8_c(MpegEncContext *s, uint8_t *src1, · 20 unmodified lines | |||
| 695 | 695 | ||
| 696 | av_assert2(h == 8); | 696 | av_assert2(h == 8); |
| 697 | 697 | ||
| 698 | s->pdsp.diff_pixels(temp, src1, src2, stride); | 698 | s->pdsp.diff_pixels_unaligned(temp, src1, src2, stride); |
| 699 | s->fdsp.fdct(temp); | 699 | s->fdsp.fdct(temp); |
| 700 | 700 | ||
| 701 | for (i = 0; i < 64; i++) | 701 | for (i = 0; i < 64; i++) |
| @@ -714,7 +714,7 @@ static int quant_psnr8x8_c(MpegEncContext *s, uint8_t *src1, · 12 unmodified lines | |||
| 714 | av_assert2(h == 8); | 714 | av_assert2(h == 8); |
| 715 | s->mb_intra = 0; | 715 | s->mb_intra = 0; |
| 716 | 716 | ||
| 717 | s->pdsp.diff_pixels(temp, src1, src2, stride); | 717 | s->pdsp.diff_pixels_unaligned(temp, src1, src2, stride); |
| 718 | 718 | ||
| 719 | memcpy(bak, temp, 64 * sizeof(int16_t)); | 719 | memcpy(bak, temp, 64 * sizeof(int16_t)); |
| 720 | 720 | ||
| @@ -817,7 +817,7 @@ static int bit8x8_c(MpegEncContext *s, uint8_t *src1, uint8_t *src2, · 96 unmodified lines | |||
| 817 | 817 | ||
| 818 | av_assert2(h == 8); | 818 | av_assert2(h == 8); |
| 819 | 819 | ||
| 820 | s->pdsp.diff_pixels(temp, src1, src2, stride); | 820 | s->pdsp.diff_pixels_unaligned(temp, src1, src2, stride); |
| 821 | 821 | ||
| 822 | s->block_last_index[0 /* FIXME */] = | 822 | s->block_last_index[0 /* FIXME */] = |
| 823 | last = | 823 | last = |
| @@ -82,6 +82,7 @@ av_cold void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx) · 81 unmodified lines | |||
| 82 | { | 82 | { |
| 83 | const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; | 83 | const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; |
| 84 | 84 | ||
| 85 | c->diff_pixels_unaligned = | ||
| 85 | c->diff_pixels = diff_pixels_c; | 86 | c->diff_pixels = diff_pixels_c; |
| 86 | 87 | ||
| 87 | switch (avctx->bits_per_raw_sample) { | 88 | switch (avctx->bits_per_raw_sample) { |
| @@ -33,6 +33,11 @@ typedef struct PixblockDSPContext { · 32 unmodified lines | |||
| 33 | const uint8_t *s1 /* align 8 */, | 33 | const uint8_t *s1 /* align 8 */, |
| 34 | const uint8_t *s2 /* align 8 */, | 34 | const uint8_t *s2 /* align 8 */, |
| 35 | ptrdiff_t stride); | 35 | ptrdiff_t stride); |
| 36 | void (*diff_pixels_unaligned)(int16_t *av_restrict block /* align 16 */, | ||
| 37 | const uint8_t *s1, | ||
| 38 | const uint8_t *s2, | ||
| 39 | ptrdiff_t stride); | ||
| 40 | |||
| 36 | } PixblockDSPContext; | 41 | } PixblockDSPContext; |
| 37 | 42 | ||
| 38 | void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx); | 43 | void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx); |
| @@ -39,12 +39,14 @@ av_cold void ff_pixblockdsp_init_x86(PixblockDSPContext *c, · 38 unmodified lines | |||
| 39 | if (EXTERNAL_MMX(cpu_flags)) { | 39 | if (EXTERNAL_MMX(cpu_flags)) { |
| 40 | if (!high_bit_depth) | 40 | if (!high_bit_depth) |
| 41 | c->get_pixels = ff_get_pixels_mmx; | 41 | c->get_pixels = ff_get_pixels_mmx; |
| 42 | c->diff_pixels_unaligned = | ||
| 42 | c->diff_pixels = ff_diff_pixels_mmx; | 43 | c->diff_pixels = ff_diff_pixels_mmx; |
| 43 | } | 44 | } |
| 44 | 45 | ||
| 45 | if (EXTERNAL_SSE2(cpu_flags)) { | 46 | if (EXTERNAL_SSE2(cpu_flags)) { |
| 46 | if (!high_bit_depth) | 47 | if (!high_bit_depth) |
| 47 | c->get_pixels = ff_get_pixels_sse2; | 48 | c->get_pixels = ff_get_pixels_sse2; |
| 49 | c->diff_pixels_unaligned = | ||
| 48 | c->diff_pixels = ff_diff_pixels_sse2; | 50 | c->diff_pixels = ff_diff_pixels_sse2; |
| 49 | } | 51 | } |
| 50 | } | 52 | } |