annotate x86/rv40dsp_mmx.c @ 8790:1045a26cb90d libavcodec

Fix crash when encoding using libschroedinger. Currently only pixel and half-pixel motion vector precisions are supported in libschroedinger. Setting the mv_precision field to 2 (i.e. quarter pixel) causes a crash in the libschroedinger encoder calls. By not setting this parameter, we fall back to the default value used in libschroedinger. patch by Anuradha Suraparaju, anuradha rd.bbc.co uk
author diego
date Tue, 10 Feb 2009 14:27:16 +0000
parents cc64e1343397
children 34a65026fa06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8519
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
1 /*
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
2 * Copyright (c) 2008 Konstantin Shishkov, Mathieu Velten
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
3 *
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
4 * MMX-optimized DSP functions for RV40, based on H.264 optimizations by
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
5 * Michael Niedermayer and Loren Merritt
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
6 *
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
7 * This file is part of FFmpeg.
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
8 *
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
13 *
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
17 * Lesser General Public License for more details.
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
18 *
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
22 */
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
23
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
24 #include "dsputil_mmx.h"
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
25
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
26 /* bias interleaved with bias div 8, use p+1 to access bias div 8 */
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
27 DECLARE_ALIGNED_8(static const uint64_t, rv40_bias_reg[4][8]) = {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
28 { 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0010001000100010ULL, 0x0002000200020002ULL,
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
29 0x0020002000200020ULL, 0x0004000400040004ULL, 0x0010001000100010ULL, 0x0002000200020002ULL },
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
30 { 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL,
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
31 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL },
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
32 { 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0020002000200020ULL, 0x0004000400040004ULL,
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
33 0x0010001000100010ULL, 0x0002000200020002ULL, 0x0020002000200020ULL, 0x0004000400040004ULL },
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
34 { 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL,
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
35 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL }
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
36 };
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
37
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
38 static void put_rv40_chroma_mc8_mmx(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
39 {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
40 put_h264_chroma_generic_mc8_mmx(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
41 }
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
42 static void put_rv40_chroma_mc4_mmx(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
43 {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
44 put_h264_chroma_generic_mc4_mmx(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
45 }
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
46 static void avg_rv40_chroma_mc8_mmx2(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
47 {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
48 avg_h264_chroma_generic_mc8_mmx2(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
49 }
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
50 static void avg_rv40_chroma_mc4_mmx2(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
51 {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
52 avg_h264_chroma_generic_mc4_mmx2(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
53 }
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
54 static void avg_rv40_chroma_mc8_3dnow(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
55 {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
56 avg_h264_chroma_generic_mc8_3dnow(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
57 }
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
58 static void avg_rv40_chroma_mc4_3dnow(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
59 {
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
60 avg_h264_chroma_generic_mc4_3dnow(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
cc64e1343397 Use H264 MMX chroma functions to accelerate RV40 decoding.
cehoyos
parents:
diff changeset
61 }