/src/ffmpeg/libavcodec/h264idct_template.c
Line | Count | Source |
1 | | /* |
2 | | * H.264 IDCT |
3 | | * Copyright (c) 2004-2011 Michael Niedermayer <michaelni@gmx.at> |
4 | | * |
5 | | * This file is part of FFmpeg. |
6 | | * |
7 | | * FFmpeg is free software; you can redistribute it and/or |
8 | | * modify it under the terms of the GNU Lesser General Public |
9 | | * License as published by the Free Software Foundation; either |
10 | | * version 2.1 of the License, or (at your option) any later version. |
11 | | * |
12 | | * FFmpeg is distributed in the hope that it will be useful, |
13 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | | * Lesser General Public License for more details. |
16 | | * |
17 | | * You should have received a copy of the GNU Lesser General Public |
18 | | * License along with FFmpeg; if not, write to the Free Software |
19 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 | | */ |
21 | | |
22 | | /** |
23 | | * @file |
24 | | * H.264 IDCT. |
25 | | * @author Michael Niedermayer <michaelni@gmx.at> |
26 | | */ |
27 | | |
28 | | #include "bit_depth_template.c" |
29 | | #include "libavutil/common.h" |
30 | | #include "h264_parse.h" |
31 | | #include "h264idct.h" |
32 | | |
33 | | void FUNCC(ff_h264_idct_add)(uint8_t *_dst, int16_t *_block, int stride) |
34 | 69.5M | { |
35 | 69.5M | int i; |
36 | 69.5M | pixel *dst = (pixel*)_dst; |
37 | 69.5M | dctcoef *block = (dctcoef*)_block; |
38 | 69.5M | stride >>= sizeof(pixel)-1; |
39 | | |
40 | 69.5M | block[0] += 1 << 5; |
41 | | |
42 | 347M | for(i=0; i<4; i++){ |
43 | 278M | const SUINT z0= block[i + 4*0] + (unsigned)block[i + 4*2]; |
44 | 278M | const SUINT z1= block[i + 4*0] - (unsigned)block[i + 4*2]; |
45 | 278M | const SUINT z2= (block[i + 4*1]>>1) - (unsigned)block[i + 4*3]; |
46 | 278M | const SUINT z3= block[i + 4*1] + (unsigned)(block[i + 4*3]>>1); |
47 | | |
48 | 278M | block[i + 4*0]= z0 + z3; |
49 | 278M | block[i + 4*1]= z1 + z2; |
50 | 278M | block[i + 4*2]= z1 - z2; |
51 | 278M | block[i + 4*3]= z0 - z3; |
52 | 278M | } |
53 | | |
54 | 347M | for(i=0; i<4; i++){ |
55 | 278M | const SUINT z0= block[0 + 4*i] + (SUINT)block[2 + 4*i]; |
56 | 278M | const SUINT z1= block[0 + 4*i] - (SUINT)block[2 + 4*i]; |
57 | 278M | const SUINT z2= (block[1 + 4*i]>>1) - (SUINT)block[3 + 4*i]; |
58 | 278M | const SUINT z3= block[1 + 4*i] + (SUINT)(block[3 + 4*i]>>1); |
59 | | |
60 | 278M | dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((int)(z0 + z3) >> 6)); |
61 | 278M | dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((int)(z1 + z2) >> 6)); |
62 | 278M | dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((int)(z1 - z2) >> 6)); |
63 | 278M | dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((int)(z0 - z3) >> 6)); |
64 | 278M | } |
65 | | |
66 | 69.5M | memset(block, 0, 16 * sizeof(dctcoef)); |
67 | 69.5M | } Line | Count | Source | 34 | 18.7M | { | 35 | 18.7M | int i; | 36 | 18.7M | pixel *dst = (pixel*)_dst; | 37 | 18.7M | dctcoef *block = (dctcoef*)_block; | 38 | 18.7M | stride >>= sizeof(pixel)-1; | 39 | | | 40 | 18.7M | block[0] += 1 << 5; | 41 | | | 42 | 93.7M | for(i=0; i<4; i++){ | 43 | 75.0M | const SUINT z0= block[i + 4*0] + (unsigned)block[i + 4*2]; | 44 | 75.0M | const SUINT z1= block[i + 4*0] - (unsigned)block[i + 4*2]; | 45 | 75.0M | const SUINT z2= (block[i + 4*1]>>1) - (unsigned)block[i + 4*3]; | 46 | 75.0M | const SUINT z3= block[i + 4*1] + (unsigned)(block[i + 4*3]>>1); | 47 | | | 48 | 75.0M | block[i + 4*0]= z0 + z3; | 49 | 75.0M | block[i + 4*1]= z1 + z2; | 50 | 75.0M | block[i + 4*2]= z1 - z2; | 51 | 75.0M | block[i + 4*3]= z0 - z3; | 52 | 75.0M | } | 53 | | | 54 | 93.7M | for(i=0; i<4; i++){ | 55 | 75.0M | const SUINT z0= block[0 + 4*i] + (SUINT)block[2 + 4*i]; | 56 | 75.0M | const SUINT z1= block[0 + 4*i] - (SUINT)block[2 + 4*i]; | 57 | 75.0M | const SUINT z2= (block[1 + 4*i]>>1) - (SUINT)block[3 + 4*i]; | 58 | 75.0M | const SUINT z3= block[1 + 4*i] + (SUINT)(block[3 + 4*i]>>1); | 59 | | | 60 | 75.0M | dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((int)(z0 + z3) >> 6)); | 61 | 75.0M | dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((int)(z1 + z2) >> 6)); | 62 | 75.0M | dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((int)(z1 - z2) >> 6)); | 63 | 75.0M | dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((int)(z0 - z3) >> 6)); | 64 | 75.0M | } | 65 | | | 66 | 18.7M | memset(block, 0, 16 * sizeof(dctcoef)); | 67 | 18.7M | } |
Line | Count | Source | 34 | 14.5M | { | 35 | 14.5M | int i; | 36 | 14.5M | pixel *dst = (pixel*)_dst; | 37 | 14.5M | dctcoef *block = (dctcoef*)_block; | 38 | 14.5M | stride >>= sizeof(pixel)-1; | 39 | | | 40 | 14.5M | block[0] += 1 << 5; | 41 | | | 42 | 72.9M | for(i=0; i<4; i++){ | 43 | 58.3M | const SUINT z0= block[i + 4*0] + (unsigned)block[i + 4*2]; | 44 | 58.3M | const SUINT z1= block[i + 4*0] - (unsigned)block[i + 4*2]; | 45 | 58.3M | const SUINT z2= (block[i + 4*1]>>1) - (unsigned)block[i + 4*3]; | 46 | 58.3M | const SUINT z3= block[i + 4*1] + (unsigned)(block[i + 4*3]>>1); | 47 | | | 48 | 58.3M | block[i + 4*0]= z0 + z3; | 49 | 58.3M | block[i + 4*1]= z1 + z2; | 50 | 58.3M | block[i + 4*2]= z1 - z2; | 51 | 58.3M | block[i + 4*3]= z0 - z3; | 52 | 58.3M | } | 53 | | | 54 | 72.9M | for(i=0; i<4; i++){ | 55 | 58.3M | const SUINT z0= block[0 + 4*i] + (SUINT)block[2 + 4*i]; | 56 | 58.3M | const SUINT z1= block[0 + 4*i] - (SUINT)block[2 + 4*i]; | 57 | 58.3M | const SUINT z2= (block[1 + 4*i]>>1) - (SUINT)block[3 + 4*i]; | 58 | 58.3M | const SUINT z3= block[1 + 4*i] + (SUINT)(block[3 + 4*i]>>1); | 59 | | | 60 | 58.3M | dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((int)(z0 + z3) >> 6)); | 61 | 58.3M | dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((int)(z1 + z2) >> 6)); | 62 | 58.3M | dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((int)(z1 - z2) >> 6)); | 63 | 58.3M | dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((int)(z0 - z3) >> 6)); | 64 | 58.3M | } | 65 | | | 66 | 14.5M | memset(block, 0, 16 * sizeof(dctcoef)); | 67 | 14.5M | } |
Line | Count | Source | 34 | 15.0M | { | 35 | 15.0M | int i; | 36 | 15.0M | pixel *dst = (pixel*)_dst; | 37 | 15.0M | dctcoef *block = (dctcoef*)_block; | 38 | 15.0M | stride >>= sizeof(pixel)-1; | 39 | | | 40 | 15.0M | block[0] += 1 << 5; | 41 | | | 42 | 75.0M | for(i=0; i<4; i++){ | 43 | 60.0M | const SUINT z0= block[i + 4*0] + (unsigned)block[i + 4*2]; | 44 | 60.0M | const SUINT z1= block[i + 4*0] - (unsigned)block[i + 4*2]; | 45 | 60.0M | const SUINT z2= (block[i + 4*1]>>1) - (unsigned)block[i + 4*3]; | 46 | 60.0M | const SUINT z3= block[i + 4*1] + (unsigned)(block[i + 4*3]>>1); | 47 | | | 48 | 60.0M | block[i + 4*0]= z0 + z3; | 49 | 60.0M | block[i + 4*1]= z1 + z2; | 50 | 60.0M | block[i + 4*2]= z1 - z2; | 51 | 60.0M | block[i + 4*3]= z0 - z3; | 52 | 60.0M | } | 53 | | | 54 | 75.0M | for(i=0; i<4; i++){ | 55 | 60.0M | const SUINT z0= block[0 + 4*i] + (SUINT)block[2 + 4*i]; | 56 | 60.0M | const SUINT z1= block[0 + 4*i] - (SUINT)block[2 + 4*i]; | 57 | 60.0M | const SUINT z2= (block[1 + 4*i]>>1) - (SUINT)block[3 + 4*i]; | 58 | 60.0M | const SUINT z3= block[1 + 4*i] + (SUINT)(block[3 + 4*i]>>1); | 59 | | | 60 | 60.0M | dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((int)(z0 + z3) >> 6)); | 61 | 60.0M | dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((int)(z1 + z2) >> 6)); | 62 | 60.0M | dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((int)(z1 - z2) >> 6)); | 63 | 60.0M | dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((int)(z0 - z3) >> 6)); | 64 | 60.0M | } | 65 | | | 66 | 15.0M | memset(block, 0, 16 * sizeof(dctcoef)); | 67 | 15.0M | } |
Line | Count | Source | 34 | 9.92M | { | 35 | 9.92M | int i; | 36 | 9.92M | pixel *dst = (pixel*)_dst; | 37 | 9.92M | dctcoef *block = (dctcoef*)_block; | 38 | 9.92M | stride >>= sizeof(pixel)-1; | 39 | | | 40 | 9.92M | block[0] += 1 << 5; | 41 | | | 42 | 49.6M | for(i=0; i<4; i++){ | 43 | 39.6M | const SUINT z0= block[i + 4*0] + (unsigned)block[i + 4*2]; | 44 | 39.6M | const SUINT z1= block[i + 4*0] - (unsigned)block[i + 4*2]; | 45 | 39.6M | const SUINT z2= (block[i + 4*1]>>1) - (unsigned)block[i + 4*3]; | 46 | 39.6M | const SUINT z3= block[i + 4*1] + (unsigned)(block[i + 4*3]>>1); | 47 | | | 48 | 39.6M | block[i + 4*0]= z0 + z3; | 49 | 39.6M | block[i + 4*1]= z1 + z2; | 50 | 39.6M | block[i + 4*2]= z1 - z2; | 51 | 39.6M | block[i + 4*3]= z0 - z3; | 52 | 39.6M | } | 53 | | | 54 | 49.6M | for(i=0; i<4; i++){ | 55 | 39.6M | const SUINT z0= block[0 + 4*i] + (SUINT)block[2 + 4*i]; | 56 | 39.6M | const SUINT z1= block[0 + 4*i] - (SUINT)block[2 + 4*i]; | 57 | 39.6M | const SUINT z2= (block[1 + 4*i]>>1) - (SUINT)block[3 + 4*i]; | 58 | 39.6M | const SUINT z3= block[1 + 4*i] + (SUINT)(block[3 + 4*i]>>1); | 59 | | | 60 | 39.6M | dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((int)(z0 + z3) >> 6)); | 61 | 39.6M | dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((int)(z1 + z2) >> 6)); | 62 | 39.6M | dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((int)(z1 - z2) >> 6)); | 63 | 39.6M | dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((int)(z0 - z3) >> 6)); | 64 | 39.6M | } | 65 | | | 66 | 9.92M | memset(block, 0, 16 * sizeof(dctcoef)); | 67 | 9.92M | } |
Line | Count | Source | 34 | 11.3M | { | 35 | 11.3M | int i; | 36 | 11.3M | pixel *dst = (pixel*)_dst; | 37 | 11.3M | dctcoef *block = (dctcoef*)_block; | 38 | 11.3M | stride >>= sizeof(pixel)-1; | 39 | | | 40 | 11.3M | block[0] += 1 << 5; | 41 | | | 42 | 56.5M | for(i=0; i<4; i++){ | 43 | 45.2M | const SUINT z0= block[i + 4*0] + (unsigned)block[i + 4*2]; | 44 | 45.2M | const SUINT z1= block[i + 4*0] - (unsigned)block[i + 4*2]; | 45 | 45.2M | const SUINT z2= (block[i + 4*1]>>1) - (unsigned)block[i + 4*3]; | 46 | 45.2M | const SUINT z3= block[i + 4*1] + (unsigned)(block[i + 4*3]>>1); | 47 | | | 48 | 45.2M | block[i + 4*0]= z0 + z3; | 49 | 45.2M | block[i + 4*1]= z1 + z2; | 50 | 45.2M | block[i + 4*2]= z1 - z2; | 51 | 45.2M | block[i + 4*3]= z0 - z3; | 52 | 45.2M | } | 53 | | | 54 | 56.5M | for(i=0; i<4; i++){ | 55 | 45.2M | const SUINT z0= block[0 + 4*i] + (SUINT)block[2 + 4*i]; | 56 | 45.2M | const SUINT z1= block[0 + 4*i] - (SUINT)block[2 + 4*i]; | 57 | 45.2M | const SUINT z2= (block[1 + 4*i]>>1) - (SUINT)block[3 + 4*i]; | 58 | 45.2M | const SUINT z3= block[1 + 4*i] + (SUINT)(block[3 + 4*i]>>1); | 59 | | | 60 | 45.2M | dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((int)(z0 + z3) >> 6)); | 61 | 45.2M | dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((int)(z1 + z2) >> 6)); | 62 | 45.2M | dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((int)(z1 - z2) >> 6)); | 63 | 45.2M | dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((int)(z0 - z3) >> 6)); | 64 | 45.2M | } | 65 | | | 66 | 11.3M | memset(block, 0, 16 * sizeof(dctcoef)); | 67 | 11.3M | } |
|
68 | | |
69 | 8.51M | void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride){ |
70 | 8.51M | int i; |
71 | 8.51M | pixel *dst = (pixel*)_dst; |
72 | 8.51M | dctcoef *block = (dctcoef*)_block; |
73 | 8.51M | stride >>= sizeof(pixel)-1; |
74 | | |
75 | 8.51M | block[0] += 32; |
76 | | |
77 | 76.5M | for( i = 0; i < 8; i++ ) |
78 | 68.0M | { |
79 | 68.0M | const unsigned int a0 = block[i+0*8] + (unsigned)block[i+4*8]; |
80 | 68.0M | const unsigned int a2 = block[i+0*8] - (unsigned)block[i+4*8]; |
81 | 68.0M | const unsigned int a4 = (block[i+2*8]>>1) - (unsigned)block[i+6*8]; |
82 | 68.0M | const unsigned int a6 = (block[i+6*8]>>1) + (unsigned)block[i+2*8]; |
83 | | |
84 | 68.0M | const unsigned int b0 = a0 + a6; |
85 | 68.0M | const unsigned int b2 = a2 + a4; |
86 | 68.0M | const unsigned int b4 = a2 - a4; |
87 | 68.0M | const unsigned int b6 = a0 - a6; |
88 | | |
89 | 68.0M | const int a1 = -block[i+3*8] + (unsigned)block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1); |
90 | 68.0M | const int a3 = block[i+1*8] + (unsigned)block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1); |
91 | 68.0M | const int a5 = -block[i+1*8] + (unsigned)block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1); |
92 | 68.0M | const int a7 = block[i+3*8] + (unsigned)block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1); |
93 | | |
94 | 68.0M | const int b1 = (a7>>2) + (unsigned)a1; |
95 | 68.0M | const int b3 = (unsigned)a3 + (a5>>2); |
96 | 68.0M | const int b5 = (a3>>2) - (unsigned)a5; |
97 | 68.0M | const int b7 = (unsigned)a7 - (a1>>2); |
98 | | |
99 | 68.0M | block[i+0*8] = b0 + b7; |
100 | 68.0M | block[i+7*8] = b0 - b7; |
101 | 68.0M | block[i+1*8] = b2 + b5; |
102 | 68.0M | block[i+6*8] = b2 - b5; |
103 | 68.0M | block[i+2*8] = b4 + b3; |
104 | 68.0M | block[i+5*8] = b4 - b3; |
105 | 68.0M | block[i+3*8] = b6 + b1; |
106 | 68.0M | block[i+4*8] = b6 - b1; |
107 | 68.0M | } |
108 | 76.5M | for( i = 0; i < 8; i++ ) |
109 | 68.0M | { |
110 | 68.0M | const unsigned a0 = block[0+i*8] + (unsigned)block[4+i*8]; |
111 | 68.0M | const unsigned a2 = block[0+i*8] - (unsigned)block[4+i*8]; |
112 | 68.0M | const unsigned a4 = (block[2+i*8]>>1) - (unsigned)block[6+i*8]; |
113 | 68.0M | const unsigned a6 = (block[6+i*8]>>1) + (unsigned)block[2+i*8]; |
114 | | |
115 | 68.0M | const unsigned b0 = a0 + a6; |
116 | 68.0M | const unsigned b2 = a2 + a4; |
117 | 68.0M | const unsigned b4 = a2 - a4; |
118 | 68.0M | const unsigned b6 = a0 - a6; |
119 | | |
120 | 68.0M | const int a1 = -(unsigned)block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1); |
121 | 68.0M | const int a3 = (unsigned)block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1); |
122 | 68.0M | const int a5 = -(unsigned)block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1); |
123 | 68.0M | const int a7 = (unsigned)block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1); |
124 | | |
125 | 68.0M | const unsigned b1 = (a7>>2) + (unsigned)a1; |
126 | 68.0M | const unsigned b3 = (unsigned)a3 + (a5>>2); |
127 | 68.0M | const unsigned b5 = (a3>>2) - (unsigned)a5; |
128 | 68.0M | const unsigned b7 = (unsigned)a7 - (a1>>2); |
129 | | |
130 | 68.0M | dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((int)(b0 + b7) >> 6) ); |
131 | 68.0M | dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((int)(b2 + b5) >> 6) ); |
132 | 68.0M | dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((int)(b4 + b3) >> 6) ); |
133 | 68.0M | dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((int)(b6 + b1) >> 6) ); |
134 | 68.0M | dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((int)(b6 - b1) >> 6) ); |
135 | 68.0M | dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((int)(b4 - b3) >> 6) ); |
136 | 68.0M | dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((int)(b2 - b5) >> 6) ); |
137 | 68.0M | dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((int)(b0 - b7) >> 6) ); |
138 | 68.0M | } |
139 | | |
140 | 8.51M | memset(block, 0, 64 * sizeof(dctcoef)); |
141 | 8.51M | } Line | Count | Source | 69 | 1.97M | void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride){ | 70 | 1.97M | int i; | 71 | 1.97M | pixel *dst = (pixel*)_dst; | 72 | 1.97M | dctcoef *block = (dctcoef*)_block; | 73 | 1.97M | stride >>= sizeof(pixel)-1; | 74 | | | 75 | 1.97M | block[0] += 32; | 76 | | | 77 | 17.8M | for( i = 0; i < 8; i++ ) | 78 | 15.8M | { | 79 | 15.8M | const unsigned int a0 = block[i+0*8] + (unsigned)block[i+4*8]; | 80 | 15.8M | const unsigned int a2 = block[i+0*8] - (unsigned)block[i+4*8]; | 81 | 15.8M | const unsigned int a4 = (block[i+2*8]>>1) - (unsigned)block[i+6*8]; | 82 | 15.8M | const unsigned int a6 = (block[i+6*8]>>1) + (unsigned)block[i+2*8]; | 83 | | | 84 | 15.8M | const unsigned int b0 = a0 + a6; | 85 | 15.8M | const unsigned int b2 = a2 + a4; | 86 | 15.8M | const unsigned int b4 = a2 - a4; | 87 | 15.8M | const unsigned int b6 = a0 - a6; | 88 | | | 89 | 15.8M | const int a1 = -block[i+3*8] + (unsigned)block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1); | 90 | 15.8M | const int a3 = block[i+1*8] + (unsigned)block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1); | 91 | 15.8M | const int a5 = -block[i+1*8] + (unsigned)block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1); | 92 | 15.8M | const int a7 = block[i+3*8] + (unsigned)block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1); | 93 | | | 94 | 15.8M | const int b1 = (a7>>2) + (unsigned)a1; | 95 | 15.8M | const int b3 = (unsigned)a3 + (a5>>2); | 96 | 15.8M | const int b5 = (a3>>2) - (unsigned)a5; | 97 | 15.8M | const int b7 = (unsigned)a7 - (a1>>2); | 98 | | | 99 | 15.8M | block[i+0*8] = b0 + b7; | 100 | 15.8M | block[i+7*8] = b0 - b7; | 101 | 15.8M | block[i+1*8] = b2 + b5; | 102 | 15.8M | block[i+6*8] = b2 - b5; | 103 | 15.8M | block[i+2*8] = b4 + b3; | 104 | 15.8M | block[i+5*8] = b4 - b3; | 105 | 15.8M | block[i+3*8] = b6 + b1; | 106 | 15.8M | block[i+4*8] = b6 - b1; | 107 | 15.8M | } | 108 | 17.8M | for( i = 0; i < 8; i++ ) | 109 | 15.8M | { | 110 | 15.8M | const unsigned a0 = block[0+i*8] + (unsigned)block[4+i*8]; | 111 | 15.8M | const unsigned a2 = block[0+i*8] - (unsigned)block[4+i*8]; | 112 | 15.8M | const unsigned a4 = (block[2+i*8]>>1) - (unsigned)block[6+i*8]; | 113 | 15.8M | const unsigned a6 = (block[6+i*8]>>1) + (unsigned)block[2+i*8]; | 114 | | | 115 | 15.8M | const unsigned b0 = a0 + a6; | 116 | 15.8M | const unsigned b2 = a2 + a4; | 117 | 15.8M | const unsigned b4 = a2 - a4; | 118 | 15.8M | const unsigned b6 = a0 - a6; | 119 | | | 120 | 15.8M | const int a1 = -(unsigned)block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1); | 121 | 15.8M | const int a3 = (unsigned)block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1); | 122 | 15.8M | const int a5 = -(unsigned)block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1); | 123 | 15.8M | const int a7 = (unsigned)block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1); | 124 | | | 125 | 15.8M | const unsigned b1 = (a7>>2) + (unsigned)a1; | 126 | 15.8M | const unsigned b3 = (unsigned)a3 + (a5>>2); | 127 | 15.8M | const unsigned b5 = (a3>>2) - (unsigned)a5; | 128 | 15.8M | const unsigned b7 = (unsigned)a7 - (a1>>2); | 129 | | | 130 | 15.8M | dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((int)(b0 + b7) >> 6) ); | 131 | 15.8M | dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((int)(b2 + b5) >> 6) ); | 132 | 15.8M | dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((int)(b4 + b3) >> 6) ); | 133 | 15.8M | dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((int)(b6 + b1) >> 6) ); | 134 | 15.8M | dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((int)(b6 - b1) >> 6) ); | 135 | 15.8M | dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((int)(b4 - b3) >> 6) ); | 136 | 15.8M | dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((int)(b2 - b5) >> 6) ); | 137 | 15.8M | dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((int)(b0 - b7) >> 6) ); | 138 | 15.8M | } | 139 | | | 140 | 1.97M | memset(block, 0, 64 * sizeof(dctcoef)); | 141 | 1.97M | } |
Line | Count | Source | 69 | 1.20M | void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride){ | 70 | 1.20M | int i; | 71 | 1.20M | pixel *dst = (pixel*)_dst; | 72 | 1.20M | dctcoef *block = (dctcoef*)_block; | 73 | 1.20M | stride >>= sizeof(pixel)-1; | 74 | | | 75 | 1.20M | block[0] += 32; | 76 | | | 77 | 10.8M | for( i = 0; i < 8; i++ ) | 78 | 9.64M | { | 79 | 9.64M | const unsigned int a0 = block[i+0*8] + (unsigned)block[i+4*8]; | 80 | 9.64M | const unsigned int a2 = block[i+0*8] - (unsigned)block[i+4*8]; | 81 | 9.64M | const unsigned int a4 = (block[i+2*8]>>1) - (unsigned)block[i+6*8]; | 82 | 9.64M | const unsigned int a6 = (block[i+6*8]>>1) + (unsigned)block[i+2*8]; | 83 | | | 84 | 9.64M | const unsigned int b0 = a0 + a6; | 85 | 9.64M | const unsigned int b2 = a2 + a4; | 86 | 9.64M | const unsigned int b4 = a2 - a4; | 87 | 9.64M | const unsigned int b6 = a0 - a6; | 88 | | | 89 | 9.64M | const int a1 = -block[i+3*8] + (unsigned)block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1); | 90 | 9.64M | const int a3 = block[i+1*8] + (unsigned)block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1); | 91 | 9.64M | const int a5 = -block[i+1*8] + (unsigned)block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1); | 92 | 9.64M | const int a7 = block[i+3*8] + (unsigned)block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1); | 93 | | | 94 | 9.64M | const int b1 = (a7>>2) + (unsigned)a1; | 95 | 9.64M | const int b3 = (unsigned)a3 + (a5>>2); | 96 | 9.64M | const int b5 = (a3>>2) - (unsigned)a5; | 97 | 9.64M | const int b7 = (unsigned)a7 - (a1>>2); | 98 | | | 99 | 9.64M | block[i+0*8] = b0 + b7; | 100 | 9.64M | block[i+7*8] = b0 - b7; | 101 | 9.64M | block[i+1*8] = b2 + b5; | 102 | 9.64M | block[i+6*8] = b2 - b5; | 103 | 9.64M | block[i+2*8] = b4 + b3; | 104 | 9.64M | block[i+5*8] = b4 - b3; | 105 | 9.64M | block[i+3*8] = b6 + b1; | 106 | 9.64M | block[i+4*8] = b6 - b1; | 107 | 9.64M | } | 108 | 10.8M | for( i = 0; i < 8; i++ ) | 109 | 9.64M | { | 110 | 9.64M | const unsigned a0 = block[0+i*8] + (unsigned)block[4+i*8]; | 111 | 9.64M | const unsigned a2 = block[0+i*8] - (unsigned)block[4+i*8]; | 112 | 9.64M | const unsigned a4 = (block[2+i*8]>>1) - (unsigned)block[6+i*8]; | 113 | 9.64M | const unsigned a6 = (block[6+i*8]>>1) + (unsigned)block[2+i*8]; | 114 | | | 115 | 9.64M | const unsigned b0 = a0 + a6; | 116 | 9.64M | const unsigned b2 = a2 + a4; | 117 | 9.64M | const unsigned b4 = a2 - a4; | 118 | 9.64M | const unsigned b6 = a0 - a6; | 119 | | | 120 | 9.64M | const int a1 = -(unsigned)block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1); | 121 | 9.64M | const int a3 = (unsigned)block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1); | 122 | 9.64M | const int a5 = -(unsigned)block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1); | 123 | 9.64M | const int a7 = (unsigned)block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1); | 124 | | | 125 | 9.64M | const unsigned b1 = (a7>>2) + (unsigned)a1; | 126 | 9.64M | const unsigned b3 = (unsigned)a3 + (a5>>2); | 127 | 9.64M | const unsigned b5 = (a3>>2) - (unsigned)a5; | 128 | 9.64M | const unsigned b7 = (unsigned)a7 - (a1>>2); | 129 | | | 130 | 9.64M | dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((int)(b0 + b7) >> 6) ); | 131 | 9.64M | dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((int)(b2 + b5) >> 6) ); | 132 | 9.64M | dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((int)(b4 + b3) >> 6) ); | 133 | 9.64M | dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((int)(b6 + b1) >> 6) ); | 134 | 9.64M | dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((int)(b6 - b1) >> 6) ); | 135 | 9.64M | dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((int)(b4 - b3) >> 6) ); | 136 | 9.64M | dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((int)(b2 - b5) >> 6) ); | 137 | 9.64M | dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((int)(b0 - b7) >> 6) ); | 138 | 9.64M | } | 139 | | | 140 | 1.20M | memset(block, 0, 64 * sizeof(dctcoef)); | 141 | 1.20M | } |
Line | Count | Source | 69 | 2.88M | void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride){ | 70 | 2.88M | int i; | 71 | 2.88M | pixel *dst = (pixel*)_dst; | 72 | 2.88M | dctcoef *block = (dctcoef*)_block; | 73 | 2.88M | stride >>= sizeof(pixel)-1; | 74 | | | 75 | 2.88M | block[0] += 32; | 76 | | | 77 | 25.9M | for( i = 0; i < 8; i++ ) | 78 | 23.0M | { | 79 | 23.0M | const unsigned int a0 = block[i+0*8] + (unsigned)block[i+4*8]; | 80 | 23.0M | const unsigned int a2 = block[i+0*8] - (unsigned)block[i+4*8]; | 81 | 23.0M | const unsigned int a4 = (block[i+2*8]>>1) - (unsigned)block[i+6*8]; | 82 | 23.0M | const unsigned int a6 = (block[i+6*8]>>1) + (unsigned)block[i+2*8]; | 83 | | | 84 | 23.0M | const unsigned int b0 = a0 + a6; | 85 | 23.0M | const unsigned int b2 = a2 + a4; | 86 | 23.0M | const unsigned int b4 = a2 - a4; | 87 | 23.0M | const unsigned int b6 = a0 - a6; | 88 | | | 89 | 23.0M | const int a1 = -block[i+3*8] + (unsigned)block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1); | 90 | 23.0M | const int a3 = block[i+1*8] + (unsigned)block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1); | 91 | 23.0M | const int a5 = -block[i+1*8] + (unsigned)block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1); | 92 | 23.0M | const int a7 = block[i+3*8] + (unsigned)block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1); | 93 | | | 94 | 23.0M | const int b1 = (a7>>2) + (unsigned)a1; | 95 | 23.0M | const int b3 = (unsigned)a3 + (a5>>2); | 96 | 23.0M | const int b5 = (a3>>2) - (unsigned)a5; | 97 | 23.0M | const int b7 = (unsigned)a7 - (a1>>2); | 98 | | | 99 | 23.0M | block[i+0*8] = b0 + b7; | 100 | 23.0M | block[i+7*8] = b0 - b7; | 101 | 23.0M | block[i+1*8] = b2 + b5; | 102 | 23.0M | block[i+6*8] = b2 - b5; | 103 | 23.0M | block[i+2*8] = b4 + b3; | 104 | 23.0M | block[i+5*8] = b4 - b3; | 105 | 23.0M | block[i+3*8] = b6 + b1; | 106 | 23.0M | block[i+4*8] = b6 - b1; | 107 | 23.0M | } | 108 | 25.9M | for( i = 0; i < 8; i++ ) | 109 | 23.0M | { | 110 | 23.0M | const unsigned a0 = block[0+i*8] + (unsigned)block[4+i*8]; | 111 | 23.0M | const unsigned a2 = block[0+i*8] - (unsigned)block[4+i*8]; | 112 | 23.0M | const unsigned a4 = (block[2+i*8]>>1) - (unsigned)block[6+i*8]; | 113 | 23.0M | const unsigned a6 = (block[6+i*8]>>1) + (unsigned)block[2+i*8]; | 114 | | | 115 | 23.0M | const unsigned b0 = a0 + a6; | 116 | 23.0M | const unsigned b2 = a2 + a4; | 117 | 23.0M | const unsigned b4 = a2 - a4; | 118 | 23.0M | const unsigned b6 = a0 - a6; | 119 | | | 120 | 23.0M | const int a1 = -(unsigned)block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1); | 121 | 23.0M | const int a3 = (unsigned)block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1); | 122 | 23.0M | const int a5 = -(unsigned)block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1); | 123 | 23.0M | const int a7 = (unsigned)block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1); | 124 | | | 125 | 23.0M | const unsigned b1 = (a7>>2) + (unsigned)a1; | 126 | 23.0M | const unsigned b3 = (unsigned)a3 + (a5>>2); | 127 | 23.0M | const unsigned b5 = (a3>>2) - (unsigned)a5; | 128 | 23.0M | const unsigned b7 = (unsigned)a7 - (a1>>2); | 129 | | | 130 | 23.0M | dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((int)(b0 + b7) >> 6) ); | 131 | 23.0M | dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((int)(b2 + b5) >> 6) ); | 132 | 23.0M | dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((int)(b4 + b3) >> 6) ); | 133 | 23.0M | dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((int)(b6 + b1) >> 6) ); | 134 | 23.0M | dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((int)(b6 - b1) >> 6) ); | 135 | 23.0M | dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((int)(b4 - b3) >> 6) ); | 136 | 23.0M | dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((int)(b2 - b5) >> 6) ); | 137 | 23.0M | dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((int)(b0 - b7) >> 6) ); | 138 | 23.0M | } | 139 | | | 140 | 2.88M | memset(block, 0, 64 * sizeof(dctcoef)); | 141 | 2.88M | } |
Line | Count | Source | 69 | 1.15M | void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride){ | 70 | 1.15M | int i; | 71 | 1.15M | pixel *dst = (pixel*)_dst; | 72 | 1.15M | dctcoef *block = (dctcoef*)_block; | 73 | 1.15M | stride >>= sizeof(pixel)-1; | 74 | | | 75 | 1.15M | block[0] += 32; | 76 | | | 77 | 10.3M | for( i = 0; i < 8; i++ ) | 78 | 9.21M | { | 79 | 9.21M | const unsigned int a0 = block[i+0*8] + (unsigned)block[i+4*8]; | 80 | 9.21M | const unsigned int a2 = block[i+0*8] - (unsigned)block[i+4*8]; | 81 | 9.21M | const unsigned int a4 = (block[i+2*8]>>1) - (unsigned)block[i+6*8]; | 82 | 9.21M | const unsigned int a6 = (block[i+6*8]>>1) + (unsigned)block[i+2*8]; | 83 | | | 84 | 9.21M | const unsigned int b0 = a0 + a6; | 85 | 9.21M | const unsigned int b2 = a2 + a4; | 86 | 9.21M | const unsigned int b4 = a2 - a4; | 87 | 9.21M | const unsigned int b6 = a0 - a6; | 88 | | | 89 | 9.21M | const int a1 = -block[i+3*8] + (unsigned)block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1); | 90 | 9.21M | const int a3 = block[i+1*8] + (unsigned)block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1); | 91 | 9.21M | const int a5 = -block[i+1*8] + (unsigned)block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1); | 92 | 9.21M | const int a7 = block[i+3*8] + (unsigned)block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1); | 93 | | | 94 | 9.21M | const int b1 = (a7>>2) + (unsigned)a1; | 95 | 9.21M | const int b3 = (unsigned)a3 + (a5>>2); | 96 | 9.21M | const int b5 = (a3>>2) - (unsigned)a5; | 97 | 9.21M | const int b7 = (unsigned)a7 - (a1>>2); | 98 | | | 99 | 9.21M | block[i+0*8] = b0 + b7; | 100 | 9.21M | block[i+7*8] = b0 - b7; | 101 | 9.21M | block[i+1*8] = b2 + b5; | 102 | 9.21M | block[i+6*8] = b2 - b5; | 103 | 9.21M | block[i+2*8] = b4 + b3; | 104 | 9.21M | block[i+5*8] = b4 - b3; | 105 | 9.21M | block[i+3*8] = b6 + b1; | 106 | 9.21M | block[i+4*8] = b6 - b1; | 107 | 9.21M | } | 108 | 10.3M | for( i = 0; i < 8; i++ ) | 109 | 9.21M | { | 110 | 9.21M | const unsigned a0 = block[0+i*8] + (unsigned)block[4+i*8]; | 111 | 9.21M | const unsigned a2 = block[0+i*8] - (unsigned)block[4+i*8]; | 112 | 9.21M | const unsigned a4 = (block[2+i*8]>>1) - (unsigned)block[6+i*8]; | 113 | 9.21M | const unsigned a6 = (block[6+i*8]>>1) + (unsigned)block[2+i*8]; | 114 | | | 115 | 9.21M | const unsigned b0 = a0 + a6; | 116 | 9.21M | const unsigned b2 = a2 + a4; | 117 | 9.21M | const unsigned b4 = a2 - a4; | 118 | 9.21M | const unsigned b6 = a0 - a6; | 119 | | | 120 | 9.21M | const int a1 = -(unsigned)block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1); | 121 | 9.21M | const int a3 = (unsigned)block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1); | 122 | 9.21M | const int a5 = -(unsigned)block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1); | 123 | 9.21M | const int a7 = (unsigned)block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1); | 124 | | | 125 | 9.21M | const unsigned b1 = (a7>>2) + (unsigned)a1; | 126 | 9.21M | const unsigned b3 = (unsigned)a3 + (a5>>2); | 127 | 9.21M | const unsigned b5 = (a3>>2) - (unsigned)a5; | 128 | 9.21M | const unsigned b7 = (unsigned)a7 - (a1>>2); | 129 | | | 130 | 9.21M | dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((int)(b0 + b7) >> 6) ); | 131 | 9.21M | dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((int)(b2 + b5) >> 6) ); | 132 | 9.21M | dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((int)(b4 + b3) >> 6) ); | 133 | 9.21M | dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((int)(b6 + b1) >> 6) ); | 134 | 9.21M | dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((int)(b6 - b1) >> 6) ); | 135 | 9.21M | dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((int)(b4 - b3) >> 6) ); | 136 | 9.21M | dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((int)(b2 - b5) >> 6) ); | 137 | 9.21M | dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((int)(b0 - b7) >> 6) ); | 138 | 9.21M | } | 139 | | | 140 | 1.15M | memset(block, 0, 64 * sizeof(dctcoef)); | 141 | 1.15M | } |
Line | Count | Source | 69 | 1.29M | void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, int16_t *_block, int stride){ | 70 | 1.29M | int i; | 71 | 1.29M | pixel *dst = (pixel*)_dst; | 72 | 1.29M | dctcoef *block = (dctcoef*)_block; | 73 | 1.29M | stride >>= sizeof(pixel)-1; | 74 | | | 75 | 1.29M | block[0] += 32; | 76 | | | 77 | 11.6M | for( i = 0; i < 8; i++ ) | 78 | 10.3M | { | 79 | 10.3M | const unsigned int a0 = block[i+0*8] + (unsigned)block[i+4*8]; | 80 | 10.3M | const unsigned int a2 = block[i+0*8] - (unsigned)block[i+4*8]; | 81 | 10.3M | const unsigned int a4 = (block[i+2*8]>>1) - (unsigned)block[i+6*8]; | 82 | 10.3M | const unsigned int a6 = (block[i+6*8]>>1) + (unsigned)block[i+2*8]; | 83 | | | 84 | 10.3M | const unsigned int b0 = a0 + a6; | 85 | 10.3M | const unsigned int b2 = a2 + a4; | 86 | 10.3M | const unsigned int b4 = a2 - a4; | 87 | 10.3M | const unsigned int b6 = a0 - a6; | 88 | | | 89 | 10.3M | const int a1 = -block[i+3*8] + (unsigned)block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1); | 90 | 10.3M | const int a3 = block[i+1*8] + (unsigned)block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1); | 91 | 10.3M | const int a5 = -block[i+1*8] + (unsigned)block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1); | 92 | 10.3M | const int a7 = block[i+3*8] + (unsigned)block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1); | 93 | | | 94 | 10.3M | const int b1 = (a7>>2) + (unsigned)a1; | 95 | 10.3M | const int b3 = (unsigned)a3 + (a5>>2); | 96 | 10.3M | const int b5 = (a3>>2) - (unsigned)a5; | 97 | 10.3M | const int b7 = (unsigned)a7 - (a1>>2); | 98 | | | 99 | 10.3M | block[i+0*8] = b0 + b7; | 100 | 10.3M | block[i+7*8] = b0 - b7; | 101 | 10.3M | block[i+1*8] = b2 + b5; | 102 | 10.3M | block[i+6*8] = b2 - b5; | 103 | 10.3M | block[i+2*8] = b4 + b3; | 104 | 10.3M | block[i+5*8] = b4 - b3; | 105 | 10.3M | block[i+3*8] = b6 + b1; | 106 | 10.3M | block[i+4*8] = b6 - b1; | 107 | 10.3M | } | 108 | 11.6M | for( i = 0; i < 8; i++ ) | 109 | 10.3M | { | 110 | 10.3M | const unsigned a0 = block[0+i*8] + (unsigned)block[4+i*8]; | 111 | 10.3M | const unsigned a2 = block[0+i*8] - (unsigned)block[4+i*8]; | 112 | 10.3M | const unsigned a4 = (block[2+i*8]>>1) - (unsigned)block[6+i*8]; | 113 | 10.3M | const unsigned a6 = (block[6+i*8]>>1) + (unsigned)block[2+i*8]; | 114 | | | 115 | 10.3M | const unsigned b0 = a0 + a6; | 116 | 10.3M | const unsigned b2 = a2 + a4; | 117 | 10.3M | const unsigned b4 = a2 - a4; | 118 | 10.3M | const unsigned b6 = a0 - a6; | 119 | | | 120 | 10.3M | const int a1 = -(unsigned)block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1); | 121 | 10.3M | const int a3 = (unsigned)block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1); | 122 | 10.3M | const int a5 = -(unsigned)block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1); | 123 | 10.3M | const int a7 = (unsigned)block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1); | 124 | | | 125 | 10.3M | const unsigned b1 = (a7>>2) + (unsigned)a1; | 126 | 10.3M | const unsigned b3 = (unsigned)a3 + (a5>>2); | 127 | 10.3M | const unsigned b5 = (a3>>2) - (unsigned)a5; | 128 | 10.3M | const unsigned b7 = (unsigned)a7 - (a1>>2); | 129 | | | 130 | 10.3M | dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((int)(b0 + b7) >> 6) ); | 131 | 10.3M | dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((int)(b2 + b5) >> 6) ); | 132 | 10.3M | dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((int)(b4 + b3) >> 6) ); | 133 | 10.3M | dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((int)(b6 + b1) >> 6) ); | 134 | 10.3M | dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((int)(b6 - b1) >> 6) ); | 135 | 10.3M | dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((int)(b4 - b3) >> 6) ); | 136 | 10.3M | dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((int)(b2 - b5) >> 6) ); | 137 | 10.3M | dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((int)(b0 - b7) >> 6) ); | 138 | 10.3M | } | 139 | | | 140 | 1.29M | memset(block, 0, 64 * sizeof(dctcoef)); | 141 | 1.29M | } |
|
142 | | |
143 | | // assumes all AC coefs are 0 |
144 | 18.4M | void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ |
145 | 18.4M | int i, j; |
146 | 18.4M | pixel *dst = (pixel*)_dst; |
147 | 18.4M | dctcoef *block = (dctcoef*)_block; |
148 | 18.4M | int dc = (block[0] + 32) >> 6; |
149 | 18.4M | stride /= sizeof(pixel); |
150 | 18.4M | block[0] = 0; |
151 | 92.2M | for( j = 0; j < 4; j++ ) |
152 | 73.8M | { |
153 | 369M | for( i = 0; i < 4; i++ ) |
154 | 295M | dst[i] = av_clip_pixel( dst[i] + dc ); |
155 | 73.8M | dst += stride; |
156 | 73.8M | } |
157 | 18.4M | } Line | Count | Source | 144 | 5.90M | void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 145 | 5.90M | int i, j; | 146 | 5.90M | pixel *dst = (pixel*)_dst; | 147 | 5.90M | dctcoef *block = (dctcoef*)_block; | 148 | 5.90M | int dc = (block[0] + 32) >> 6; | 149 | 5.90M | stride /= sizeof(pixel); | 150 | 5.90M | block[0] = 0; | 151 | 29.5M | for( j = 0; j < 4; j++ ) | 152 | 23.6M | { | 153 | 118M | for( i = 0; i < 4; i++ ) | 154 | 94.5M | dst[i] = av_clip_pixel( dst[i] + dc ); | 155 | 23.6M | dst += stride; | 156 | 23.6M | } | 157 | 5.90M | } |
Line | Count | Source | 144 | 3.07M | void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 145 | 3.07M | int i, j; | 146 | 3.07M | pixel *dst = (pixel*)_dst; | 147 | 3.07M | dctcoef *block = (dctcoef*)_block; | 148 | 3.07M | int dc = (block[0] + 32) >> 6; | 149 | 3.07M | stride /= sizeof(pixel); | 150 | 3.07M | block[0] = 0; | 151 | 15.3M | for( j = 0; j < 4; j++ ) | 152 | 12.2M | { | 153 | 61.4M | for( i = 0; i < 4; i++ ) | 154 | 49.1M | dst[i] = av_clip_pixel( dst[i] + dc ); | 155 | 12.2M | dst += stride; | 156 | 12.2M | } | 157 | 3.07M | } |
Line | Count | Source | 144 | 4.97M | void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 145 | 4.97M | int i, j; | 146 | 4.97M | pixel *dst = (pixel*)_dst; | 147 | 4.97M | dctcoef *block = (dctcoef*)_block; | 148 | 4.97M | int dc = (block[0] + 32) >> 6; | 149 | 4.97M | stride /= sizeof(pixel); | 150 | 4.97M | block[0] = 0; | 151 | 24.8M | for( j = 0; j < 4; j++ ) | 152 | 19.9M | { | 153 | 99.5M | for( i = 0; i < 4; i++ ) | 154 | 79.6M | dst[i] = av_clip_pixel( dst[i] + dc ); | 155 | 19.9M | dst += stride; | 156 | 19.9M | } | 157 | 4.97M | } |
Line | Count | Source | 144 | 2.60M | void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 145 | 2.60M | int i, j; | 146 | 2.60M | pixel *dst = (pixel*)_dst; | 147 | 2.60M | dctcoef *block = (dctcoef*)_block; | 148 | 2.60M | int dc = (block[0] + 32) >> 6; | 149 | 2.60M | stride /= sizeof(pixel); | 150 | 2.60M | block[0] = 0; | 151 | 13.0M | for( j = 0; j < 4; j++ ) | 152 | 10.4M | { | 153 | 52.0M | for( i = 0; i < 4; i++ ) | 154 | 41.6M | dst[i] = av_clip_pixel( dst[i] + dc ); | 155 | 10.4M | dst += stride; | 156 | 10.4M | } | 157 | 2.60M | } |
Line | Count | Source | 144 | 1.89M | void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 145 | 1.89M | int i, j; | 146 | 1.89M | pixel *dst = (pixel*)_dst; | 147 | 1.89M | dctcoef *block = (dctcoef*)_block; | 148 | 1.89M | int dc = (block[0] + 32) >> 6; | 149 | 1.89M | stride /= sizeof(pixel); | 150 | 1.89M | block[0] = 0; | 151 | 9.48M | for( j = 0; j < 4; j++ ) | 152 | 7.58M | { | 153 | 37.9M | for( i = 0; i < 4; i++ ) | 154 | 30.3M | dst[i] = av_clip_pixel( dst[i] + dc ); | 155 | 7.58M | dst += stride; | 156 | 7.58M | } | 157 | 1.89M | } |
|
158 | | |
159 | 831k | void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ |
160 | 831k | int i, j; |
161 | 831k | pixel *dst = (pixel*)_dst; |
162 | 831k | dctcoef *block = (dctcoef*)_block; |
163 | 831k | int dc = (block[0] + 32) >> 6; |
164 | 831k | block[0] = 0; |
165 | 831k | stride /= sizeof(pixel); |
166 | 7.48M | for( j = 0; j < 8; j++ ) |
167 | 6.65M | { |
168 | 59.8M | for( i = 0; i < 8; i++ ) |
169 | 53.2M | dst[i] = av_clip_pixel( dst[i] + dc ); |
170 | 6.65M | dst += stride; |
171 | 6.65M | } |
172 | 831k | } Line | Count | Source | 159 | 331k | void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 160 | 331k | int i, j; | 161 | 331k | pixel *dst = (pixel*)_dst; | 162 | 331k | dctcoef *block = (dctcoef*)_block; | 163 | 331k | int dc = (block[0] + 32) >> 6; | 164 | 331k | block[0] = 0; | 165 | 331k | stride /= sizeof(pixel); | 166 | 2.98M | for( j = 0; j < 8; j++ ) | 167 | 2.65M | { | 168 | 23.8M | for( i = 0; i < 8; i++ ) | 169 | 21.2M | dst[i] = av_clip_pixel( dst[i] + dc ); | 170 | 2.65M | dst += stride; | 171 | 2.65M | } | 172 | 331k | } |
Line | Count | Source | 159 | 38.2k | void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 160 | 38.2k | int i, j; | 161 | 38.2k | pixel *dst = (pixel*)_dst; | 162 | 38.2k | dctcoef *block = (dctcoef*)_block; | 163 | 38.2k | int dc = (block[0] + 32) >> 6; | 164 | 38.2k | block[0] = 0; | 165 | 38.2k | stride /= sizeof(pixel); | 166 | 344k | for( j = 0; j < 8; j++ ) | 167 | 306k | { | 168 | 2.75M | for( i = 0; i < 8; i++ ) | 169 | 2.45M | dst[i] = av_clip_pixel( dst[i] + dc ); | 170 | 306k | dst += stride; | 171 | 306k | } | 172 | 38.2k | } |
ff_h264_idct8_dc_add_10_c Line | Count | Source | 159 | 58.0k | void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 160 | 58.0k | int i, j; | 161 | 58.0k | pixel *dst = (pixel*)_dst; | 162 | 58.0k | dctcoef *block = (dctcoef*)_block; | 163 | 58.0k | int dc = (block[0] + 32) >> 6; | 164 | 58.0k | block[0] = 0; | 165 | 58.0k | stride /= sizeof(pixel); | 166 | 522k | for( j = 0; j < 8; j++ ) | 167 | 464k | { | 168 | 4.18M | for( i = 0; i < 8; i++ ) | 169 | 3.71M | dst[i] = av_clip_pixel( dst[i] + dc ); | 170 | 464k | dst += stride; | 171 | 464k | } | 172 | 58.0k | } |
ff_h264_idct8_dc_add_12_c Line | Count | Source | 159 | 133k | void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 160 | 133k | int i, j; | 161 | 133k | pixel *dst = (pixel*)_dst; | 162 | 133k | dctcoef *block = (dctcoef*)_block; | 163 | 133k | int dc = (block[0] + 32) >> 6; | 164 | 133k | block[0] = 0; | 165 | 133k | stride /= sizeof(pixel); | 166 | 1.19M | for( j = 0; j < 8; j++ ) | 167 | 1.06M | { | 168 | 9.59M | for( i = 0; i < 8; i++ ) | 169 | 8.52M | dst[i] = av_clip_pixel( dst[i] + dc ); | 170 | 1.06M | dst += stride; | 171 | 1.06M | } | 172 | 133k | } |
ff_h264_idct8_dc_add_14_c Line | Count | Source | 159 | 270k | void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, int16_t *_block, int stride){ | 160 | 270k | int i, j; | 161 | 270k | pixel *dst = (pixel*)_dst; | 162 | 270k | dctcoef *block = (dctcoef*)_block; | 163 | 270k | int dc = (block[0] + 32) >> 6; | 164 | 270k | block[0] = 0; | 165 | 270k | stride /= sizeof(pixel); | 166 | 2.43M | for( j = 0; j < 8; j++ ) | 167 | 2.16M | { | 168 | 19.4M | for( i = 0; i < 8; i++ ) | 169 | 17.3M | dst[i] = av_clip_pixel( dst[i] + dc ); | 170 | 2.16M | dst += stride; | 171 | 2.16M | } | 172 | 270k | } |
|
173 | | |
174 | | void FUNCC(ff_h264_idct_add16)(uint8_t *dst, const int *block_offset, |
175 | | int16_t *block, int stride, |
176 | | const uint8_t nnzc[5 * 8]) |
177 | 40.4M | { |
178 | 40.4M | int i; |
179 | 686M | for(i=0; i<16; i++){ |
180 | 646M | int nnz = nnzc[ scan8[i] ]; |
181 | 646M | if(nnz){ |
182 | 62.7M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); |
183 | 60.6M | else FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); |
184 | 62.7M | } |
185 | 646M | } |
186 | 40.4M | } Line | Count | Source | 177 | 14.4M | { | 178 | 14.4M | int i; | 179 | 245M | for(i=0; i<16; i++){ | 180 | 230M | int nnz = nnzc[ scan8[i] ]; | 181 | 230M | if(nnz){ | 182 | 16.5M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 183 | 15.7M | else FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 184 | 16.5M | } | 185 | 230M | } | 186 | 14.4M | } |
Line | Count | Source | 177 | 11.4M | { | 178 | 11.4M | int i; | 179 | 194M | for(i=0; i<16; i++){ | 180 | 182M | int nnz = nnzc[ scan8[i] ]; | 181 | 182M | if(nnz){ | 182 | 13.8M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 183 | 13.6M | else FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 184 | 13.8M | } | 185 | 182M | } | 186 | 11.4M | } |
Line | Count | Source | 177 | 10.9M | { | 178 | 10.9M | int i; | 179 | 185M | for(i=0; i<16; i++){ | 180 | 174M | int nnz = nnzc[ scan8[i] ]; | 181 | 174M | if(nnz){ | 182 | 13.4M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 183 | 12.9M | else FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 184 | 13.4M | } | 185 | 174M | } | 186 | 10.9M | } |
Line | Count | Source | 177 | 1.65M | { | 178 | 1.65M | int i; | 179 | 28.1M | for(i=0; i<16; i++){ | 180 | 26.4M | int nnz = nnzc[ scan8[i] ]; | 181 | 26.4M | if(nnz){ | 182 | 8.51M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 183 | 8.22M | else FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 184 | 8.51M | } | 185 | 26.4M | } | 186 | 1.65M | } |
Line | Count | Source | 177 | 1.97M | { | 178 | 1.97M | int i; | 179 | 33.6M | for(i=0; i<16; i++){ | 180 | 31.6M | int nnz = nnzc[ scan8[i] ]; | 181 | 31.6M | if(nnz){ | 182 | 10.3M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 183 | 10.1M | else FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 184 | 10.3M | } | 185 | 31.6M | } | 186 | 1.97M | } |
|
187 | | |
188 | | void FUNCC(ff_h264_idct_add16intra)(uint8_t *dst, const int *block_offset, |
189 | | int16_t *block, int stride, |
190 | | const uint8_t nnzc[5 * 8]) |
191 | 919k | { |
192 | 919k | int i; |
193 | 15.6M | for(i=0; i<16; i++){ |
194 | 14.7M | if(nnzc[ scan8[i] ]) FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); |
195 | 13.6M | else if(((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); |
196 | 14.7M | } |
197 | 919k | } ff_h264_idct_add16intra_8_c Line | Count | Source | 191 | 346k | { | 192 | 346k | int i; | 193 | 5.88M | for(i=0; i<16; i++){ | 194 | 5.54M | if(nnzc[ scan8[i] ]) FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 195 | 5.39M | else if(((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 196 | 5.54M | } | 197 | 346k | } |
ff_h264_idct_add16intra_9_c Line | Count | Source | 191 | 183k | { | 192 | 183k | int i; | 193 | 3.11M | for(i=0; i<16; i++){ | 194 | 2.92M | if(nnzc[ scan8[i] ]) FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 195 | 2.71M | else if(((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 196 | 2.92M | } | 197 | 183k | } |
ff_h264_idct_add16intra_10_c Line | Count | Source | 191 | 254k | { | 192 | 254k | int i; | 193 | 4.31M | for(i=0; i<16; i++){ | 194 | 4.06M | if(nnzc[ scan8[i] ]) FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 195 | 3.72M | else if(((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 196 | 4.06M | } | 197 | 254k | } |
ff_h264_idct_add16intra_12_c Line | Count | Source | 191 | 61.3k | { | 192 | 61.3k | int i; | 193 | 1.04M | for(i=0; i<16; i++){ | 194 | 981k | if(nnzc[ scan8[i] ]) FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 195 | 788k | else if(((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 196 | 981k | } | 197 | 61.3k | } |
ff_h264_idct_add16intra_14_c Line | Count | Source | 191 | 74.8k | { | 192 | 74.8k | int i; | 193 | 1.27M | for(i=0; i<16; i++){ | 194 | 1.19M | if(nnzc[ scan8[i] ]) FUNCC(ff_h264_idct_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 195 | 1.06M | else if(((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 196 | 1.19M | } | 197 | 74.8k | } |
|
198 | | |
199 | | void FUNCC(ff_h264_idct8_add4)(uint8_t *dst, const int *block_offset, |
200 | | int16_t *block, int stride, |
201 | | const uint8_t nnzc[5 * 8]) |
202 | 2.30M | { |
203 | 2.30M | int i; |
204 | 11.5M | for(i=0; i<16; i+=4){ |
205 | 9.20M | int nnz = nnzc[ scan8[i] ]; |
206 | 9.20M | if(nnz){ |
207 | 5.62M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct8_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); |
208 | 5.43M | else FUNCC(ff_h264_idct8_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); |
209 | 5.62M | } |
210 | 9.20M | } |
211 | 2.30M | } Line | Count | Source | 202 | 472k | { | 203 | 472k | int i; | 204 | 2.36M | for(i=0; i<16; i+=4){ | 205 | 1.88M | int nnz = nnzc[ scan8[i] ]; | 206 | 1.88M | if(nnz){ | 207 | 957k | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct8_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 208 | 856k | else FUNCC(ff_h264_idct8_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 209 | 957k | } | 210 | 1.88M | } | 211 | 472k | } |
Line | Count | Source | 202 | 311k | { | 203 | 311k | int i; | 204 | 1.55M | for(i=0; i<16; i+=4){ | 205 | 1.24M | int nnz = nnzc[ scan8[i] ]; | 206 | 1.24M | if(nnz){ | 207 | 603k | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct8_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 208 | 593k | else FUNCC(ff_h264_idct8_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 209 | 603k | } | 210 | 1.24M | } | 211 | 311k | } |
Line | Count | Source | 202 | 864k | { | 203 | 864k | int i; | 204 | 4.32M | for(i=0; i<16; i+=4){ | 205 | 3.45M | int nnz = nnzc[ scan8[i] ]; | 206 | 3.45M | if(nnz){ | 207 | 2.68M | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct8_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 208 | 2.66M | else FUNCC(ff_h264_idct8_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 209 | 2.68M | } | 210 | 3.45M | } | 211 | 864k | } |
Line | Count | Source | 202 | 315k | { | 203 | 315k | int i; | 204 | 1.57M | for(i=0; i<16; i+=4){ | 205 | 1.26M | int nnz = nnzc[ scan8[i] ]; | 206 | 1.26M | if(nnz){ | 207 | 689k | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct8_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 208 | 677k | else FUNCC(ff_h264_idct8_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 209 | 689k | } | 210 | 1.26M | } | 211 | 315k | } |
Line | Count | Source | 202 | 337k | { | 203 | 337k | int i; | 204 | 1.68M | for(i=0; i<16; i+=4){ | 205 | 1.34M | int nnz = nnzc[ scan8[i] ]; | 206 | 1.34M | if(nnz){ | 207 | 687k | if(nnz==1 && ((dctcoef*)block)[i*16]) FUNCC(ff_h264_idct8_dc_add)(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 208 | 649k | else FUNCC(ff_h264_idct8_add )(dst + block_offset[i], block + i*16*sizeof(pixel), stride); | 209 | 687k | } | 210 | 1.34M | } | 211 | 337k | } |
|
212 | | |
213 | 9.34M | void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ |
214 | 9.34M | int i, j; |
215 | 28.0M | for(j=1; j<3; j++){ |
216 | 93.4M | for(i=j*16; i<j*16+4; i++){ |
217 | 74.7M | if(nnzc[ scan8[i] ]) |
218 | 2.69M | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); |
219 | 72.0M | else if(((dctcoef*)block)[i*16]) |
220 | 4.86M | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); |
221 | 74.7M | } |
222 | 18.6M | } |
223 | 9.34M | } Line | Count | Source | 213 | 4.55M | void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 214 | 4.55M | int i, j; | 215 | 13.6M | for(j=1; j<3; j++){ | 216 | 45.5M | for(i=j*16; i<j*16+4; i++){ | 217 | 36.4M | if(nnzc[ scan8[i] ]) | 218 | 793k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 219 | 35.6M | else if(((dctcoef*)block)[i*16]) | 220 | 2.52M | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 221 | 36.4M | } | 222 | 9.10M | } | 223 | 4.55M | } |
Line | Count | Source | 213 | 880k | void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 214 | 880k | int i, j; | 215 | 2.64M | for(j=1; j<3; j++){ | 216 | 8.80M | for(i=j*16; i<j*16+4; i++){ | 217 | 7.04M | if(nnzc[ scan8[i] ]) | 218 | 229k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 219 | 6.81M | else if(((dctcoef*)block)[i*16]) | 220 | 455k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 221 | 7.04M | } | 222 | 1.76M | } | 223 | 880k | } |
Line | Count | Source | 213 | 3.34M | void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 214 | 3.34M | int i, j; | 215 | 10.0M | for(j=1; j<3; j++){ | 216 | 33.4M | for(i=j*16; i<j*16+4; i++){ | 217 | 26.7M | if(nnzc[ scan8[i] ]) | 218 | 1.36M | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 219 | 25.3M | else if(((dctcoef*)block)[i*16]) | 220 | 968k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 221 | 26.7M | } | 222 | 6.68M | } | 223 | 3.34M | } |
Line | Count | Source | 213 | 328k | void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 214 | 328k | int i, j; | 215 | 984k | for(j=1; j<3; j++){ | 216 | 3.28M | for(i=j*16; i<j*16+4; i++){ | 217 | 2.62M | if(nnzc[ scan8[i] ]) | 218 | 288k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 219 | 2.33M | else if(((dctcoef*)block)[i*16]) | 220 | 551k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 221 | 2.62M | } | 222 | 656k | } | 223 | 328k | } |
Line | Count | Source | 213 | 244k | void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 214 | 244k | int i, j; | 215 | 734k | for(j=1; j<3; j++){ | 216 | 2.44M | for(i=j*16; i<j*16+4; i++){ | 217 | 1.95M | if(nnzc[ scan8[i] ]) | 218 | 24.6k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 219 | 1.93M | else if(((dctcoef*)block)[i*16]) | 220 | 356k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 221 | 1.95M | } | 222 | 489k | } | 223 | 244k | } |
|
224 | | |
225 | 4.72M | void FUNCC(ff_h264_idct_add8_422)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ |
226 | 4.72M | int i, j; |
227 | | |
228 | 14.1M | for(j=1; j<3; j++){ |
229 | 47.2M | for(i=j*16; i<j*16+4; i++){ |
230 | 37.7M | if(nnzc[ scan8[i] ]) |
231 | 1.28M | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); |
232 | 36.4M | else if(((dctcoef*)block)[i*16]) |
233 | 2.47M | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); |
234 | 37.7M | } |
235 | 9.44M | } |
236 | | |
237 | 14.1M | for(j=1; j<3; j++){ |
238 | 47.2M | for(i=j*16+4; i<j*16+8; i++){ |
239 | 37.7M | if(nnzc[ scan8[i+4] ]) |
240 | 1.53M | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); |
241 | 36.2M | else if(((dctcoef*)block)[i*16]) |
242 | 2.41M | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); |
243 | 37.7M | } |
244 | 9.44M | } |
245 | 4.72M | } ff_h264_idct_add8_422_8_c Line | Count | Source | 225 | 2.42M | void FUNCC(ff_h264_idct_add8_422)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 226 | 2.42M | int i, j; | 227 | | | 228 | 7.26M | for(j=1; j<3; j++){ | 229 | 24.2M | for(i=j*16; i<j*16+4; i++){ | 230 | 19.3M | if(nnzc[ scan8[i] ]) | 231 | 156k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 232 | 19.2M | else if(((dctcoef*)block)[i*16]) | 233 | 188k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 234 | 19.3M | } | 235 | 4.84M | } | 236 | | | 237 | 7.26M | for(j=1; j<3; j++){ | 238 | 24.2M | for(i=j*16+4; i<j*16+8; i++){ | 239 | 19.3M | if(nnzc[ scan8[i+4] ]) | 240 | 175k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 241 | 19.1M | else if(((dctcoef*)block)[i*16]) | 242 | 181k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 243 | 19.3M | } | 244 | 4.84M | } | 245 | 2.42M | } |
ff_h264_idct_add8_422_9_c Line | Count | Source | 225 | 662k | void FUNCC(ff_h264_idct_add8_422)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 226 | 662k | int i, j; | 227 | | | 228 | 1.98M | for(j=1; j<3; j++){ | 229 | 6.62M | for(i=j*16; i<j*16+4; i++){ | 230 | 5.30M | if(nnzc[ scan8[i] ]) | 231 | 131k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 232 | 5.17M | else if(((dctcoef*)block)[i*16]) | 233 | 549k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 234 | 5.30M | } | 235 | 1.32M | } | 236 | | | 237 | 1.98M | for(j=1; j<3; j++){ | 238 | 6.62M | for(i=j*16+4; i<j*16+8; i++){ | 239 | 5.30M | if(nnzc[ scan8[i+4] ]) | 240 | 164k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 241 | 5.13M | else if(((dctcoef*)block)[i*16]) | 242 | 528k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 243 | 5.30M | } | 244 | 1.32M | } | 245 | 662k | } |
ff_h264_idct_add8_422_10_c Line | Count | Source | 225 | 884k | void FUNCC(ff_h264_idct_add8_422)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 226 | 884k | int i, j; | 227 | | | 228 | 2.65M | for(j=1; j<3; j++){ | 229 | 8.84M | for(i=j*16; i<j*16+4; i++){ | 230 | 7.07M | if(nnzc[ scan8[i] ]) | 231 | 130k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 232 | 6.94M | else if(((dctcoef*)block)[i*16]) | 233 | 743k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 234 | 7.07M | } | 235 | 1.76M | } | 236 | | | 237 | 2.65M | for(j=1; j<3; j++){ | 238 | 8.84M | for(i=j*16+4; i<j*16+8; i++){ | 239 | 7.07M | if(nnzc[ scan8[i+4] ]) | 240 | 116k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 241 | 6.95M | else if(((dctcoef*)block)[i*16]) | 242 | 754k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 243 | 7.07M | } | 244 | 1.76M | } | 245 | 884k | } |
ff_h264_idct_add8_422_12_c Line | Count | Source | 225 | 429k | void FUNCC(ff_h264_idct_add8_422)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 226 | 429k | int i, j; | 227 | | | 228 | 1.28M | for(j=1; j<3; j++){ | 229 | 4.29M | for(i=j*16; i<j*16+4; i++){ | 230 | 3.43M | if(nnzc[ scan8[i] ]) | 231 | 478k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 232 | 2.95M | else if(((dctcoef*)block)[i*16]) | 233 | 585k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 234 | 3.43M | } | 235 | 859k | } | 236 | | | 237 | 1.28M | for(j=1; j<3; j++){ | 238 | 4.29M | for(i=j*16+4; i<j*16+8; i++){ | 239 | 3.43M | if(nnzc[ scan8[i+4] ]) | 240 | 623k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 241 | 2.81M | else if(((dctcoef*)block)[i*16]) | 242 | 568k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 243 | 3.43M | } | 244 | 859k | } | 245 | 429k | } |
ff_h264_idct_add8_422_14_c Line | Count | Source | 225 | 323k | void FUNCC(ff_h264_idct_add8_422)(uint8_t **dest, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]){ | 226 | 323k | int i, j; | 227 | | | 228 | 970k | for(j=1; j<3; j++){ | 229 | 3.23M | for(i=j*16; i<j*16+4; i++){ | 230 | 2.58M | if(nnzc[ scan8[i] ]) | 231 | 391k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 232 | 2.19M | else if(((dctcoef*)block)[i*16]) | 233 | 403k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i], block + i*16*sizeof(pixel), stride); | 234 | 2.58M | } | 235 | 647k | } | 236 | | | 237 | 970k | for(j=1; j<3; j++){ | 238 | 3.23M | for(i=j*16+4; i<j*16+8; i++){ | 239 | 2.58M | if(nnzc[ scan8[i+4] ]) | 240 | 450k | FUNCC(ff_h264_idct_add )(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 241 | 2.13M | else if(((dctcoef*)block)[i*16]) | 242 | 381k | FUNCC(ff_h264_idct_dc_add)(dest[j-1] + block_offset[i+4], block + i*16*sizeof(pixel), stride); | 243 | 2.58M | } | 244 | 647k | } | 245 | 323k | } |
|
246 | | |
247 | | /** |
248 | | * IDCT transforms the 16 dc values and dequantizes them. |
249 | | * @param qmul quantization parameter |
250 | | */ |
251 | 487k | void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ |
252 | 9.25M | #define stride 16 |
253 | 487k | int i; |
254 | 487k | int temp[16]; |
255 | 487k | static const uint8_t x_offset[4]={0, 2*stride, 8*stride, 10*stride}; |
256 | 487k | dctcoef *input = (dctcoef*)_input; |
257 | 487k | dctcoef *output = (dctcoef*)_output; |
258 | | |
259 | 2.43M | for(i=0; i<4; i++){ |
260 | 1.94M | const int z0= input[4*i+0] + input[4*i+1]; |
261 | 1.94M | const int z1= input[4*i+0] - input[4*i+1]; |
262 | 1.94M | const int z2= input[4*i+2] - input[4*i+3]; |
263 | 1.94M | const int z3= input[4*i+2] + input[4*i+3]; |
264 | | |
265 | 1.94M | temp[4*i+0]= z0+z3; |
266 | 1.94M | temp[4*i+1]= z0-z3; |
267 | 1.94M | temp[4*i+2]= z1-z2; |
268 | 1.94M | temp[4*i+3]= z1+z2; |
269 | 1.94M | } |
270 | | |
271 | 2.43M | for(i=0; i<4; i++){ |
272 | 1.94M | const int offset= x_offset[i]; |
273 | 1.94M | const SUINT z0= temp[4*0+i] + temp[4*2+i]; |
274 | 1.94M | const SUINT z1= temp[4*0+i] - temp[4*2+i]; |
275 | 1.94M | const SUINT z2= temp[4*1+i] - temp[4*3+i]; |
276 | 1.94M | const SUINT z3= temp[4*1+i] + temp[4*3+i]; |
277 | | |
278 | 1.94M | output[stride* 0+offset]= (int)((z0 + z3)*qmul + 128 ) >> 8; |
279 | 1.94M | output[stride* 1+offset]= (int)((z1 + z2)*qmul + 128 ) >> 8; |
280 | 1.94M | output[stride* 4+offset]= (int)((z1 - z2)*qmul + 128 ) >> 8; |
281 | 1.94M | output[stride* 5+offset]= (int)((z0 - z3)*qmul + 128 ) >> 8; |
282 | 1.94M | } |
283 | 487k | #undef stride |
284 | 487k | } ff_h264_luma_dc_dequant_idct_8_c Line | Count | Source | 251 | 114k | void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ | 252 | 114k | #define stride 16 | 253 | 114k | int i; | 254 | 114k | int temp[16]; | 255 | 114k | static const uint8_t x_offset[4]={0, 2*stride, 8*stride, 10*stride}; | 256 | 114k | dctcoef *input = (dctcoef*)_input; | 257 | 114k | dctcoef *output = (dctcoef*)_output; | 258 | | | 259 | 570k | for(i=0; i<4; i++){ | 260 | 456k | const int z0= input[4*i+0] + input[4*i+1]; | 261 | 456k | const int z1= input[4*i+0] - input[4*i+1]; | 262 | 456k | const int z2= input[4*i+2] - input[4*i+3]; | 263 | 456k | const int z3= input[4*i+2] + input[4*i+3]; | 264 | | | 265 | 456k | temp[4*i+0]= z0+z3; | 266 | 456k | temp[4*i+1]= z0-z3; | 267 | 456k | temp[4*i+2]= z1-z2; | 268 | 456k | temp[4*i+3]= z1+z2; | 269 | 456k | } | 270 | | | 271 | 570k | for(i=0; i<4; i++){ | 272 | 456k | const int offset= x_offset[i]; | 273 | 456k | const SUINT z0= temp[4*0+i] + temp[4*2+i]; | 274 | 456k | const SUINT z1= temp[4*0+i] - temp[4*2+i]; | 275 | 456k | const SUINT z2= temp[4*1+i] - temp[4*3+i]; | 276 | 456k | const SUINT z3= temp[4*1+i] + temp[4*3+i]; | 277 | | | 278 | 456k | output[stride* 0+offset]= (int)((z0 + z3)*qmul + 128 ) >> 8; | 279 | 456k | output[stride* 1+offset]= (int)((z1 + z2)*qmul + 128 ) >> 8; | 280 | 456k | output[stride* 4+offset]= (int)((z1 - z2)*qmul + 128 ) >> 8; | 281 | 456k | output[stride* 5+offset]= (int)((z0 - z3)*qmul + 128 ) >> 8; | 282 | 456k | } | 283 | 114k | #undef stride | 284 | 114k | } |
ff_h264_luma_dc_dequant_idct_9_c Line | Count | Source | 251 | 104k | void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ | 252 | 104k | #define stride 16 | 253 | 104k | int i; | 254 | 104k | int temp[16]; | 255 | 104k | static const uint8_t x_offset[4]={0, 2*stride, 8*stride, 10*stride}; | 256 | 104k | dctcoef *input = (dctcoef*)_input; | 257 | 104k | dctcoef *output = (dctcoef*)_output; | 258 | | | 259 | 524k | for(i=0; i<4; i++){ | 260 | 419k | const int z0= input[4*i+0] + input[4*i+1]; | 261 | 419k | const int z1= input[4*i+0] - input[4*i+1]; | 262 | 419k | const int z2= input[4*i+2] - input[4*i+3]; | 263 | 419k | const int z3= input[4*i+2] + input[4*i+3]; | 264 | | | 265 | 419k | temp[4*i+0]= z0+z3; | 266 | 419k | temp[4*i+1]= z0-z3; | 267 | 419k | temp[4*i+2]= z1-z2; | 268 | 419k | temp[4*i+3]= z1+z2; | 269 | 419k | } | 270 | | | 271 | 524k | for(i=0; i<4; i++){ | 272 | 419k | const int offset= x_offset[i]; | 273 | 419k | const SUINT z0= temp[4*0+i] + temp[4*2+i]; | 274 | 419k | const SUINT z1= temp[4*0+i] - temp[4*2+i]; | 275 | 419k | const SUINT z2= temp[4*1+i] - temp[4*3+i]; | 276 | 419k | const SUINT z3= temp[4*1+i] + temp[4*3+i]; | 277 | | | 278 | 419k | output[stride* 0+offset]= (int)((z0 + z3)*qmul + 128 ) >> 8; | 279 | 419k | output[stride* 1+offset]= (int)((z1 + z2)*qmul + 128 ) >> 8; | 280 | 419k | output[stride* 4+offset]= (int)((z1 - z2)*qmul + 128 ) >> 8; | 281 | 419k | output[stride* 5+offset]= (int)((z0 - z3)*qmul + 128 ) >> 8; | 282 | 419k | } | 283 | 104k | #undef stride | 284 | 104k | } |
ff_h264_luma_dc_dequant_idct_10_c Line | Count | Source | 251 | 176k | void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ | 252 | 176k | #define stride 16 | 253 | 176k | int i; | 254 | 176k | int temp[16]; | 255 | 176k | static const uint8_t x_offset[4]={0, 2*stride, 8*stride, 10*stride}; | 256 | 176k | dctcoef *input = (dctcoef*)_input; | 257 | 176k | dctcoef *output = (dctcoef*)_output; | 258 | | | 259 | 881k | for(i=0; i<4; i++){ | 260 | 705k | const int z0= input[4*i+0] + input[4*i+1]; | 261 | 705k | const int z1= input[4*i+0] - input[4*i+1]; | 262 | 705k | const int z2= input[4*i+2] - input[4*i+3]; | 263 | 705k | const int z3= input[4*i+2] + input[4*i+3]; | 264 | | | 265 | 705k | temp[4*i+0]= z0+z3; | 266 | 705k | temp[4*i+1]= z0-z3; | 267 | 705k | temp[4*i+2]= z1-z2; | 268 | 705k | temp[4*i+3]= z1+z2; | 269 | 705k | } | 270 | | | 271 | 881k | for(i=0; i<4; i++){ | 272 | 705k | const int offset= x_offset[i]; | 273 | 705k | const SUINT z0= temp[4*0+i] + temp[4*2+i]; | 274 | 705k | const SUINT z1= temp[4*0+i] - temp[4*2+i]; | 275 | 705k | const SUINT z2= temp[4*1+i] - temp[4*3+i]; | 276 | 705k | const SUINT z3= temp[4*1+i] + temp[4*3+i]; | 277 | | | 278 | 705k | output[stride* 0+offset]= (int)((z0 + z3)*qmul + 128 ) >> 8; | 279 | 705k | output[stride* 1+offset]= (int)((z1 + z2)*qmul + 128 ) >> 8; | 280 | 705k | output[stride* 4+offset]= (int)((z1 - z2)*qmul + 128 ) >> 8; | 281 | 705k | output[stride* 5+offset]= (int)((z0 - z3)*qmul + 128 ) >> 8; | 282 | 705k | } | 283 | 176k | #undef stride | 284 | 176k | } |
ff_h264_luma_dc_dequant_idct_12_c Line | Count | Source | 251 | 48.7k | void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ | 252 | 48.7k | #define stride 16 | 253 | 48.7k | int i; | 254 | 48.7k | int temp[16]; | 255 | 48.7k | static const uint8_t x_offset[4]={0, 2*stride, 8*stride, 10*stride}; | 256 | 48.7k | dctcoef *input = (dctcoef*)_input; | 257 | 48.7k | dctcoef *output = (dctcoef*)_output; | 258 | | | 259 | 243k | for(i=0; i<4; i++){ | 260 | 194k | const int z0= input[4*i+0] + input[4*i+1]; | 261 | 194k | const int z1= input[4*i+0] - input[4*i+1]; | 262 | 194k | const int z2= input[4*i+2] - input[4*i+3]; | 263 | 194k | const int z3= input[4*i+2] + input[4*i+3]; | 264 | | | 265 | 194k | temp[4*i+0]= z0+z3; | 266 | 194k | temp[4*i+1]= z0-z3; | 267 | 194k | temp[4*i+2]= z1-z2; | 268 | 194k | temp[4*i+3]= z1+z2; | 269 | 194k | } | 270 | | | 271 | 243k | for(i=0; i<4; i++){ | 272 | 194k | const int offset= x_offset[i]; | 273 | 194k | const SUINT z0= temp[4*0+i] + temp[4*2+i]; | 274 | 194k | const SUINT z1= temp[4*0+i] - temp[4*2+i]; | 275 | 194k | const SUINT z2= temp[4*1+i] - temp[4*3+i]; | 276 | 194k | const SUINT z3= temp[4*1+i] + temp[4*3+i]; | 277 | | | 278 | 194k | output[stride* 0+offset]= (int)((z0 + z3)*qmul + 128 ) >> 8; | 279 | 194k | output[stride* 1+offset]= (int)((z1 + z2)*qmul + 128 ) >> 8; | 280 | 194k | output[stride* 4+offset]= (int)((z1 - z2)*qmul + 128 ) >> 8; | 281 | 194k | output[stride* 5+offset]= (int)((z0 - z3)*qmul + 128 ) >> 8; | 282 | 194k | } | 283 | 48.7k | #undef stride | 284 | 48.7k | } |
ff_h264_luma_dc_dequant_idct_14_c Line | Count | Source | 251 | 42.9k | void FUNCC(ff_h264_luma_dc_dequant_idct)(int16_t *_output, int16_t *_input, int qmul){ | 252 | 42.9k | #define stride 16 | 253 | 42.9k | int i; | 254 | 42.9k | int temp[16]; | 255 | 42.9k | static const uint8_t x_offset[4]={0, 2*stride, 8*stride, 10*stride}; | 256 | 42.9k | dctcoef *input = (dctcoef*)_input; | 257 | 42.9k | dctcoef *output = (dctcoef*)_output; | 258 | | | 259 | 214k | for(i=0; i<4; i++){ | 260 | 171k | const int z0= input[4*i+0] + input[4*i+1]; | 261 | 171k | const int z1= input[4*i+0] - input[4*i+1]; | 262 | 171k | const int z2= input[4*i+2] - input[4*i+3]; | 263 | 171k | const int z3= input[4*i+2] + input[4*i+3]; | 264 | | | 265 | 171k | temp[4*i+0]= z0+z3; | 266 | 171k | temp[4*i+1]= z0-z3; | 267 | 171k | temp[4*i+2]= z1-z2; | 268 | 171k | temp[4*i+3]= z1+z2; | 269 | 171k | } | 270 | | | 271 | 214k | for(i=0; i<4; i++){ | 272 | 171k | const int offset= x_offset[i]; | 273 | 171k | const SUINT z0= temp[4*0+i] + temp[4*2+i]; | 274 | 171k | const SUINT z1= temp[4*0+i] - temp[4*2+i]; | 275 | 171k | const SUINT z2= temp[4*1+i] - temp[4*3+i]; | 276 | 171k | const SUINT z3= temp[4*1+i] + temp[4*3+i]; | 277 | | | 278 | 171k | output[stride* 0+offset]= (int)((z0 + z3)*qmul + 128 ) >> 8; | 279 | 171k | output[stride* 1+offset]= (int)((z1 + z2)*qmul + 128 ) >> 8; | 280 | 171k | output[stride* 4+offset]= (int)((z1 - z2)*qmul + 128 ) >> 8; | 281 | 171k | output[stride* 5+offset]= (int)((z0 - z3)*qmul + 128 ) >> 8; | 282 | 171k | } | 283 | 42.9k | #undef stride | 284 | 42.9k | } |
|
285 | | |
286 | 1.36M | void FUNCC(ff_h264_chroma422_dc_dequant_idct)(int16_t *_block, int qmul){ |
287 | 1.36M | const int stride= 16*2; |
288 | 1.36M | const int xStride= 16; |
289 | 1.36M | int i; |
290 | 1.36M | unsigned temp[8]; |
291 | 1.36M | static const uint8_t x_offset[2]={0, 16}; |
292 | 1.36M | dctcoef *block = (dctcoef*)_block; |
293 | | |
294 | 6.81M | for(i=0; i<4; i++){ |
295 | 5.45M | temp[2*i+0] = block[stride*i + xStride*0] + (unsigned)block[stride*i + xStride*1]; |
296 | 5.45M | temp[2*i+1] = block[stride*i + xStride*0] - (unsigned)block[stride*i + xStride*1]; |
297 | 5.45M | } |
298 | | |
299 | 4.08M | for(i=0; i<2; i++){ |
300 | 2.72M | const int offset= x_offset[i]; |
301 | 2.72M | const SUINT z0= temp[2*0+i] + temp[2*2+i]; |
302 | 2.72M | const SUINT z1= temp[2*0+i] - temp[2*2+i]; |
303 | 2.72M | const SUINT z2= temp[2*1+i] - temp[2*3+i]; |
304 | 2.72M | const SUINT z3= temp[2*1+i] + temp[2*3+i]; |
305 | | |
306 | 2.72M | block[stride*0+offset]= (int)((z0 + z3)*qmul + 128) >> 8; |
307 | 2.72M | block[stride*1+offset]= (int)((z1 + z2)*qmul + 128) >> 8; |
308 | 2.72M | block[stride*2+offset]= (int)((z1 - z2)*qmul + 128) >> 8; |
309 | 2.72M | block[stride*3+offset]= (int)((z0 - z3)*qmul + 128) >> 8; |
310 | 2.72M | } |
311 | 1.36M | } ff_h264_chroma422_dc_dequant_idct_8_c Line | Count | Source | 286 | 103k | void FUNCC(ff_h264_chroma422_dc_dequant_idct)(int16_t *_block, int qmul){ | 287 | 103k | const int stride= 16*2; | 288 | 103k | const int xStride= 16; | 289 | 103k | int i; | 290 | 103k | unsigned temp[8]; | 291 | 103k | static const uint8_t x_offset[2]={0, 16}; | 292 | 103k | dctcoef *block = (dctcoef*)_block; | 293 | | | 294 | 515k | for(i=0; i<4; i++){ | 295 | 412k | temp[2*i+0] = block[stride*i + xStride*0] + (unsigned)block[stride*i + xStride*1]; | 296 | 412k | temp[2*i+1] = block[stride*i + xStride*0] - (unsigned)block[stride*i + xStride*1]; | 297 | 412k | } | 298 | | | 299 | 309k | for(i=0; i<2; i++){ | 300 | 206k | const int offset= x_offset[i]; | 301 | 206k | const SUINT z0= temp[2*0+i] + temp[2*2+i]; | 302 | 206k | const SUINT z1= temp[2*0+i] - temp[2*2+i]; | 303 | 206k | const SUINT z2= temp[2*1+i] - temp[2*3+i]; | 304 | 206k | const SUINT z3= temp[2*1+i] + temp[2*3+i]; | 305 | | | 306 | 206k | block[stride*0+offset]= (int)((z0 + z3)*qmul + 128) >> 8; | 307 | 206k | block[stride*1+offset]= (int)((z1 + z2)*qmul + 128) >> 8; | 308 | 206k | block[stride*2+offset]= (int)((z1 - z2)*qmul + 128) >> 8; | 309 | 206k | block[stride*3+offset]= (int)((z0 - z3)*qmul + 128) >> 8; | 310 | 206k | } | 311 | 103k | } |
ff_h264_chroma422_dc_dequant_idct_9_c Line | Count | Source | 286 | 240k | void FUNCC(ff_h264_chroma422_dc_dequant_idct)(int16_t *_block, int qmul){ | 287 | 240k | const int stride= 16*2; | 288 | 240k | const int xStride= 16; | 289 | 240k | int i; | 290 | 240k | unsigned temp[8]; | 291 | 240k | static const uint8_t x_offset[2]={0, 16}; | 292 | 240k | dctcoef *block = (dctcoef*)_block; | 293 | | | 294 | 1.20M | for(i=0; i<4; i++){ | 295 | 960k | temp[2*i+0] = block[stride*i + xStride*0] + (unsigned)block[stride*i + xStride*1]; | 296 | 960k | temp[2*i+1] = block[stride*i + xStride*0] - (unsigned)block[stride*i + xStride*1]; | 297 | 960k | } | 298 | | | 299 | 720k | for(i=0; i<2; i++){ | 300 | 480k | const int offset= x_offset[i]; | 301 | 480k | const SUINT z0= temp[2*0+i] + temp[2*2+i]; | 302 | 480k | const SUINT z1= temp[2*0+i] - temp[2*2+i]; | 303 | 480k | const SUINT z2= temp[2*1+i] - temp[2*3+i]; | 304 | 480k | const SUINT z3= temp[2*1+i] + temp[2*3+i]; | 305 | | | 306 | 480k | block[stride*0+offset]= (int)((z0 + z3)*qmul + 128) >> 8; | 307 | 480k | block[stride*1+offset]= (int)((z1 + z2)*qmul + 128) >> 8; | 308 | 480k | block[stride*2+offset]= (int)((z1 - z2)*qmul + 128) >> 8; | 309 | 480k | block[stride*3+offset]= (int)((z0 - z3)*qmul + 128) >> 8; | 310 | 480k | } | 311 | 240k | } |
ff_h264_chroma422_dc_dequant_idct_10_c Line | Count | Source | 286 | 428k | void FUNCC(ff_h264_chroma422_dc_dequant_idct)(int16_t *_block, int qmul){ | 287 | 428k | const int stride= 16*2; | 288 | 428k | const int xStride= 16; | 289 | 428k | int i; | 290 | 428k | unsigned temp[8]; | 291 | 428k | static const uint8_t x_offset[2]={0, 16}; | 292 | 428k | dctcoef *block = (dctcoef*)_block; | 293 | | | 294 | 2.14M | for(i=0; i<4; i++){ | 295 | 1.71M | temp[2*i+0] = block[stride*i + xStride*0] + (unsigned)block[stride*i + xStride*1]; | 296 | 1.71M | temp[2*i+1] = block[stride*i + xStride*0] - (unsigned)block[stride*i + xStride*1]; | 297 | 1.71M | } | 298 | | | 299 | 1.28M | for(i=0; i<2; i++){ | 300 | 857k | const int offset= x_offset[i]; | 301 | 857k | const SUINT z0= temp[2*0+i] + temp[2*2+i]; | 302 | 857k | const SUINT z1= temp[2*0+i] - temp[2*2+i]; | 303 | 857k | const SUINT z2= temp[2*1+i] - temp[2*3+i]; | 304 | 857k | const SUINT z3= temp[2*1+i] + temp[2*3+i]; | 305 | | | 306 | 857k | block[stride*0+offset]= (int)((z0 + z3)*qmul + 128) >> 8; | 307 | 857k | block[stride*1+offset]= (int)((z1 + z2)*qmul + 128) >> 8; | 308 | 857k | block[stride*2+offset]= (int)((z1 - z2)*qmul + 128) >> 8; | 309 | 857k | block[stride*3+offset]= (int)((z0 - z3)*qmul + 128) >> 8; | 310 | 857k | } | 311 | 428k | } |
ff_h264_chroma422_dc_dequant_idct_12_c Line | Count | Source | 286 | 376k | void FUNCC(ff_h264_chroma422_dc_dequant_idct)(int16_t *_block, int qmul){ | 287 | 376k | const int stride= 16*2; | 288 | 376k | const int xStride= 16; | 289 | 376k | int i; | 290 | 376k | unsigned temp[8]; | 291 | 376k | static const uint8_t x_offset[2]={0, 16}; | 292 | 376k | dctcoef *block = (dctcoef*)_block; | 293 | | | 294 | 1.88M | for(i=0; i<4; i++){ | 295 | 1.50M | temp[2*i+0] = block[stride*i + xStride*0] + (unsigned)block[stride*i + xStride*1]; | 296 | 1.50M | temp[2*i+1] = block[stride*i + xStride*0] - (unsigned)block[stride*i + xStride*1]; | 297 | 1.50M | } | 298 | | | 299 | 1.12M | for(i=0; i<2; i++){ | 300 | 752k | const int offset= x_offset[i]; | 301 | 752k | const SUINT z0= temp[2*0+i] + temp[2*2+i]; | 302 | 752k | const SUINT z1= temp[2*0+i] - temp[2*2+i]; | 303 | 752k | const SUINT z2= temp[2*1+i] - temp[2*3+i]; | 304 | 752k | const SUINT z3= temp[2*1+i] + temp[2*3+i]; | 305 | | | 306 | 752k | block[stride*0+offset]= (int)((z0 + z3)*qmul + 128) >> 8; | 307 | 752k | block[stride*1+offset]= (int)((z1 + z2)*qmul + 128) >> 8; | 308 | 752k | block[stride*2+offset]= (int)((z1 - z2)*qmul + 128) >> 8; | 309 | 752k | block[stride*3+offset]= (int)((z0 - z3)*qmul + 128) >> 8; | 310 | 752k | } | 311 | 376k | } |
ff_h264_chroma422_dc_dequant_idct_14_c Line | Count | Source | 286 | 214k | void FUNCC(ff_h264_chroma422_dc_dequant_idct)(int16_t *_block, int qmul){ | 287 | 214k | const int stride= 16*2; | 288 | 214k | const int xStride= 16; | 289 | 214k | int i; | 290 | 214k | unsigned temp[8]; | 291 | 214k | static const uint8_t x_offset[2]={0, 16}; | 292 | 214k | dctcoef *block = (dctcoef*)_block; | 293 | | | 294 | 1.07M | for(i=0; i<4; i++){ | 295 | 858k | temp[2*i+0] = block[stride*i + xStride*0] + (unsigned)block[stride*i + xStride*1]; | 296 | 858k | temp[2*i+1] = block[stride*i + xStride*0] - (unsigned)block[stride*i + xStride*1]; | 297 | 858k | } | 298 | | | 299 | 643k | for(i=0; i<2; i++){ | 300 | 429k | const int offset= x_offset[i]; | 301 | 429k | const SUINT z0= temp[2*0+i] + temp[2*2+i]; | 302 | 429k | const SUINT z1= temp[2*0+i] - temp[2*2+i]; | 303 | 429k | const SUINT z2= temp[2*1+i] - temp[2*3+i]; | 304 | 429k | const SUINT z3= temp[2*1+i] + temp[2*3+i]; | 305 | | | 306 | 429k | block[stride*0+offset]= (int)((z0 + z3)*qmul + 128) >> 8; | 307 | 429k | block[stride*1+offset]= (int)((z1 + z2)*qmul + 128) >> 8; | 308 | 429k | block[stride*2+offset]= (int)((z1 - z2)*qmul + 128) >> 8; | 309 | 429k | block[stride*3+offset]= (int)((z0 - z3)*qmul + 128) >> 8; | 310 | 429k | } | 311 | 214k | } |
|
312 | | |
313 | 3.25M | void FUNCC(ff_h264_chroma_dc_dequant_idct)(int16_t *_block, int qmul){ |
314 | 3.25M | const int stride= 16*2; |
315 | 3.25M | const int xStride= 16; |
316 | 3.25M | SUINT a,b,c,d,e; |
317 | 3.25M | dctcoef *block = (dctcoef*)_block; |
318 | | |
319 | 3.25M | a= block[stride*0 + xStride*0]; |
320 | 3.25M | b= block[stride*0 + xStride*1]; |
321 | 3.25M | c= block[stride*1 + xStride*0]; |
322 | 3.25M | d= block[stride*1 + xStride*1]; |
323 | | |
324 | 3.25M | e= a-b; |
325 | 3.25M | a= a+b; |
326 | 3.25M | b= c-d; |
327 | 3.25M | c= c+d; |
328 | | |
329 | 3.25M | block[stride*0 + xStride*0]= (int)((a+c)*qmul) >> 7; |
330 | 3.25M | block[stride*0 + xStride*1]= (int)((e+b)*qmul) >> 7; |
331 | 3.25M | block[stride*1 + xStride*0]= (int)((a-c)*qmul) >> 7; |
332 | 3.25M | block[stride*1 + xStride*1]= (int)((e-b)*qmul) >> 7; |
333 | 3.25M | } ff_h264_chroma_dc_dequant_idct_8_c Line | Count | Source | 313 | 1.32M | void FUNCC(ff_h264_chroma_dc_dequant_idct)(int16_t *_block, int qmul){ | 314 | 1.32M | const int stride= 16*2; | 315 | 1.32M | const int xStride= 16; | 316 | 1.32M | SUINT a,b,c,d,e; | 317 | 1.32M | dctcoef *block = (dctcoef*)_block; | 318 | | | 319 | 1.32M | a= block[stride*0 + xStride*0]; | 320 | 1.32M | b= block[stride*0 + xStride*1]; | 321 | 1.32M | c= block[stride*1 + xStride*0]; | 322 | 1.32M | d= block[stride*1 + xStride*1]; | 323 | | | 324 | 1.32M | e= a-b; | 325 | 1.32M | a= a+b; | 326 | 1.32M | b= c-d; | 327 | 1.32M | c= c+d; | 328 | | | 329 | 1.32M | block[stride*0 + xStride*0]= (int)((a+c)*qmul) >> 7; | 330 | 1.32M | block[stride*0 + xStride*1]= (int)((e+b)*qmul) >> 7; | 331 | 1.32M | block[stride*1 + xStride*0]= (int)((a-c)*qmul) >> 7; | 332 | 1.32M | block[stride*1 + xStride*1]= (int)((e-b)*qmul) >> 7; | 333 | 1.32M | } |
ff_h264_chroma_dc_dequant_idct_9_c Line | Count | Source | 313 | 225k | void FUNCC(ff_h264_chroma_dc_dequant_idct)(int16_t *_block, int qmul){ | 314 | 225k | const int stride= 16*2; | 315 | 225k | const int xStride= 16; | 316 | 225k | SUINT a,b,c,d,e; | 317 | 225k | dctcoef *block = (dctcoef*)_block; | 318 | | | 319 | 225k | a= block[stride*0 + xStride*0]; | 320 | 225k | b= block[stride*0 + xStride*1]; | 321 | 225k | c= block[stride*1 + xStride*0]; | 322 | 225k | d= block[stride*1 + xStride*1]; | 323 | | | 324 | 225k | e= a-b; | 325 | 225k | a= a+b; | 326 | 225k | b= c-d; | 327 | 225k | c= c+d; | 328 | | | 329 | 225k | block[stride*0 + xStride*0]= (int)((a+c)*qmul) >> 7; | 330 | 225k | block[stride*0 + xStride*1]= (int)((e+b)*qmul) >> 7; | 331 | 225k | block[stride*1 + xStride*0]= (int)((a-c)*qmul) >> 7; | 332 | 225k | block[stride*1 + xStride*1]= (int)((e-b)*qmul) >> 7; | 333 | 225k | } |
ff_h264_chroma_dc_dequant_idct_10_c Line | Count | Source | 313 | 1.12M | void FUNCC(ff_h264_chroma_dc_dequant_idct)(int16_t *_block, int qmul){ | 314 | 1.12M | const int stride= 16*2; | 315 | 1.12M | const int xStride= 16; | 316 | 1.12M | SUINT a,b,c,d,e; | 317 | 1.12M | dctcoef *block = (dctcoef*)_block; | 318 | | | 319 | 1.12M | a= block[stride*0 + xStride*0]; | 320 | 1.12M | b= block[stride*0 + xStride*1]; | 321 | 1.12M | c= block[stride*1 + xStride*0]; | 322 | 1.12M | d= block[stride*1 + xStride*1]; | 323 | | | 324 | 1.12M | e= a-b; | 325 | 1.12M | a= a+b; | 326 | 1.12M | b= c-d; | 327 | 1.12M | c= c+d; | 328 | | | 329 | 1.12M | block[stride*0 + xStride*0]= (int)((a+c)*qmul) >> 7; | 330 | 1.12M | block[stride*0 + xStride*1]= (int)((e+b)*qmul) >> 7; | 331 | 1.12M | block[stride*1 + xStride*0]= (int)((a-c)*qmul) >> 7; | 332 | 1.12M | block[stride*1 + xStride*1]= (int)((e-b)*qmul) >> 7; | 333 | 1.12M | } |
ff_h264_chroma_dc_dequant_idct_12_c Line | Count | Source | 313 | 264k | void FUNCC(ff_h264_chroma_dc_dequant_idct)(int16_t *_block, int qmul){ | 314 | 264k | const int stride= 16*2; | 315 | 264k | const int xStride= 16; | 316 | 264k | SUINT a,b,c,d,e; | 317 | 264k | dctcoef *block = (dctcoef*)_block; | 318 | | | 319 | 264k | a= block[stride*0 + xStride*0]; | 320 | 264k | b= block[stride*0 + xStride*1]; | 321 | 264k | c= block[stride*1 + xStride*0]; | 322 | 264k | d= block[stride*1 + xStride*1]; | 323 | | | 324 | 264k | e= a-b; | 325 | 264k | a= a+b; | 326 | 264k | b= c-d; | 327 | 264k | c= c+d; | 328 | | | 329 | 264k | block[stride*0 + xStride*0]= (int)((a+c)*qmul) >> 7; | 330 | 264k | block[stride*0 + xStride*1]= (int)((e+b)*qmul) >> 7; | 331 | 264k | block[stride*1 + xStride*0]= (int)((a-c)*qmul) >> 7; | 332 | 264k | block[stride*1 + xStride*1]= (int)((e-b)*qmul) >> 7; | 333 | 264k | } |
ff_h264_chroma_dc_dequant_idct_14_c Line | Count | Source | 313 | 307k | void FUNCC(ff_h264_chroma_dc_dequant_idct)(int16_t *_block, int qmul){ | 314 | 307k | const int stride= 16*2; | 315 | 307k | const int xStride= 16; | 316 | 307k | SUINT a,b,c,d,e; | 317 | 307k | dctcoef *block = (dctcoef*)_block; | 318 | | | 319 | 307k | a= block[stride*0 + xStride*0]; | 320 | 307k | b= block[stride*0 + xStride*1]; | 321 | 307k | c= block[stride*1 + xStride*0]; | 322 | 307k | d= block[stride*1 + xStride*1]; | 323 | | | 324 | 307k | e= a-b; | 325 | 307k | a= a+b; | 326 | 307k | b= c-d; | 327 | 307k | c= c+d; | 328 | | | 329 | 307k | block[stride*0 + xStride*0]= (int)((a+c)*qmul) >> 7; | 330 | 307k | block[stride*0 + xStride*1]= (int)((e+b)*qmul) >> 7; | 331 | 307k | block[stride*1 + xStride*0]= (int)((a-c)*qmul) >> 7; | 332 | 307k | block[stride*1 + xStride*1]= (int)((e-b)*qmul) >> 7; | 333 | 307k | } |
|