34 #define IdctAdjustBeforeShift 8 43 #define M(a,b) (((a) * (b))>>16) 49 int A,
B,
C,
D, Ad, Bd, Cd, Dd,
E,
F,
G,
H;
50 int Ed, Gd, Add, Bdd, Fd, Hd;
55 for (i = 0; i < 8; i++) {
57 if ( ip[0 * 8] | ip[1 * 8] | ip[2 * 8] | ip[3 * 8] |
58 ip[4 * 8] | ip[5 * 8] | ip[6 * 8] | ip[7 * 8] ) {
70 E =
M(
xC4S4, (ip[0 * 8] + ip[4 * 8]));
71 F =
M(
xC4S4, (ip[0 * 8] - ip[4 * 8]));
104 for ( i = 0; i < 8; i++) {
106 if ( ip[1] | ip[2] | ip[3] |
107 ip[4] | ip[5] | ip[6] | ip[7] ) {
120 E =
M(
xC4S4, (ip[0] + ip[4])) + 8;
121 F =
M(
xC4S4, (ip[0] - ip[4])) + 8;
142 dst[0*
stride] = av_clip_uint8((Gd + Cd ) >> 4);
143 dst[7*
stride] = av_clip_uint8((Gd - Cd ) >> 4);
145 dst[1*
stride] = av_clip_uint8((Add + Hd ) >> 4);
146 dst[2*
stride] = av_clip_uint8((Add - Hd ) >> 4);
148 dst[3*
stride] = av_clip_uint8((Ed + Dd ) >> 4);
149 dst[4*
stride] = av_clip_uint8((Ed - Dd ) >> 4);
151 dst[5*
stride] = av_clip_uint8((Fd + Bdd ) >> 4);
152 dst[6*
stride] = av_clip_uint8((Fd - Bdd ) >> 4);
154 dst[0*
stride] = av_clip_uint8(dst[0*stride] + ((Gd + Cd ) >> 4));
155 dst[7*
stride] = av_clip_uint8(dst[7*stride] + ((Gd - Cd ) >> 4));
157 dst[1*
stride] = av_clip_uint8(dst[1*stride] + ((Add + Hd ) >> 4));
158 dst[2*
stride] = av_clip_uint8(dst[2*stride] + ((Add - Hd ) >> 4));
160 dst[3*
stride] = av_clip_uint8(dst[3*stride] + ((Ed + Dd ) >> 4));
161 dst[4*
stride] = av_clip_uint8(dst[4*stride] + ((Ed - Dd ) >> 4));
163 dst[5*
stride] = av_clip_uint8(dst[5*stride] + ((Fd + Bdd ) >> 4));
164 dst[6*
stride] = av_clip_uint8(dst[6*stride] + ((Fd - Bdd ) >> 4));
179 int v= ((
xC4S4 * ip[0] + (IdctAdjustBeforeShift<<16))>>20);
180 dst[0*
stride] = av_clip_uint8(dst[0*stride] + v);
181 dst[1*
stride] = av_clip_uint8(dst[1*stride] + v);
182 dst[2*
stride] = av_clip_uint8(dst[2*stride] + v);
183 dst[3*
stride] = av_clip_uint8(dst[3*stride] + v);
184 dst[4*
stride] = av_clip_uint8(dst[4*stride] + v);
185 dst[5*
stride] = av_clip_uint8(dst[5*stride] + v);
186 dst[6*
stride] = av_clip_uint8(dst[6*stride] + v);
187 dst[7*
stride] = av_clip_uint8(dst[7*stride] + v);
200 idct(dest, line_size, block, 1);
201 memset(block, 0,
sizeof(*block) * 64);
207 idct(dest, line_size, block, 2);
208 memset(block, 0,
sizeof(*block) * 64);
214 int i,
dc = (block[0] + 15) >> 5;
216 for(i = 0; i < 8; i++){
217 dest[0] = av_clip_uint8(dest[0] + dc);
218 dest[1] = av_clip_uint8(dest[1] + dc);
219 dest[2] = av_clip_uint8(dest[2] + dc);
220 dest[3] = av_clip_uint8(dest[3] + dc);
221 dest[4] = av_clip_uint8(dest[4] + dc);
222 dest[5] = av_clip_uint8(dest[5] + dc);
223 dest[6] = av_clip_uint8(dest[6] + dc);
224 dest[7] = av_clip_uint8(dest[7] + dc);
231 int *bounding_values)
235 const int nstride= -
stride;
237 for (end= first_pixel + 8; first_pixel <
end; first_pixel++) {
239 (first_pixel[2 * nstride] - first_pixel[
stride])
240 +3*(first_pixel[0 ] - first_pixel[nstride]);
241 filter_value = bounding_values[(filter_value + 4) >> 3];
242 first_pixel[nstride] = av_clip_uint8(first_pixel[nstride] + filter_value);
243 first_pixel[0] = av_clip_uint8(first_pixel[0] - filter_value);
248 int *bounding_values)
253 for (end= first_pixel + 8*stride; first_pixel !=
end; first_pixel +=
stride) {
255 (first_pixel[-2] - first_pixel[ 1])
256 +3*(first_pixel[ 0] - first_pixel[-1]);
257 filter_value = bounding_values[(filter_value + 4) >> 3];
258 first_pixel[-1] = av_clip_uint8(first_pixel[-1] + filter_value);
259 first_pixel[ 0] = av_clip_uint8(first_pixel[ 0] - filter_value);
268 for (i = 0; i < h; i++) {
271 a =
AV_RN32(&src1[i * stride]);
272 b =
AV_RN32(&src2[i * stride]);
274 a =
AV_RN32(&src1[i * stride + 4]);
275 b =
AV_RN32(&src2[i * stride + 4]);
void(* put_no_rnd_pixels_l2)(uint8_t *dst, const uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h)
Copy 8xH pixels from source to destination buffer using a bilinear filter with no rounding (i...
static void vp3_idct_put_c(uint8_t *dest, int line_size, int16_t *block)
static void put_no_rnd_pixels_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h)
Macro definitions for various function/variable attributes.
void(* idct_add)(uint8_t *dest, int line_size, int16_t *block)
av_cold void ff_vp3dsp_init_bfin(VP3DSPContext *c, int flags)
static void vp3_v_loop_filter_c(uint8_t *first_pixel, int stride, int *bounding_values)
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame This method is called when a frame is wanted on an output For an input
void(* idct_put)(uint8_t *dest, int line_size, int16_t *block)
static uint32_t no_rnd_avg32(uint32_t a, uint32_t b)
static av_always_inline void idct(uint8_t *dst, int stride, int16_t *input, int type)
static int filter_value(int in, int rrp[8], int v[9])
static void vp3_idct_dc_add_c(uint8_t *dest, int line_size, int16_t *block)
av_cold void ff_vp3dsp_init_arm(VP3DSPContext *c, int flags)
void(* h_loop_filter)(uint8_t *src, int stride, int *bounding_values)
FIXME Range Coding of cr are mx and my are Motion Vector top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff)*mv_scale Intra DC Predicton block[y][x] dc[1]
synthesis window for stochastic i
static void vp3_h_loop_filter_c(uint8_t *first_pixel, int stride, int *bounding_values)
static void vp3_idct_add_c(uint8_t *dest, int line_size, int16_t *block)
void ff_vp3dsp_init_x86(VP3DSPContext *c, int flags)
common internal and external API header
av_cold void ff_vp3dsp_init_ppc(VP3DSPContext *c, int flags)
else dst[i][x+y *dst_stride[i]]
void(* v_loop_filter)(uint8_t *src, int stride, int *bounding_values)
void(* idct_dc_add)(uint8_t *dest, int line_size, int16_t *block)
#define IdctAdjustBeforeShift
av_cold void ff_vp3dsp_init(VP3DSPContext *c, int flags)