[FFmpeg-devel] [PATCH] adpcm: Collapse nodes with similar state only after checking ssd

Martin Storsjö martin
Fri Nov 19 18:39:27 CET 2010


On Wed, 17 Nov 2010, Martin Storsj? wrote:

> On Wed, 17 Nov 2010, Michael Niedermayer wrote:
> 
> > On Mon, Nov 15, 2010 at 03:47:20PM +0200, Martin Storsj? wrote:
> > > 
> > > +                    /* Collapse any two states with the same previous sample value. \
> > > +                     * One could also distinguish states by step and by 2nd to last \
> > > +                     * sample, but the effects of that are negligible. \
> > > +                     * Since nodes in the previous generation are iterated \
> > > +                     * through a heap, they're roughly ordered from better to \
> > > +                     * worse, but not strictly ordered. Therefore, an earlier \
> > > +                     * node with the same sample value is better in most cases \
> > > +                     * (and thus the current is skipped), but not strictly \
> > > +                     * in all cases. */ \
> > > +                    for (k = 0; k < heap_size; k++)\
> > > +                        if (dec_sample == nodes_next[k]->sample1)\
> > > +                            goto next_##NAME;\
> > 
> > should this not check ssd too, so that better ones are kept?
> 
> I tested this, and in practice, it actually gave worse results. I guess 
> this means it's better to keep a node with a slightly worse ssd than to 
> store two nodes with a similar sample value (giving less space for other 
> nodes that would give better diversity). A better solution would be to 
> replace that particular node instead - I'll test that, too.
> 
> > also a hashtable could be used to speed this up in theory
> > like:
> > h=&hash[dec_sample];
> > if(h->generation == generation && h->ssd < ssd){
> >     goto next_##NAME;
> > }
> > h->generation= generation;
> > h->ssd= ssd
> 
> Hmm, yes, that might be a good idea. I'll see if it works as well in 
> practice.

It turned out to be a very good idea. This patchset is therefore 
irrelevant now.

// Martin



More information about the ffmpeg-devel mailing list