annotate vp6dsp.c @ 11225:5811a86f55f1 libavcodec

Use memset to set the runs partially coded superblocks Much faster for long runs (e.g. nearly uncoded frames), slightly faster for the general case.
author conrad
date Sun, 21 Feb 2010 00:10:47 +0000
parents bee83b3f9a6b
children 7dd2a45249a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8785
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
1 /**
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
2 * @file libavcodec/vp6dsp.c
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
3 * VP6 DSP-oriented functions
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
4 *
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
5 * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org>
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
6 *
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
7 * This file is part of FFmpeg.
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
8 *
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
13 *
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
17 * Lesser General Public License for more details.
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
18 *
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
22 */
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
23
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
24 #include "libavutil/common.h"
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
25 #include "dsputil.h"
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
26
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
27
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
28 void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride,
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
29 const int16_t *h_weights, const int16_t *v_weights)
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
30 {
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
31 int x, y;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
32 int tmp[8*11];
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
33 int *t = tmp;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
34
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
35 src -= stride;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
36
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
37 for (y=0; y<11; y++) {
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
38 for (x=0; x<8; x++) {
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
39 t[x] = av_clip_uint8(( src[x-1] * h_weights[0]
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
40 + src[x ] * h_weights[1]
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
41 + src[x+1] * h_weights[2]
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
42 + src[x+2] * h_weights[3] + 64) >> 7);
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
43 }
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
44 src += stride;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
45 t += 8;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
46 }
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
47
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
48 t = tmp + 8;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
49 for (y=0; y<8; y++) {
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
50 for (x=0; x<8; x++) {
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
51 dst[x] = av_clip_uint8(( t[x-8 ] * v_weights[0]
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
52 + t[x ] * v_weights[1]
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
53 + t[x+8 ] * v_weights[2]
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
54 + t[x+16] * v_weights[3] + 64) >> 7);
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
55 }
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
56 dst += stride;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
57 t += 8;
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
58 }
bee83b3f9a6b move vp6_filter_diag4() to a new vp6dsp.c file and use it throught dsputil
aurel
parents:
diff changeset
59 }