2 * Copyright (c) 2007-2008 Ian Caulfield
5 * This file is part of FFmpeg.
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.
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.
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
24 static void ff_mlp_filter_channel(int32_t *firbuf
, const int32_t *fircoeff
, int firorder
,
25 int32_t *iirbuf
, const int32_t *iircoeff
, int iirorder
,
26 unsigned int filter_shift
, int32_t mask
, int blocksize
,
27 int32_t *sample_buffer
)
31 for (i
= 0; i
< blocksize
; i
++) {
32 int32_t residual
= *sample_buffer
;
37 for (order
= 0; order
< firorder
; order
++)
38 accum
+= (int64_t) firbuf
[order
] * fircoeff
[order
];
39 for (order
= 0; order
< iirorder
; order
++)
40 accum
+= (int64_t) iirbuf
[order
] * iircoeff
[order
];
42 accum
= accum
>> filter_shift
;
43 result
= (accum
+ residual
) & mask
;
46 *--iirbuf
= result
- accum
;
48 *sample_buffer
= result
;
53 void ff_mlp_init(DSPContext
* c
, AVCodecContext
*avctx
)
55 c
->mlp_filter_channel
= ff_mlp_filter_channel
;