Re[5]: Загрузка процессора 100%
От: 245_Monah  
Дата: 13.03.07 11:05
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Ты жу не обижайся, но код форамтировать надо чтобы хоть кто-то удосужился прочитать. Так уж и быть подправлю твой пост.


B>А профайлер пробовал? Ты легко найдешь кто дает бОльшую нагрузку? inputAudioStream.read(buffer);

B>Может имеет смысл поигратся с размером буфера? Если к примеру inputAudioStream.read(buffer); вычитывает не очень много данных, то цикл выполняется очень часто. Если найти способ увеличть время выполнение цикла, пока буфер определенного размера не будет заполнен, то и цикл не будет выполнять а поток будет просто ждать пока прийдет достаточно данных. inputAudioStream хотя бы обернут в BufferedInputStream?

Неа, необернут, попробую этот вариант, просто уже крышу рвет от этого Кодера, просто я не думаю что следующий кусок кода "g729.encode(buffer, 0, buffer1, 0)" выполняется шустро, привожу пример пример одного из его методов "Квантование линейного спектра или Quantazing LSP":

            /****************************Qua_LSP*************************************/
            i=0;
            ind = 0;
            offset = 0;
            freq = 0;
            
            L_temp = 0;
            Temp1 = 0;
            Temp2 = 0;
            
            ind = 63;
            
            for(i=LD8A.M-1; i>=0; i--){
                while(basic_op.sub(tab_ld8a.table2[ind], lsp_new[i]) < 0){
                    ind = basic_op.sub(ind, 1);
                    if(ind <= 0){
                        break;
                    }
                }
                offset = basic_op.sub(lsp_new[i], tab_ld8a.table2[ind]);
                L_temp = basic_op.L_mult(tab_ld8a.slope_acos[ind], offset);
                Temp1 = basic_op.shl(ind, 9);
                Temp2 = basic_op.L_shr(L_temp, 12);
                freq = basic_op.add((int)Temp1,(int)Temp2);
                lsf[i] = basic_op.mult(freq, 25736);
            }
            /**********************Lsp_qua_cs****************************************/
            i_cs = 0;
            sft_cs = 0;
            mode_cs = 0;
            j_cs = 0;
            index_cs = 0;
            mode_index_cs = 0;
            cand_cur_cs = 0;
            
            L_accb_cs = 0;
            L_acc_cs = 0;
            Temp1_cs = 0;
            Temp2_cs = 0;
            Temp3_cs = 0;
            L_dmin_cs = 0;
            /***************************Get_weigt***********************************/
            buf_cs[0] = (int)(lsf[1] - (LD8A.PI04+8192));
            
            for(i_cs=1; i_cs < LD8A.M-1; i_cs++){
                Temp1_cs = (int)(lsf[i_cs+1] - lsf[i_cs-1]);
                
                buf_cs[i_cs] = (int)(Temp1_cs - 8192);
            }
            buf_cs[LD8A.M-1] = (int)((LD8A.PI92-8192) - lsf[LD8A.M-2]);
            
            for(i_cs=0; i_cs<LD8A.M; i_cs++){
                if(buf_cs[i_cs]>0){
                    wegt_cs[i_cs] = 2048;
                } else{
                    L_acc_cs = basic_op.L_mult(buf_cs[i_cs], buf_cs[i_cs]);
                    Temp1_cs = basic_op.L_shl(L_acc_cs, 2);
                    Temp1_cs = basic_op.extract_h(Temp1_cs);
                    L_acc_cs = basic_op.L_mult((int)Temp1_cs, LD8A.CONST10);
                    Temp1_cs = basic_op.L_shl(L_acc_cs, 2);
                    Temp1_cs = basic_op.extract_h(Temp1_cs);
                    wegt_cs[i_cs] = basic_op.add((int)Temp1_cs, 2048);
                }
            }
            L_acc_cs = basic_op.L_mult(wegt_cs[4], LD8A.CONST12);
            Temp1_cs = basic_op.L_shl(L_acc_cs, 1);
            wegt_cs[4] = basic_op.extract_h(Temp1_cs);
            L_acc_cs = basic_op.L_mult(wegt_cs[5], LD8A.CONST12);
            Temp1_cs = basic_op.L_shl(L_acc_cs, 1);
            wegt_cs[5] = basic_op.extract_h(Temp1_cs);
            Temp1_cs = 0;
            for(i_cs=0; i_cs<LD8A.M; i_cs++){
                Temp1_cs = (int)(wegt_cs[i_cs] - (int)Temp1_cs);
                
                if(Temp1_cs>0){
                    Temp1_cs = wegt_cs[i_cs];
                }
            }
            sft_cs = basic_op.norm_s((int)Temp1_cs);
            for(i_cs=0; i_cs<LD8A.M; i_cs++){
                wegt_cs[i_cs] = basic_op.shl(wegt_cs[i_cs], sft_cs);
            }
            /*********************************************************************/
            /***********************Relspwed***********************************/
            for(mode_cs=0; mode_cs < LD8A.MODE; mode_cs++){
                for(j_cs=0; j_cs<LD8A.M; j_cs++){
                    Temp2_cs = (int)(16<<lsf[j_cs]);
                    for(i_cs=0; i_cs<LD8A.MA_NP; i_cs++){
                        Temp1_cs = Freq_prev[i_cs][j_cs] * tab_ld8a.fg[mode_cs][i_cs][j_cs];
                        if (Temp1_cs != 0x40000000) {
                            Temp1_cs *= 2;
                        } else {
                            Temp1_cs = basic_op.MAX_64;
                        }
                        Temp2_cs-= Temp1_cs;
                        
                        if (((Temp2_cs ^ Temp1_cs) & basic_op.MIN_64) != 0) {
                            if (((Temp2_cs ^ Temp2_cs) & basic_op.MIN_64)>0) {
                                Temp2_cs = (Temp2_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                            }
                        }
                    }
                    Temp1_cs = (int)(Temp2_cs>>16);
                    Temp2_cs = (int)Temp1_cs*tab_ld8a.fg_sum_inv[mode_cs][j_cs];
                    if (Temp2_cs != 0x40000000) {
                        Temp2_cs *= 2;
                    } else {
                        Temp2_cs = basic_op.MAX_64;
                    }
                    rbuf_cs[j_cs] = (int)(L_shl1(Temp2_cs, 3)>>16);
                }
                
                cand_cur_cs = 0;
                L_dmin_cs = basic_op.MAX_64;
                for(i_cs=0;i_cs<LD8A.NC0;i_cs++){
                    Temp1_cs = 0;
                    for(j_cs=0;j_cs<LD8A.M;j_cs++){
                        Temp2_cs = (int)(rbuf_cs[j_cs] - tab_ld8a.lspcb1[i_cs][j_cs]);
                        
                        Temp3_cs = Temp2_cs * Temp2_cs;
                        if (Temp3_cs != 0x40000000) {
                            Temp3_cs *= 2;
                        } else {
                            Temp3_cs = basic_op.MAX_64;
                        }
                        Temp1_cs+=Temp3_cs;
                        
                        if (((Temp1_cs ^ Temp3_cs) & basic_op.MIN_64) == 0) {
                            if (((Temp1_cs ^ Temp1_cs) & basic_op.MIN_64)>0) {
                                Temp1_cs = (Temp1_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                            }
                        }
                    }
                    
                    Temp3_cs=Temp1_cs-L_dmin_cs;
                    
                    if (((Temp1_cs ^ L_dmin_cs) & basic_op.MIN_64) != 0) {
                        if (((Temp3_cs ^ Temp1_cs) & basic_op.MIN_64)>0) {
                            Temp3_cs = (Temp1_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                        }
                    }
                    if(Temp3_cs<0){
                        L_dmin_cs = Temp1_cs;
                        cand_cur_cs = i_cs;
                    }
                }
                
                
                cand_cs[mode_cs] = cand_cur_cs;
                for(j_cs=0; j_cs<LD8A.NC; j_cs++){
                    buf1_cs[j_cs] = (int)(rbuf_cs[j_cs] - tab_ld8a.lspcb1[cand_cur_cs][j_cs]);
                }
                index_cs = 0;
                L_dmin_cs = basic_op.MAX_64;
                for(i_cs=0; i_cs<LD8A.NC1; i_cs++){
                    Temp1_cs = 0;
                    for(j_cs=0; j_cs<LD8A.NC; j_cs++){
                        Temp2_cs = (int)(buf1_cs[j_cs] - tab_ld8a.lspcb2[i_cs][j_cs]);
                        Temp3_cs = wegt_cs[j_cs] * (int)Temp2_cs;
                        Temp3_cs = (Temp3_cs & 0xffff8000) >> 15;
                        
                        if ((Temp3_cs & 0x00010000)>0)
                            Temp3_cs = Temp3_cs | 0xffff0000;
                        
                        Temp3_cs = (int)Temp3_cs;
                        
                        Temp3_cs*= Temp2_cs;
                        if (Temp3_cs != 0x40000000) {
                            Temp3_cs *= 2;
                        } else {
                            Temp3_cs = basic_op.MAX_64;
                        }
                        Temp1_cs+=Temp3_cs;
                        
                        if (((Temp1_cs ^ Temp3_cs) & basic_op.MIN_64) == 0) {
                            if (((Temp1_cs ^ Temp1_cs) & basic_op.MIN_64)>0) {
                                Temp1_cs = (Temp1_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                            }
                        }
                    }
                    Temp2_cs= Temp1_cs - L_dmin_cs;
                    
                    if (((Temp1_cs ^ L_dmin_cs) & basic_op.MIN_64) != 0) {
                        if (((Temp2_cs ^ Temp1_cs) & basic_op.MIN_64)>0) {
                            Temp2_cs = (Temp1_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                        }
                    }
                    if(Temp2_cs < 0){
                        L_dmin_cs = Temp1_cs;
                        index_cs = i_cs;
                    }
                }
                
                tindex1_cs[mode_cs] = index_cs;
                for(i_cs=0; i_cs < LD8A.NC; i_cs++){
                    buf_cs[j_cs] = (int)(tab_ld8a.lspcb1[cand_cur_cs][i_cs]+tab_ld8a.lspcb2[index_cs][i_cs]);
                }
                for(j_cs=1; j_cs<LD8A.NC; j_cs++){
                    Temp1_cs = (int)(buf_cs[j_cs-1] - buf_cs[j_cs]);
                    Temp2_cs = (int)((int)Temp1_cs+LD8A.GAP1);
                    Temp2_cs = basic_op.shr((int)Temp2_cs, 1);
                    if(Temp2_cs > 0){
                        buf_cs[j_cs-1]-= Temp2_cs;
                        buf_cs[j_cs] = (int)(buf_cs[j_cs]+(int)Temp2_cs);
                    }
                }
                
                for(j_cs=LD8A.NC; j_cs < LD8A.M; j_cs++){
                    buf1_cs[j_cs] = (int)(rbuf_cs[j_cs] - tab_ld8a.lspcb1[cand_cur_cs][j_cs]);
                }
                index_cs = 0;
                L_dmin_cs = basic_op.MAX_64;
                for(i_cs = 0; i_cs < LD8A.NC1; i_cs++){
                    Temp1_cs = 0;
                    for(j_cs = LD8A.NC; j_cs < LD8A.M; j_cs++){
                        Temp2_cs = (int)(buf1_cs[j_cs] - tab_ld8a.lspcb2[i_cs][j_cs]);
                        Temp3_cs = wegt_cs[j_cs] * (int)Temp2_cs;
                        Temp3_cs = (Temp3_cs & 0xffff8000) >> 15;
                        
                        if ((Temp3_cs & 0x00010000)>0)
                            Temp3_cs = Temp3_cs | 0xffff0000;
                        
                        Temp3_cs = (int)Temp3_cs;
                        Temp3_cs*= Temp2_cs;
                        if (Temp3_cs != 0x40000000) {
                            Temp3_cs *= 2;
                        } else {
                            Temp3_cs = basic_op.MAX_64;
                        }
                        Temp1_cs+=Temp3_cs;
                        
                        if (((Temp1_cs ^ Temp3_cs) & basic_op.MIN_64) == 0) {
                            if (((Temp1_cs ^ Temp1_cs) & basic_op.MIN_64)>0) {
                                Temp1_cs = (Temp1_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                            }
                        }
                    }
                    Temp2_cs=Temp1_cs-L_dmin_cs;
                    
                    if (((Temp1_cs ^ L_dmin_cs) & basic_op.MIN_64) != 0) {
                        if (((Temp2_cs ^ Temp1_cs) & basic_op.MIN_64)>0) {
                            Temp2_cs = (Temp1_cs < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                        }
                    }
                    if(Temp2_cs < 0){
                        L_dmin_cs = Temp1_cs;
                        index_cs = i_cs;
                    }
                }
                tindex2_cs[mode_cs] = index_cs;
                for(j_cs=LD8A.NC; j_cs<LD8A.M; j_cs++){
                    buf_cs[j_cs] = (int)(tab_ld8a.lspcb1[cand_cur_cs][j_cs]+tab_ld8a.lspcb2[index_cs][j_cs]);
                }
                
                for(j_cs=LD8A.NC; j_cs<LD8A.M; j_cs++){
                    Temp1_cs = (int)(buf_cs[j_cs-1] - buf_cs[j_cs]);
                    Temp2_cs = (int)((int)Temp1_cs+LD8A.GAP1);
                    Temp2_cs = basic_op.shr((int)Temp2_cs, 1);
                    if(Temp2_cs > 0){
                        buf_cs[j_cs-1] = (int)(buf_cs[j_cs-1] - (int)Temp2_cs);
                        buf_cs[j_cs] = (int)(buf_cs[j_cs]+(int)Temp2_cs);
                    }
                }
                for(i_cs=1; i_cs < LD8A.M; i_cs++){
                    Temp1_cs = (int)(buf_cs[i_cs-1]- buf_cs[i_cs]);
                    
                    Temp2_cs = (int)((int)Temp1_cs+LD8A.GAP2);
                    Temp2_cs = basic_op.shr((int)Temp2_cs, 1);
                    if(Temp2_cs > 0){
                        buf_cs[i_cs-1]-= (int)Temp2_cs;
                        buf_cs[i_cs] = (int)(buf_cs[i_cs]+(int)Temp2_cs);
                    }
                }
                L_tdist_cs[mode_cs] = 0;
                for(j_cs = 0; j_cs<LD8A.M; j_cs++){
                    Temp1_cs=(int)(buf_cs[j_cs]-rbuf_cs[j_cs]);
                    
                    Temp1_cs*= tab_ld8a.fg_sum[mode_cs][j_cs];
                    Temp1_cs = (Temp1_cs & 0xffff8000) >> 15;
                    
                    if ((Temp1_cs & 0x00010000)>0)
                        Temp1_cs = Temp1_cs | 0xffff0000;
                    
                    Temp1_cs = (int)Temp1_cs;
                    L_acc_cs= wegt_cs[j_cs]*Temp1_cs;
                    if (L_acc_cs != 0x40000000) {
                        L_acc_cs *= 2;
                    } else {
                        L_acc_cs = basic_op.MAX_64;
                    }
                    Temp2_cs = L_shl1(L_acc_cs, 4);
                    Temp3_cs = (int)(Temp2_cs>>16);
                    Temp3_cs*= Temp1_cs;
                    if (Temp3_cs != 0x40000000) {
                        Temp3_cs *= 2;
                    } else {
                        Temp3_cs = basic_op.MAX_64;
                    }
                    L_tdist_cs[mode_cs]+=Temp3_cs;
                    
                    if (((L_tdist_cs[mode_cs] ^ Temp3_cs) & basic_op.MIN_64) == 0) {
                        if (((L_tdist_cs[mode_cs] ^ L_tdist_cs[mode_cs]) & basic_op.MIN_64)>0) {
                            L_tdist_cs[mode_cs] = (L_tdist_cs[mode_cs] < 0) ? basic_op.MIN_64 : basic_op.MAX_64;
                        }
                    }
                }
            }


А за форматирование прошу прощение, был напуган, с буфером попробую, но блин боюсь мало успеха будет, просто реально народ, уже бошка невыдерживает четвертый месяц немогу сбить нагрузку на проц и именно с Кодером, Декодер все чики пуки, а вот кодер какая то жопа, уже начал линейную структуру кода создавать, что бы Java меньше с переходами парилась
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.