[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