mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-09-04 07:21:31 +02:00
91 lines
2.2 KiB
NASM
91 lines
2.2 KiB
NASM
;*****************************************************************************
|
|
;* 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
|