📄 jvoipsampleconverter.cpp
字号:
srclen2--; sourceadvance = 2; } else sourceadvance = 1; if (destinationbytespersample == 2) { destadvance = 4; if ((dif = (destinationlen&0x03)) != 0) dstlen2 -= dif; destadvancehalf = 2; } else { if ((destinationlen&0x01) != 0) dstlen2--; destadvance = 2; destadvancehalf = 1; } for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int newval; GetSixteenBitSampleValue(sourcebuffer+srcpos,newval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+destadvancehalf,newval); srcpos2 += rateratio; srcpos = ((int)(srcpos2+0.5))*sourceadvance; }}*/void JVOIPSampleConverter::UpRate_AddStereo_Convert(){ int dif; int destadvancehalf; int srcpos; double srcpos2; int curval,nextval; int prevadd; srclen2 = sourcelen; dstlen2 = destinationlen; srcpos = 0; srcpos2 = 0; if (sourcebytespersample == 2) { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; } else sourceadvance = 1; if (destinationbytespersample == 2) { destadvance = 4; if ((dif = (destinationlen&0x03)) != 0) dstlen2 -= dif; destadvancehalf = 2; } else { if ((destinationlen&0x01) != 0) dstlen2--; destadvance = 2; destadvancehalf = 1; } if (srcpos < srclen2 && dstlen2 > 0) { GetSixteenBitSampleValue(sourcebuffer+srcpos,curval); } prevadd = 0; for (dstpos = 0 ; dstpos < dstlen2 ; ) { int newval,prevpos; double pos; prevpos = srcpos; srcpos += sourceadvance; if (srcpos < srclen2) { GetSixteenBitSampleValue(sourcebuffer+srcpos,nextval); prevadd = nextval-curval; } else nextval = curval + prevadd; while ((pos = (srcpos2+0.5)*sourceadvance) < (double)srcpos && dstpos < dstlen2) { newval = (int)((double)curval+(double)(nextval-curval)*((double)pos-prevpos)/(double)sourceadvance); newval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+destadvancehalf,newval); srcpos2 += rateratio; dstpos += destadvance; } curval = nextval; }}/*void JVOIPSampleConverter::UpRate_SameStereo_Convert(){ int dif; int sourceadvancehalf,destadvancehalf; int srcpos; double srcpos2; srclen2 = sourcelen; dstlen2 = destinationlen; srcpos = 0; srcpos2 = 0; if (sourcestereo) { if (sourcebytespersample == 2) { if ((dif = (sourcelen&0x03)) != 0) srclen2 -= dif; sourceadvance = 4; sourceadvancehalf = 2; } else { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; sourceadvancehalf = 1; } if (destinationbytespersample == 2) { destadvance = 4; if ((dif = (destinationlen&0x03)) != 0) dstlen2 -= dif; destadvancehalf = 2; } else { if ((destinationlen&0x01) != 0) dstlen2--; destadvance = 2; destadvancehalf = 1; } for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int newlval,newrval; GetSixteenBitSampleValue(sourcebuffer+srcpos,newlval); GetSixteenBitSampleValue(sourcebuffer+srcpos+sourceadvancehalf,newrval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newlval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+destadvancehalf,newrval); srcpos2 += rateratio; srcpos = ((int)(srcpos2+0.5))*sourceadvance; } } else // no stereo { if (sourcebytespersample == 2) { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; } else sourceadvance = 1; if (destinationbytespersample == 2) { destadvance = 2; if ((destinationlen&0x01) != 0) dstlen2--; } else destadvance = 1; for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int newval; GetSixteenBitSampleValue(sourcebuffer+srcpos,newval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); srcpos2 += rateratio; srcpos = ((int)(srcpos2+0.5))*sourceadvance; } }}*/void JVOIPSampleConverter::UpRate_SameStereo_Convert(){ int dif; int sourceadvancehalf,destadvancehalf; int srcpos; double srcpos2; srclen2 = sourcelen; dstlen2 = destinationlen; srcpos = 0; srcpos2 = 0; if (sourcestereo) { int currval,curlval,nextrval,nextlval; int rprevadd,lprevadd; if (sourcebytespersample == 2) { if ((dif = (sourcelen&0x03)) != 0) srclen2 -= dif; sourceadvance = 4; sourceadvancehalf = 2; } else { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; sourceadvancehalf = 1; } if (destinationbytespersample == 2) { destadvance = 4; if ((dif = (destinationlen&0x03)) != 0) dstlen2 -= dif; destadvancehalf = 2; } else { if ((destinationlen&0x01) != 0) dstlen2--; destadvance = 2; destadvancehalf = 1; } if (srcpos < srclen2 && 0 < dstlen2) { GetSixteenBitSampleValue(sourcebuffer+srcpos,curlval); GetSixteenBitSampleValue(sourcebuffer+srcpos+sourceadvancehalf,currval); } rprevadd = 0; lprevadd = 0; for (dstpos = 0 ; dstpos < dstlen2 ; ) { int prevpos; int newlval,newrval; double pos; prevpos = srcpos; srcpos += sourceadvance; if (srcpos < srclen2) { GetSixteenBitSampleValue(sourcebuffer+srcpos,nextlval); GetSixteenBitSampleValue(sourcebuffer+srcpos+sourceadvancehalf,nextrval); rprevadd = nextrval-currval; lprevadd = nextlval-curlval; } else { nextrval = currval+rprevadd; nextlval = curlval+lprevadd; } while ((pos = (srcpos2+0.5)*sourceadvance) < (double)srcpos && dstpos < dstlen2) { double factor2; factor2 = ((double)pos-prevpos)/(double)sourceadvance; newlval = (int)((double)curlval+(double)(nextlval-curlval)*factor2); newrval = (int)((double)currval+(double)(nextrval-currval)*factor2); newlval *= factor; newrval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newlval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+destadvancehalf,newrval); srcpos2 += rateratio; dstpos += destadvance; } currval = nextrval; curlval = nextlval; } } else // no stereo { int curval,nextval,prevadd; if (sourcebytespersample == 2) { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; } else sourceadvance = 1; if (destinationbytespersample == 2) { destadvance = 2; if ((destinationlen&0x01) != 0) dstlen2--; } else destadvance = 1; if (srcpos < srclen2 && 0 < dstlen2) GetSixteenBitSampleValue(sourcebuffer+srcpos,curval); prevadd = 0; for (dstpos = 0 ; dstpos < dstlen2 ; ) { int newval,prevpos; double pos; prevpos = srcpos; srcpos += sourceadvance; if (srcpos < srclen2) { GetSixteenBitSampleValue(sourcebuffer+srcpos,nextval); prevadd = nextval-curval; } else nextval = curval+prevadd; while ((pos = (srcpos2+0.5)*sourceadvance) < (double)srcpos && dstpos < dstlen2) { newval = (int)((double)curval+(double)(nextval-curval)*((double)pos-prevpos)/(double)sourceadvance); newval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); srcpos2 += rateratio; dstpos += destadvance; } curval = nextval; } }}inline void JVOIPSampleConverter::SameRate_Convert(){ if (sourcestereo && !destinationstereo) SameRate_DelStereo_Convert(); else if (!sourcestereo && destinationstereo) SameRate_AddStereo_Convert(); else SameRate_SameStereo_Convert();}void JVOIPSampleConverter::SameRate_DelStereo_Convert(){ int dif; int sourceadvancehalf; int srcpos; srclen2 = sourcelen; dstlen2 = destinationlen; srcpos = 0; if (sourcebytespersample == 2) { if ((dif = (sourcelen&0x03)) != 0) srclen2 -= dif; sourceadvance = 4; sourceadvancehalf = 2; } else { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; sourceadvancehalf = 1; } if (destinationbytespersample == 2) { destadvance = 2; if ((destinationlen&0x01) != 0) dstlen2--; } else destadvance = 1; for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int leftval,rightval; int newval; GetSixteenBitSampleValue(sourcebuffer+srcpos,leftval); GetSixteenBitSampleValue(sourcebuffer+srcpos+sourceadvancehalf,rightval); newval = (leftval+rightval)/2; newval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); srcpos += sourceadvance; }}void JVOIPSampleConverter::SameRate_AddStereo_Convert(){ int dif; int destadvancehalf; int srcpos; srclen2 = sourcelen; dstlen2 = destinationlen; srcpos = 0; if (sourcebytespersample == 2) { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; } else sourceadvance = 1; if (destinationbytespersample == 2) { destadvance = 4; if ((dif = (destinationlen&0x03)) != 0) dstlen2 -= dif; destadvancehalf = 2; } else { if ((destinationlen&0x01) != 0) dstlen2--; destadvance = 2; destadvancehalf = 1; } for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int newval; GetSixteenBitSampleValue(sourcebuffer+srcpos,newval); newval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+destadvancehalf,newval); srcpos += sourceadvance; }}void JVOIPSampleConverter::SameRate_SameStereo_Convert(){ int dif; int sourceadvancehalf,destadvancehalf; int srcpos; srclen2 = sourcelen; dstlen2 = destinationlen; srcpos = 0; if (sourcestereo) { if (sourcebytespersample == 2) { if ((dif = (sourcelen&0x03)) != 0) srclen2 -= dif; sourceadvance = 4; sourceadvancehalf = 2; } else { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; sourceadvancehalf = 1; } if (destinationbytespersample == 2) { destadvance = 4; if ((dif = (destinationlen&0x03)) != 0) dstlen2 -= dif; destadvancehalf = 2; } else { if ((destinationlen&0x01) != 0) dstlen2--; destadvance = 2; destadvancehalf = 1; } for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int newlval,newrval; GetSixteenBitSampleValue(sourcebuffer+srcpos,newlval); GetSixteenBitSampleValue(sourcebuffer+srcpos+sourceadvancehalf,newrval); newlval *= factor; newrval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newlval); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+destadvancehalf,newrval); srcpos += sourceadvance; } } else // no stereo { if (sourcebytespersample == 2) { if ((sourcelen&0x01) != 0) srclen2--; sourceadvance = 2; } else sourceadvance = 1; if (destinationbytespersample == 2) { destadvance = 2; if ((destinationlen&0x01) != 0) dstlen2--; } else destadvance = 1; for (dstpos = 0 ; srcpos < srclen2 && dstpos < dstlen2 ; dstpos += destadvance) { int newval; GetSixteenBitSampleValue(sourcebuffer+srcpos,newval); newval *= factor; EncodeSixteenBitSampleValue(destinationbuffer+dstpos,newval); srcpos += sourceadvance; } }}void JVOIPSampleConverter::FillUp(){ double srctime; int dsttimelen,dif; srctime = ((double)(srclen2/sourceadvance))/((double)sourcerate); dsttimelen = (int)(srctime*((double)destinationrate)*((double)destadvance)+0.5); if (destadvance > 1) { if ((dif = (dsttimelen%destadvance)) != 0) dsttimelen -= dif; } dsttimelen = (dsttimelen < dstlen2)?dsttimelen:dstlen2; if (dstpos < dsttimelen) { if (dstpos != 0) { unsigned char *buf; int i; buf = destinationbuffer+dstpos-destadvance; while (dstpos < dsttimelen) { for (i = 0 ; i < destadvance ; i++) destinationbuffer[dstpos+i] = buf[i]; dstpos += destadvance; } } else // fill with silence { if (destinationstereo) { int halfadvance; halfadvance = destadvance/2; while (dstpos < dsttimelen) { EncodeSixteenBitSampleValue(destinationbuffer+dstpos,0); EncodeSixteenBitSampleValue(destinationbuffer+dstpos+halfadvance,0); dstpos += destadvance; } } else { while (dstpos < dsttimelen) { EncodeSixteenBitSampleValue(destinationbuffer+dstpos,0); dstpos += destadvance; } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -