[Speex-dev] Decoding only a certain frame results in different values than when decoding the entire file

Hermann Weber hermie.weber at gmx.de
Fri Dec 23 10:03:36 PST 2011


I found out something:

The more frames I decode before the frame that I actually want to 
decode, the better the quality becomes.
For example when I basically want to decode frame #100, I read frame #80 
to #100, and then frame 100 has the quality that I need.

Why? Is there any information on this behaviour?

Thank you.
Hermann


Am 23.12.2011 18:37, schrieb Hermann Weber:
> It would be nice to get more input.
> I am really lost because I am not sure what is going on here, and there
> are no sources to investigate on.
>
> Thank you.
>
> Hermann
>
> Am 22.12.2011 20:55, schrieb Hermann Weber:
>> To make it complete, here is the code that I am using to encode a large
>> file:
>>
>> int __stdcall SpxEncode(unsigned char* inBuf, unsigned char* outBuf,
>> unsigned int inlen)
>> {
>>        //char *testFile;
>>        //FILE *ftest;
>>        //testFile = "test";
>>        //ftest = fopen(testFile, "wb");
>>        //fwrite(inBuf,1,inlen,ftest);
>>
>>        //take every 320 bytes
>>        //copy every short to float array, and make sure to put null in
>> unused area
>>
>>        float input[MAX_FRAME_SIZE];
>>        char cbits[MAX_FRAME_BYTES];
>>        unsigned int inBufpos = 0, j, outBufpos = 0;
>>        short *sinBuf;
>>
>>        sinBuf = (short*) inBuf;
>>
>>        do
>>        {
>>            j = 0;
>>            do
>>                {
>>                //copy to float array
>>                input[j] = sinBuf[inBufpos];
>>                inBufpos++; j++;
>>                }
>>            while ((inBufpos % 160 != 0)&&   (inBufpos != (inlen/2)));
>>
>>            //fill the rest with null
>>            if (inBufpos == (inlen/2))
>>                for (j=(inBufpos%160); j<160; j++)    input[j] = 0;
>>
>>            speex_bits_reset(&bits);
>>            speex_encode(encstate, input,&bits);
>>
>>            /*Copy the bits to an array of char that can be written*/
>>            speex_bits_write(&bits, cbits, MAX_FRAME_BYTES);
>>            for (j=0; j<62; j++)
>>                {
>>                outBuf[outBufpos] = cbits[j];
>>                outBufpos++;
>>                }
>>
>>        }
>>        while (inBufpos != (inlen/2));
>>
>>        //fwrite(outBuf, 1, outBufpos, ftest);
>>        //fclose(ftest);
>>        return 42;
>> }
>> _______________________________________________
>> Speex-dev mailing list
>> Speex-dev at xiph.org
>> http://lists.xiph.org/mailman/listinfo/speex-dev
>>
> _______________________________________________
> Speex-dev mailing list
> Speex-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/speex-dev
>



More information about the Speex-dev mailing list