Statistics
| Branch: | Revision:

ffmpeg / libavcodec / x86 / deinterlace.asm @ 888fa31e

History | View | Annotate | Download (2.48 KB)

1
;******************************************************************************
2
;* MMX optimized deinterlacing functions
3
;* Copyright (c) 2010 Vitor Sessak
4
;* Copyright (c) 2002 Michael Niedermayer
5
;*
6
;* This file is part of Libav.
7
;*
8
;* Libav is free software; you can redistribute it and/or
9
;* modify it under the terms of the GNU Lesser General Public
10
;* License as published by the Free Software Foundation; either
11
;* version 2.1 of the License, or (at your option) any later version.
12
;*
13
;* Libav is distributed in the hope that it will be useful,
14
;* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
;* Lesser General Public License for more details.
17
;*
18
;* You should have received a copy of the GNU Lesser General Public
19
;* License along with Libav; if not, write to the Free Software
20
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
;******************************************************************************
22

    
23
%include "x86inc.asm"
24
%include "x86util.asm"
25

    
26
SECTION_RODATA
27

    
28
cextern pw_4
29

    
30
SECTION .text
31

    
32
%macro DEINTERLACE 1
33
%ifidn %1, inplace
34
;void ff_deinterlace_line_inplace_mmx(const uint8_t *lum_m4, const uint8_t *lum_m3, const uint8_t *lum_m2, const uint8_t *lum_m1, const uint8_t *lum,  int size)
35
cglobal deinterlace_line_inplace_mmx, 6,6,7,      lum_m4, lum_m3, lum_m2, lum_m1, lum, size
36
%else
37
;void ff_deinterlace_line_mmx(uint8_t *dst, const uint8_t *lum_m4, const uint8_t *lum_m3, const uint8_t *lum_m2, const uint8_t *lum_m1, const uint8_t *lum,  int size)
38
cglobal deinterlace_line_mmx,         7,7,7, dst, lum_m4, lum_m3, lum_m2, lum_m1, lum, size
39
%endif
40
    pxor  mm7, mm7
41
    movq  mm6, [pw_4]
42
.nextrow
43
    movd  mm0, [lum_m4q]
44
    movd  mm1, [lum_m3q]
45
    movd  mm2, [lum_m2q]
46
%ifidn %1, inplace
47
    movd [lum_m4q], mm2
48
%endif
49
    movd  mm3, [lum_m1q]
50
    movd  mm4, [lumq]
51
    punpcklbw mm0, mm7
52
    punpcklbw mm1, mm7
53
    punpcklbw mm2, mm7
54
    punpcklbw mm3, mm7
55
    punpcklbw mm4, mm7
56
    paddw     mm1, mm3
57
    psllw     mm2, 1
58
    paddw     mm0, mm4
59
    psllw     mm1, 2
60
    paddw     mm2, mm6
61
    paddw     mm1, mm2
62
    psubusw   mm1, mm0
63
    psrlw     mm1, 3
64
    packuswb  mm1, mm7
65
%ifidn %1, inplace
66
    movd [lum_m2q], mm1
67
%else
68
    movd   [dstq], mm1
69
    add       dstq, 4
70
%endif
71
    add    lum_m4q, 4
72
    add    lum_m3q, 4
73
    add    lum_m2q, 4
74
    add    lum_m1q, 4
75
    add       lumq, 4
76
    sub      sized, 4
77
    jg .nextrow
78
    REP_RET
79
%endmacro
80

    
81
DEINTERLACE ""
82

    
83
DEINTERLACE inplace