[FFmpeg-soc] [soc]: r340 - qcelp/qcelpdec.c

Benjamin Larsson banan at ludd.ltu.se
Sun Jul 8 04:27:53 CEST 2007


Hi.

reynaldo wrote:
> Author: reynaldo
> Date: Sun Jul  8 03:11:51 2007
> New Revision: 340
> 
> Log:
> Main incorrect packet detection loop, still lacks codebook gain sanity checks
> 
> Modified:
>    qcelp/qcelpdec.c
> 
> Modified: qcelp/qcelpdec.c
> ==============================================================================
> --- qcelp/qcelpdec.c	(original)
> +++ qcelp/qcelpdec.c	Sun Jul  8 03:11:51 2007
> @@ -80,6 +80,26 @@ static int qcelp_decode_close(AVCodecCon
>      return 0;
>  }
>  
> +/**
> + * Decodes the five |R2 LSPVi vectors to get the 10
> + * quantized LSP frequencies from any packet rate but 1/8
> + *
> + * For details see TIA/EIA/IS-733 2.4.3.2.6.2-2
> + */
> +void qcelp_lspv2lspf(const uint8_t *lspv, float *lspf)
> +{
> +    lspf[0]=        qcelp_lspvq1[lspv[0]].x;
> +    lspf[1]=lspf[0]+qcelp_lspvq1[lspv[0]].y;
> +    lspf[2]=lspf[1]+qcelp_lspvq2[lspv[1]].x;
> +    lspf[3]=lspf[2]+qcelp_lspvq2[lspv[1]].y;
> +    lspf[4]=lspf[3]+qcelp_lspvq3[lspv[2]].x;
> +    lspf[5]=lspf[4]+qcelp_lspvq3[lspv[2]].y;
> +    lspf[6]=lspf[5]+qcelp_lspvq4[lspv[3]].x;
> +    lspf[7]=lspf[6]+qcelp_lspvq4[lspv[3]].y;
> +    lspf[8]=lspf[7]+qcelp_lspvq5[lspv[4]].x;
> +    lspf[9]=lspf[8]+qcelp_lspvq5[lspv[4]].y;
> +}
> +
>  static int qcelp_decode_frame(AVCodecContext *avctx, void *data,
>             int *data_size, uint8_t *buf, int buf_size)
>  {
> @@ -90,6 +110,7 @@ static int qcelp_decode_frame(AVCodecCon
>      int      n;
>      uint16_t first16 = 0; /*!< needed for rate 1/8 peculiarities */
>      int      is_ifq = 0;
> +    float    qtzd_lspf[10];
>  
>      init_get_bits(&q->gb, buf, buf_size*8);
>  
> @@ -162,16 +183,39 @@ static int qcelp_decode_frame(AVCodecCon
>      if(q->frame->rate == RATE_OCTAVE && first16==0xFFFF)
>          is_ifq=1;
>  
> -    /* check for badly received packets */
> +    /**
> +     * Check for badly received packets
> +     * TIA/EIA/IS-733 2.4.8.7.3
> +     */
>  
>      if(q->frame->rate != RATE_OCTAVE)
>      {
> +        qcelp_lspv2lspf(q->frame->data + QCELP_LSPV0_POS, qtzd_lspf);
> +
>          /* check for outbound LSP freqs and codebook gain params */
>          if(q->frame->rate != RATE_QUARTER)
>          {
> -               /* magic here */
> -        }
> +            if(qtzd_lspf[9] <= .66 || qtzd_lspf[9] >= .985)
> +                is_ifq=1; /* FIXME 'erase packet'==ifq? */
>  
> +            for(n=4; !is_ifq && n<10; n++)
> +            {
> +                if(FFABS(qtzd_lspf[n]-qtzd_lspf[n-4]) < .0931)

This doesn't look right.

> +                    is_ifq=1;
> +            }
> +        }else
> +        {
> +            if(qtzd_lspf[9] <= .70 || qtzd_lspf[9] >=  .97)
> +                is_ifq=1;
> +
> +            for(n=3; !is_ifq && n<10; n++)
> +            {
> +                if(FFABS(qtzd_lspf[n]-qtzd_lspf[n-2]) < .08)

Same here.

> +                    is_ifq=1;
> +            }
> +            /* codebook gain sanity check */
> +
> +        }
>      }
>  
>       /*

MvH
Benjamin Larsson



More information about the FFmpeg-soc mailing list