Hello,
Just wanted to see the movie today....
The gcc become so good that it actually forces one to write the standards
compliant code ;). And, according to the C++ standard (at last to the old
ones I'learned a while ago) "inline" methods must be defined in the
_header_ file, not in the .cpp file. This is how the modules which
"include" the header would see it.
The patch does just that, it moves few offending inline methods from
./plugins/libmpeg_audiodec/filter.cpp
./plugins/libmpeg_audiodec/filter.cpp
into
./plugins/libmpeg_audiodec/mpegsound.h
where they belong.
If You do not have the sources installed do
--------
> cd /Your temp dir
> cvs -d:pserver:[EMAIL PROTECTED]:/cvsroot/avifile login
> cvs -z3 -d:pserver:[EMAIL PROTECTED]:/cvsroot/avifile co
>avifile-0.6
> cd avifile-0.6
> patch where/You/put/the/patch/sound_under_gcc_2.96.diff
> ./autogen.sh
> ./configure
> make
> su -
> make install
--------
otherwise You probaby know what to do.
This worked for me. I've also noticed that adding "-O3 -m686" options to
gcc significantly improves performance on my P-II.
Have a nice day !
With the best regards, Konstantin.
? sound_under_gcc_2.96.diff
Index: plugins/libmpeg_audiodec/filter.cpp
===================================================================
RCS file: /cvsroot/avifile/avifile-0.6/plugins/libmpeg_audiodec/filter.cpp,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 filter.cpp
159,317d158
< #define SAVE \
< raw=(int)(r*scalefactor); \
< if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
< putraw(raw);
< #define OS r=*vp * *dp++
< #define XX vp+=15;r+=*vp * *dp++
< #define OP r+=*--vp * *dp++
<
< inline void Mpegtoraw::generatesingle(void)
< {
< int i;
< register REAL r, *vp;
< register const REAL *dp;
< int raw;
<
< i=32;
< dp=filter;
< vp=calcbufferL[currentcalcbuffer]+calcbufferoffset;
< // actual_v+actual_write_pos;
<
< switch (calcbufferoffset)
< {
< case 0:for(;i;i--,vp+=15){
< OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 1:for(;i;i--,vp+=15){
< OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 2:for(;i;i--,vp+=15){
< OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 3:for(;i;i--,vp+=15){
< OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 4:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 5:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 6:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 7:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 8:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 9:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 10:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
< SAVE;}break;
< case 11:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
< SAVE;}break;
< case 12:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
< SAVE;}break;
< case 13:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
< SAVE;}break;
< case 14:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
< SAVE;}break;
< case 15:for(;i;i--,vp+=31){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< }
< }
<
< #undef OS
< #undef XX
< #undef OP
< #undef SAVE
<
< #define SAVE \
< raw=(int)(r1*scalefactor); \
< if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
< putraw(raw); \
< raw=(int)(r2*scalefactor); \
< if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
< putraw(raw);
< #define OS r1=*vp1 * *dp; \
< r2=*vp2 * *dp++
< #define XX vp1+=15;r1+=*vp1 * *dp; \
< vp2+=15;r2+=*vp2 * *dp++
< #define OP r1+=*--vp1 * *dp; \
< r2+=*--vp2 * *dp++
<
<
< inline void Mpegtoraw::generate(void)
< {
< int i;
< REAL r1,r2;
< register REAL *vp1,*vp2;
< register const REAL *dp;
< int raw;
<
< dp=filter;
< vp1=calcbufferL[currentcalcbuffer]+calcbufferoffset;
< vp2=calcbufferR[currentcalcbuffer]+calcbufferoffset;
< // actual_v+actual_write_pos;
<
< i=32;
< switch (calcbufferoffset)
< {
< case 0:for(;i;i--,vp1+=15,vp2+=15){
< OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 1:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 2:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 3:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 4:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 5:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 6:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 7:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 8:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 9:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 10:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
< SAVE;}break;
< case 11:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
< SAVE;}break;
< case 12:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
< SAVE;}break;
< case 13:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
< SAVE;}break;
< case 14:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
< SAVE;}break;
< case 15:for(;i;i--,vp1+=31,vp2+=31){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< }
< }
Index: plugins/libmpeg_audiodec/filter_2.cpp
===================================================================
RCS file: /cvsroot/avifile/avifile-0.6/plugins/libmpeg_audiodec/filter_2.cpp,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 filter_2.cpp
178,341d177
<
< #define SAVE \
< raw=(int)(r*scalefactor); \
< if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
< putraw(raw); \
< dp+=16;vp+=15+(15-14)
< #define OS r=*vp * *dp++
< #define XX vp+=15;r+=*vp * *dp++
< #define OP r+=*--vp * *dp++
<
< inline void Mpegtoraw::generatesingle_2(void)
< {
< int i;
< register REAL r, *vp;
< register const REAL *dp;
< int raw;
<
< i=32/2;
< dp=filter;
< vp=calcbufferL[currentcalcbuffer]+calcbufferoffset;
< // actual_v+actual_write_pos;
<
< switch (calcbufferoffset)
< {
< case 0:for(;i;i--,vp+=15){
< OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 1:for(;i;i--,vp+=15){
< OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 2:for(;i;i--,vp+=15){
< OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 3:for(;i;i--,vp+=15){
< OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 4:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 5:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 6:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 7:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 8:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 9:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 10:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
< SAVE;}break;
< case 11:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
< SAVE;}break;
< case 12:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
< SAVE;}break;
< case 13:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
< SAVE;}break;
< case 14:for(;i;i--,vp+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
< SAVE;}break;
< case 15:for(;i;i--,vp+=31){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< }
< }
<
< #undef OS
< #undef XX
< #undef OP
< #undef SAVE
<
< #define SAVE \
< raw=(int)(r1*scalefactor); \
< if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
< putraw(raw); \
< raw=(int)(r2*scalefactor); \
< if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
< putraw(raw); \
< dp+=16;vp1+=15+(15-14);vp2+=15+(15-14)
< #define OS r1=*vp1 * *dp; \
< r2=*vp2 * *dp++
< #define XX vp1+=15;r1+=*vp1 * *dp; \
< vp2+=15;r2+=*vp2 * *dp++
< #define OP r1+=*--vp1 * *dp; \
< r2+=*--vp2 * *dp++
<
<
< inline void Mpegtoraw::generate_2(void)
< {
< int i;
< REAL r1,r2;
< register REAL *vp1,*vp2;
< register const REAL *dp;
< int raw;
<
< dp=filter;
< vp1=calcbufferL[currentcalcbuffer]+calcbufferoffset;
< vp2=calcbufferR[currentcalcbuffer]+calcbufferoffset;
< // actual_v+actual_write_pos;
<
< i=32/2;
< switch (calcbufferoffset)
< {
< case 0:for(;i;i--,vp1+=15,vp2+=15){
< OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 1:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 2:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 3:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 4:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 5:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 6:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 7:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 8:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 9:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
< SAVE;}break;
< case 10:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
< SAVE;}break;
< case 11:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
< SAVE;}break;
< case 12:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
< SAVE;}break;
< case 13:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
< SAVE;}break;
< case 14:for(;i;i--,vp1+=15,vp2+=15){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
< SAVE;}break;
< case 15:for(;i;i--,vp1+=31,vp2+=31){
< OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
< SAVE;}break;
< }
< }
<
<
Index: plugins/libmpeg_audiodec/mpegsound.h
===================================================================
RCS file: /cvsroot/avifile/avifile-0.6/plugins/libmpeg_audiodec/mpegsound.h,v
retrieving revision 1.10
diff -r1.10 mpegsound.h
466a467,793
> #define SAVE \
> raw=(int)(r*scalefactor); \
> if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
> putraw(raw); \
> dp+=16;vp+=15+(15-14)
> #define OS r=*vp * *dp++
> #define XX vp+=15;r+=*vp * *dp++
> #define OP r+=*--vp * *dp++
>
> inline void Mpegtoraw::generatesingle_2(void)
> {
> int i;
> register REAL r, *vp;
> register const REAL *dp;
> int raw;
>
> i=32/2;
> dp=filter;
> vp=calcbufferL[currentcalcbuffer]+calcbufferoffset;
> // actual_v+actual_write_pos;
>
> switch (calcbufferoffset)
> {
> case 0:for(;i;i--,vp+=15){
> OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 1:for(;i;i--,vp+=15){
> OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 2:for(;i;i--,vp+=15){
> OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 3:for(;i;i--,vp+=15){
> OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 4:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 5:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 6:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 7:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 8:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 9:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 10:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
> SAVE;}break;
> case 11:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
> SAVE;}break;
> case 12:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
> SAVE;}break;
> case 13:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
> SAVE;}break;
> case 14:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
> SAVE;}break;
> case 15:for(;i;i--,vp+=31){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> }
> }
>
> #undef OS
> #undef XX
> #undef OP
> #undef SAVE
>
>
> #define SAVE \
> raw=(int)(r1*scalefactor); \
> if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
> putraw(raw); \
> raw=(int)(r2*scalefactor); \
> if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
> putraw(raw); \
> dp+=16;vp1+=15+(15-14);vp2+=15+(15-14)
> #define OS r1=*vp1 * *dp; \
> r2=*vp2 * *dp++
> #define XX vp1+=15;r1+=*vp1 * *dp; \
> vp2+=15;r2+=*vp2 * *dp++
> #define OP r1+=*--vp1 * *dp; \
> r2+=*--vp2 * *dp++
>
>
> inline void Mpegtoraw::generate_2(void)
> {
> int i;
> REAL r1,r2;
> register REAL *vp1,*vp2;
> register const REAL *dp;
> int raw;
>
> dp=filter;
> vp1=calcbufferL[currentcalcbuffer]+calcbufferoffset;
> vp2=calcbufferR[currentcalcbuffer]+calcbufferoffset;
> // actual_v+actual_write_pos;
>
> i=32/2;
> switch (calcbufferoffset)
> {
> case 0:for(;i;i--,vp1+=15,vp2+=15){
> OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 1:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 2:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 3:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 4:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 5:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 6:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 7:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 8:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 9:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 10:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
> SAVE;}break;
> case 11:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
> SAVE;}break;
> case 12:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
> SAVE;}break;
> case 13:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
> SAVE;}break;
> case 14:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
> SAVE;}break;
> case 15:for(;i;i--,vp1+=31,vp2+=31){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> }
> }
>
> #undef OS
> #undef XX
> #undef OP
> #undef SAVE
>
> #define SAVE \
> raw=(int)(r*scalefactor); \
> if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
> putraw(raw);
> #define OS r=*vp * *dp++
> #define XX vp+=15;r+=*vp * *dp++
> #define OP r+=*--vp * *dp++
>
> inline void Mpegtoraw::generatesingle(void)
> {
> int i;
> register REAL r, *vp;
> register const REAL *dp;
> int raw;
>
> i=32;
> dp=filter;
> vp=calcbufferL[currentcalcbuffer]+calcbufferoffset;
> // actual_v+actual_write_pos;
>
> switch (calcbufferoffset)
> {
> case 0:for(;i;i--,vp+=15){
> OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 1:for(;i;i--,vp+=15){
> OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 2:for(;i;i--,vp+=15){
> OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 3:for(;i;i--,vp+=15){
> OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 4:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 5:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 6:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 7:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 8:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 9:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 10:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
> SAVE;}break;
> case 11:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
> SAVE;}break;
> case 12:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
> SAVE;}break;
> case 13:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
> SAVE;}break;
> case 14:for(;i;i--,vp+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
> SAVE;}break;
> case 15:for(;i;i--,vp+=31){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> }
> }
>
> #undef OS
> #undef XX
> #undef OP
> #undef SAVE
>
> #define SAVE \
> raw=(int)(r1*scalefactor); \
> if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
> putraw(raw); \
> raw=(int)(r2*scalefactor); \
> if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \
> putraw(raw);
> #define OS r1=*vp1 * *dp; \
> r2=*vp2 * *dp++
> #define XX vp1+=15;r1+=*vp1 * *dp; \
> vp2+=15;r2+=*vp2 * *dp++
> #define OP r1+=*--vp1 * *dp; \
> r2+=*--vp2 * *dp++
>
>
> inline void Mpegtoraw::generate(void)
> {
> int i;
> REAL r1,r2;
> register REAL *vp1,*vp2;
> register const REAL *dp;
> int raw;
>
> dp=filter;
> vp1=calcbufferL[currentcalcbuffer]+calcbufferoffset;
> vp2=calcbufferR[currentcalcbuffer]+calcbufferoffset;
> // actual_v+actual_write_pos;
>
> i=32;
> switch (calcbufferoffset)
> {
> case 0:for(;i;i--,vp1+=15,vp2+=15){
> OS;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 1:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 2:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 3:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 4:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 5:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 6:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 7:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 8:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 9:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;OP;
> SAVE;}break;
> case 10:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;OP;
> SAVE;}break;
> case 11:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;OP;
> SAVE;}break;
> case 12:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;OP;
> SAVE;}break;
> case 13:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;OP;
> SAVE;}break;
> case 14:for(;i;i--,vp1+=15,vp2+=15){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;XX;
> SAVE;}break;
> case 15:for(;i;i--,vp1+=31,vp2+=31){
> OS;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;OP;
> SAVE;}break;
> }
> }