summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2012-01-27 23:28:28 +0800
committerRonald S. Bultje <rsbultje@gmail.com>2012-01-29 21:22:50 -0800
commitaf79a0c48a41fd99b674b39ac509ae442974715d (patch)
tree6d754f90b4862416da5377867ed9c03e7e3cdedf /libavcodec
parentf91c4b7824a558b472bb0acd610c772cd9904003 (diff)
png: add support for bpp>4 to paeth x86 SIMD code.
This fixes playback of e.g. RGB48 (bpp=6) content on x86 CPUs. Fixes bug 214.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/x86/pngdsp.asm14
1 files changed, 13 insertions, 1 deletions
diff --git a/libavcodec/x86/pngdsp.asm b/libavcodec/x86/pngdsp.asm
index bff76e0c0d..8c4cb19da0 100644
--- a/libavcodec/x86/pngdsp.asm
+++ b/libavcodec/x86/pngdsp.asm
@@ -2,6 +2,7 @@
;* x86 optimizations for PNG decoding
;*
;* Copyright (c) 2008 Loren Merritt <lorenm@u.washington.edu>
+;* Copyright (c) 2012 Ronald S. Bultje <rsbultje@gmail.com>
;*
;* This file is part of Libav.
;*
@@ -100,6 +101,12 @@ cglobal add_png_paeth_prediction, 5, 7, %1, dst, src, top, w, bpp, end, cntr
sub srcq, dstq
sub dstq, bppq
pxor m7, m7
+
+ PUSH dstq
+ lea cntrq, [bppq-1]
+ shr cntrq, 2 + mmsize/16
+.bpp_loop:
+ lea dstq, [dstq+cntrq*(mmsize/2)]
movh m0, [dstq]
movh m1, [topq+dstq]
punpcklbw m0, m7
@@ -152,7 +159,12 @@ cglobal add_png_paeth_prediction, 5, 7, %1, dst, src, top, w, bpp, end, cntr
add dstq, bppq
cmp dstq, endq
jle .loop
- REP_RET
+
+ mov dstq, [rsp]
+ dec cntrq
+ jge .bpp_loop
+ POP dstq
+ RET
%endmacro
INIT_MMX mmx2