0

I'm trying to transform a live stream with g726 and h264 to mp4. I decode g726 to pcm then use faac to encode pcm to aac. Every g726 audio packet I receive is 320 bytes. After decoding, the pcm size is 1280 bytes, so the sample number is 640. But the inputSamples which faacEncOpen gives me is 1024, and my inputFormat is FAAC_INPUT_16BIT. When I pass 640 to faacEncEncode, the sound is not good at all. Does anyone know how to fix this. Thanks in advance!

// (1) Open FAAC engine
hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes); // nInputSamples the function returns is 1024

if(hEncoder == NULL)
{
    printf("[ERROR] Failed to call faacEncOpen()\n");
    return -1;
}

nInputSamples = 640;// here overwrites the input samples returned from faacEncOpen
nPCMBufferSize = nInputSamples * nPCMBitSize / 8; // nPCMBitSize is 16
pbPCMBuffer = new BYTE [nPCMBufferSize];
pbAACBuffer = new BYTE [nMaxOutputBytes];

// (2.1) Get current encoding configuration
pConfiguration = faacEncGetCurrentConfiguration(hEncoder);
pConfiguration->inputFormat = FAAC_INPUT_16BIT;

// (2.2) Set encoding configuration
nRet = faacEncSetConfiguration(hEncoder, pConfiguration);

for(int i = 0; 1; i++)
{
    nBytesRead = fread(pbPCMBuffer, 1, nPCMBufferSize, fpIn);

    nInputSamples = nBytesRead * 8 / nPCMBitSize;

    // (3) Encode
    nRet = faacEncEncode(
    hEncoder, (int*) pbPCMBuffer, nInputSamples, pbAACBuffer, nMaxOutputBytes);

    fwrite(pbAACBuffer, 1, nRet, fpOut);

    printf("%d: faacEncEncode returns %d\n", i, nRet);

    if(nBytesRead <= 0)
    {
        break;
    }
}
ncubrian
  • 421
  • 1
  • 3
  • 14
  • Understand your conversion details, but can you post your codes as well ? – Raptor Apr 28 '14 at 09:23
  • Sorry I can't post my company's code, but this code I posted is almost the same. The pcm data is saved into a file after decoding the g726 stream to pcm. This code reads the data from the pcm file. – ncubrian Apr 29 '14 at 01:21

0 Answers0