private int decode_MCU(InputStream in, int PrevDC[],
                         int temp[], int index[]) throws IOException
{
        int value,actab[],dctab[];
        int qtab[],Cs;
    
        for(Cs=0; Cs<nComp; Cs++){
          qtab=qTab[Cs]; actab=acTab[Cs]; dctab=dcTab[Cs];
        for(int i=0 ; i<nBlock[Cs]; i++){
                for(int k=0; k<IDCT_Source.length; k++) 
                     IDCT_Source[k]=0;
        value = HuffmanValue(dctab,temp,index,in);
                if(value>=0xFF00)
                    return value;
            PrevDC[Cs] = IDCT_Source[0] = PrevDC[Cs] + getn(in,value,temp,index);
        IDCT_Source[0] *= qtab[0];
        for(int j=1 ; j<64 ; j++){
                value = HuffmanValue(actab,temp,index,in);
                    if(value>=0xFF00)
                         return value;
                    j += (value>>4) ;
            if( (value&0x0F) == 0){
                if( (value>>4) == 0) break ;
            }else {
            IDCT_Source[IDCT_P[j]] = 
                                  getn(in,value&0x0F,temp,index)*qtab[j];
                }
        }
        ScaleIDCT(DU[Cs][i]) ;
        }
       }
       return 0;
   }