[FFmpeg-devel] [PATCH] Common ACELP routines (2/3) - filters

Vladimir Voroshilov voroshil
Sat Apr 26 22:12:39 CEST 2008


On Sun, Apr 27, 2008 at 1:14 AM, Michael Niedermayer <michaelni at gmx.at> wrote:
>
> On Sun, Apr 27, 2008 at 01:05:32AM +0700, Vladimir Voroshilov wrote:
>  > On Sun, Apr 27, 2008 at 12:41 AM, Michael Niedermayer <michaelni at gmx.at> wrote:
>  > > On Sat, Apr 26, 2008 at 11:11:56PM +0700, Vladimir Voroshilov wrote:
>  > >
>  > > > On Fri, Apr 25, 2008 at 6:16 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
>  > >  >
>  > >  > [...]
>  > >  >
>  > >  > >  Yes thats also what i thought at first but vladimirs insistance made
>  > >  > >  me belive that the output of this function would be the final audio
>  > >  > >  samples returned from "decode_audio". In which cases one of course
>  > >  > >  cannot have 10 samples before it.
>  > >  > >  Now after looking at the actual code its clear that there are always
>  > >  > >  some other filters applied afterwards. So i agree, none of this makes
>  > >  > >  sense, no double writing, no special case for the first "10" samples
>  > >  > >  nor a memcpy() should be needed. Except a memcpy to move the first
>  > >  > >  "10" samples to the buffer start.
>  > >  >
>  > >  > To tell the truth i didn't understand should i fix patch somehow or
>  > >  > not according to above.
>  > >
>  > >  ff_acelp_lp_synthesis_filter_inplace() is exactly what we need,
>  > >  ff_acelp_lp_synthesis_filter() is unneeded, please remove it.
>  > >
>  > >
>  > >
>  > >  >
>  > >  > After splitting ff_acelp_lp_synthesis_filter, one of routines still
>  > >  > requires additional 10 items in filter data. It is possible to avoid
>  > >  > such requirement in cost of additional 20 bytes long memcpy.
>  > >  > But i don't know will this improve something or not.
>  > >
>  > >  Only a single memcpy() of 10 elements is needed.
>  > >
>  > >  memcpy(buf, buf+N, 10);
>  > >  overflow= acelp_lp_synthesis_filter(buf+10, input, N);
>  > >  if(overflow){
>  > >     for(i=0; i<N; i++)
>  > >         input[i]>>=123;
>  > >     acelp_lp_synthesis_filter(buf+10, input, N);
>  > >  }
>  >
>  > buf is subframe_size+10 long as i see.
>  > And this will require copy from buf to output_data
>  > (explicit via memcpy or implicit, e.g. high-pass filter should put
>  > data directly to output_data instead of it's input buffer)
>  > Second is preferred, right?

Fixed in attached patch.
I've removed second lp_synthesis routine (with additional memcpy).
Now lp synthesis filter is used as in your sample (but memcpy is made
right after call to routines, because saved data should not be
affected by postfilter).

I've also added additional parameter (instead of hardcoded "11") -
filter_length.
Now code can be potentially used for non-10th order filters too.
I think this will make things a bit more clear to undestand.

-- 
Regards,
Vladimir Voroshilov     mailto:voroshil at gmail.com
JID: voroshil at gmail.com, voroshil at jabber.ru
ICQ: 95587719
-------------- next part --------------
A non-text attachment was scrubbed...
Name: acelp_filt_34.diff
Type: text/x-diff
Size: 12204 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080427/6afa0381/attachment.diff>



More information about the ffmpeg-devel mailing list