| ;***************************************************************************** |
| ;* x86-optimized functions for eq filter |
| ;* |
| ;* Original MPlayer filters by Richard Felker. |
| ;* |
| ;* This file is part of FFmpeg. |
| ;* |
| ;* FFmpeg is free software; you can redistribute it and/or modify |
| ;* it under the terms of the GNU General Public License as published by |
| ;* the Free Software Foundation; either version 2 of the License, or |
| ;* (at your option) any later version. |
| ;* |
| ;* FFmpeg is distributed in the hope that it will be useful, |
| ;* but WITHOUT ANY WARRANTY; without even the implied warranty of |
| ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| ;* GNU General Public License for more details. |
| ;* |
| ;* You should have received a copy of the GNU General Public License along |
| ;* with FFmpeg; if not, write to the Free Software Foundation, Inc., |
| ;* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| ;***************************************************************************** |
| |
| %include "libavutil/x86/x86util.asm" |
| |
| SECTION .text |
| |
| %macro PROCESS_ONE_LINE 1 |
| cglobal process_one_line, 5, 7, 5, src, dst, contrast, brightness, w |
| movd m3, contrastd |
| movd m4, brightnessd |
| movsx r5d, contrastw |
| movsx r6d, brightnessw |
| SPLATW m3, m3, 0 |
| SPLATW m4, m4, 0 |
| |
| DEFINE_ARGS src, dst, tmp, scalar, w |
| xor tmpd, tmpd |
| pxor m0, m0 |
| pxor m1, m1 |
| mov scalard, wd |
| and scalard, mmsize-1 |
| sar wd, %1 |
| cmp wd, 1 |
| jl .loop1 |
| |
| .loop0: |
| movu m1, [srcq] |
| mova m2, m1 |
| punpcklbw m1, m0 |
| punpckhbw m2, m0 |
| psllw m1, 4 |
| psllw m2, 4 |
| pmulhw m1, m3 |
| pmulhw m2, m3 |
| paddw m1, m4 |
| paddw m2, m4 |
| packuswb m1, m2 |
| movu [dstq], m1 |
| add srcq, mmsize |
| add dstq, mmsize |
| sub wd, 1 |
| cmp wd, 0 |
| jne .loop0 |
| |
| .loop1: |
| cmp scalard, 0 |
| je .end |
| movzx tmpd, byte [srcq] |
| imul tmpd, r5d |
| sar tmpd, 12 |
| add tmpd, r6d |
| movd m1, tmpd |
| packuswb m1, m0 |
| movd tmpd, m1 |
| mov [dstq], tmpb |
| inc srcq |
| inc dstq |
| dec scalard |
| jmp .loop1 |
| |
| .end: |
| RET |
| |
| %endmacro |
| |
| INIT_MMX mmxext |
| PROCESS_ONE_LINE 3 |
| |
| INIT_XMM sse2 |
| PROCESS_ONE_LINE 4 |