[FFmpeg-cvslog] r18637 - trunk/libavcodec/rv34.c

Kostya kostya.shishkov
Tue Apr 21 19:28:39 CEST 2009


On Tue, Apr 21, 2009 at 05:15:40PM +0100, M?ns Rullg?rd wrote:
> kostya <subversion at mplayerhq.hu> writes:
> 
> > Author: kostya
> > Date: Tue Apr 21 06:42:27 2009
> > New Revision: 18637
> >
> > Log:
> > Make RV3/4 VLC tables use new static initialization method
> >
> > Modified:
> >    trunk/libavcodec/rv34.c
> >
> > [...]
> >
> > +static const VLC_TYPE table_data[117592][2];
> 
> That is a HUGE array.  Is this really good for the cache?
> Furthermore, it's const, and ...
> 
> > @@ -92,10 +117,12 @@ static void rv34_gen_vlc(const uint8_t *
> >      for(i = 0; i < realsize; i++)
> >          cw[i] = codes[bits2[i]]++;
> >
> > +    vlc->table = &table_data[table_offs[num]];
> 
> ... here pointers into it are assigned to non-const pointers, ...
> 
> > +    vlc->table_allocated = table_offs[num + 1] - table_offs[num];
> >      init_vlc_sparse(vlc, FFMIN(maxbits, 9), realsize,
> >                      bits2, 1, 1,
> >                      cw,    2, 2,
> > -                    syms,  2, 2, INIT_VLC_USE_STATIC);
> > +                    syms,  2, 2, INIT_VLC_USE_NEW_STATIC);
> 
> ... and written to here.
> 
> GCC, for some reason, allocates this array in the .bss section.  Other
> compilers (armcc and icc) make it read-only, as they should, resulting
> in a crash at runtime.

Oops. Will drop const modifier.
 
> -- 
> M?ns Rullg?rd
> mans at mansr.com



More information about the ffmpeg-cvslog mailing list