int stereo2mono(unsigned char *buf_stereo, int stereo_size, int bit)
{
int i = 0;
int j = 0;
switch (bit>>3){
case 1:
for (; j < stereo_size; j += 2) {
buf_stereo[i++] = buf_stereo[j];
}
break;
case 2:
for (; j < stereo_size; j += 4) {
buf_stereo[i++] = buf_stereo[j];
buf_stereo[i++] = buf_stereo[j+1];
}
break;
case 3:
for (; j < stereo_size; j += 6) {
buf_stereo[i++] = buf_stereo[j];
buf_stereo[i++] = buf_stereo[j+1];
buf_stereo[i++] = buf_stereo[j+2];
}
break;
case 4:
for (; j < stereo_size; j += 8) {
buf_stereo[i++] = buf_stereo[j];
buf_stereo[i++] = buf_stereo[j+1];
buf_stereo[i++] = buf_stereo[j+2];
buf_stereo[i++] = buf_stereo[j+3];
}
break;
default:
printf("stereo2mono(): Unsupport bits-per-sample: %i\n", bit);
return 0;
}
return stereo_size >> 1;
}
unsigned char *mono2stereo(unsigned char *buf_mono, int mono_size, int bit, int *stereo_size)
{
int i, j;
unsigned char *pszBufStereo = NULL;
*stereo_size = mono_size * 2;
pszBufStereo = ortp_malloc(*stereo_size);
if (pszBufStereo == NULL)
{
printf("mono2stereo(): Allocate stereo buffer error, size %d\n", *stereo_size);
return NULL;
}
i = 0;
j = 0;
switch (bit>>3)
{
case 1:
for (; mono_size > 0; mono_size--)
{
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j];
j++;
}
break;
case 2:
for (; mono_size > 0; mono_size -= 2)
{
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j+1];
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j+1];
j += 2;
}
break;
case 3:
for (; mono_size > 0; mono_size -= 3)
{
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j+1];
pszBufStereo[i++] = buf_mono[j+2];
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j+1];
pszBufStereo[i++] = buf_mono[j+2];
j += 3;
}
break;
case 4:
for (; mono_size > 0; mono_size -= 4)
{
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j+1];
pszBufStereo[i++] = buf_mono[j+2];
pszBufStereo[i++] = buf_mono[j+3];
pszBufStereo[i++] = buf_mono[j];
pszBufStereo[i++] = buf_mono[j+1];
pszBufStereo[i++] = buf_mono[j+2];
pszBufStereo[i++] = buf_mono[j+3];
j += 4;
}
break;
default:
printf("mono2stereo(): Unsupport bits-per-sample: %i\n", bit);
ortp_free(pszBufStereo);
return NULL;
}
return pszBufStereo;
}
您的支持,是我持续创作的动力!!!!