[Speex-dev] problem: The decoded frame is not as the original one

邓尧 torshie at gmail.com
Sun Mar 11 18:50:06 PDT 2012


It's lossy encoding.

On Mon, Mar 12, 2012 at 1:17 AM, Mashal al-shboul <shboul8989 at yahoo.com>wrote:

> Hi All,
> i need your help in determining the problem in the following sample code
> (taken from speex manual) for fixed point encoding.
> i tested encoding a 160 sample frame and then decoding it back But The
> problem is that the decoded frame is totally different from the original
> frame(see output below).What is the possible reason for this?.thanks for
> any help
>
> #include<stdio.h>
> #include"intel16.h"
> #include <speex/speex.h>
>
> #define FRAME_SIZE 160
> #define MAX_NB_BYTES 25
> SpeexBits bits;
> void *enc_state;
> int quality=4;
> int nbBytes;
> int byte_ptr;
> int frame_size;
> short frame[FRAME_SIZE];
> char outBuffer[20];
>
> SpeexBits decBits;
> void *dec_state;
> short decFrame[FRAME_SIZE];
> /*===========END ===============================*/
>
>
> int z=0;
> int frame_size;
>
>
> int main (int argc,char **argv)
> {
> for( z=0;z<160;z++)
>     {
>     frame[z]=intel_theme[z];  //array of short from "intel16" header file
>     }
>  printf("\n =================================== \n");
>
>  for( z=0;z<160;z++)
>     {
>         printf("%i",frame[z]);
>     printf ("  ");
>         }
>
>
> /*===============================ENCODING==============================================*/
>
>      speex_bits_init(&bits);
>      enc_state = speex_encoder_init(&speex_nb_mode);
>      speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
>      speex_encoder_ctl(enc_state,SPEEX_SET_QUALITY,&quality);
>      speex_bits_reset(&bits);
>
> //-----------TWO CALLS FOR ENCODING-------------------
>      speex_encode_int(enc_state, frame, &bits);                // encoding
> from frame to &bits
>      nbBytes = speex_bits_write(&bits, outBuffer, MAX_NB_BYTES); //writing
> from &bits to outBuffer
> //----------------------------------------------------
>
>      speex_bits_destroy(&bits);
>      speex_encoder_destroy(enc_state);
>
> printf("\n outBuffer: ");
> for(z=0;z<20;z++)
> {
> printf("%c",outBuffer[z]);
> }
> printf("\n \n");
> /*===============================END OF
> ENCODING=========================================*/
>
>
>
> /*===============================DECODING==============================================*/
>
> speex_bits_init(&decBits);
> dec_state=speex_decoder_init(&speex_nb_mode);
> speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size);
>
> //-----------TWO CALLS FOR DECODING-------------------
> speex_bits_read_from(&decBits,outBuffer,nbBytes);
> speex_decode_int(dec_state,&decBits,decFrame);
> //----------------------------------------------------
> printf("\n BUFFER DECODED BACK \n");
>
> for(z=0;z<160;z++)
> {
> printf("%i",decFrame[z]);
> printf ("  ");
> }
>
> speex_bits_destroy(&decBits);
> speex_decoder_destroy(dec_state);
> /*===============================END OF
> DECODING==============================================*/
> printf("\n nbBytes: ");
> printf("%i",nbBytes);
> printf("\n frame_size= ");
> printf("%i",frame_size);
> printf ("\n");
> //-----------------
> printf("end of run!");
>
> return 0;
> }
>
> OUTPUT:
> //the original frame
> 1  -512  16384  512  -768  -2048  -1280  256  -1024  12288  0  8192  253
> 256  -768  12288  0  -16  -768  -512  -1  0  -512  -768  -1536  -512  -512
> -768  16384  0  8192  -512  16384  512  -768  -2048  -1280  256  -1024
> 12288  0  8192  253  256  -768  12288  0  -16  -768  -512  -1  0  -512
> -768  -1536  -512  -512  -768  16384  0  8192  -512  16384  512  -768
> -2048  -1280  256  -1024  12288  0  8192  253  256  -768  12288  0  -16
> -768  -512  -1  0  -512  -768  -1536  -512  -512  -768  16384  0  8192
> -512  16384  512  -768  -2048  -1280  256  -1024  12288  0  8192  253  256
> -768  12288  0  -16  -768  -512  -1  0  -512  -768  -1536  -512  -512
> -768  16384  0  8192  -512  16384  512  -768  -2048  -1280  256  -1024
> 12288  0  8192  253  256  -768  12288  0  -16  -768  -512  -1  0  -512
> -768  -1536  -512  -512  -768  16384  0  -1  0  -512  -768  -1536  -512
> -512  -768  16384  -1
>  ===================================
>
>  outBuffer: �9�p�C��m�Cx6��
>
> //the decoded frame .totally different
>  BUFFER DECODED BACK
> 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
> 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
> 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
> 0  0  0  0  0  2838  -3982  4801  -4136  432  -1945  610  1035  -1090
> 2752  -558  1431  -2320  -1016  789  5084  -2395  -2916  -225  -311  -703
> 586  1110  -557  -1152  1096  229  425  5825  -933  3922  -6289  7423
> -6636  -793  -2123  -354  991  -1947  3958  -1070  1380  -2120  -2777
> -679  9010  -2451  -4210  -1845  229  -1687  317  1443  -1355  -2818  214
> 721  -313  9997  -60  3489  -5953  9277  -6990  -2716  -1642  -792  477
> -2417  5801  -1200  1055  -1744  -2927  -2053  10273  -1913  -4342  -2718
> 427
>  nbBytes: 20
>  frame_size= 160
>
>
>
>
>
>
>
>
> _______________________________________________
> Speex-dev mailing list
> Speex-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/speex-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20120312/7a2c97ca/attachment.htm 


More information about the Speex-dev mailing list