Problème de compression/parenthésage

Problème de compression/parenthésage - C - Programmation

Marsh Posté le 11-04-2005 à 22:14:12    

Bonsoir,
alors voilà j'ai quelques problèmes. Je code en C pour un logiciel embarqué de caméra (ELTEC Hipercam1) sous tornado VX-Works. Je capture les images de la caméra et les stocke dans des buffers. Je fais la différence de deux images avec la fonction abs() et ensuite je compresse le résultat de cette différence à la façon RLE.
 
Le problème est qu'à certains moment la compression à l'air de bien fonctionner mais qu'à d'autres elle laisse passer des paquets d'octets (genre 00 00 00 00 au lieu de 84 00).
Ensuite j'ai peut etre des problèmes de parenthésage à certains endroits, j'attends vos avis, merci.
 
Voici le code de cette différence puis compression.

Code :
  1. src  =(unsigned char*) adr[3];
  2.   dst  =(unsigned char*) adr[4];
  3.   old  =(unsigned char*) adr[(NumBuf+1) % (NBBUF-2)];
  4.   nouv =(unsigned char*) adr[(NumBuf+2) % (NBBUF-2)];
  5.   for(count=0;count<(W*H);count++)
  6.   {
  7.    val=abs(((int)*old) - ((int)*nouv))/2;
  8.    cpt=1;
  9.    if(val>2)
  10.     while((count < W*H) && ((abs(((int)*(++old)) - ((int)*(++nouv)))/2)==val))
  11.     {
  12.      cpt++;
  13.      count++;
  14.     }
  15.    else
  16.    {
  17.     val=0;
  18.     while((count < W*H) && ((abs(((int)*(++old)) - ((int)*(++nouv)))/4)==0))
  19.     {
  20.      cpt++;
  21.      count++;
  22.     }
  23.    }
  24.    if(cpt>1)
  25.    {
  26.     while(cpt>0x7F)
  27.     {
  28.      *dst++ = 0x80 + 0x7F;
  29.      *dst++ = val;
  30.      cpt -= 0x7f;
  31.     }
  32.     *dst++=0x80+cpt;
  33.     *dst++=val;
  34.    }
  35.    else
  36.    {
  37.     while(cpt--)*dst++=val;
  38.    }
  39. }


 
Merci d'avance pour votre aide.


Message édité par jacpapac le 11-04-2005 à 22:15:16
Reply

Marsh Posté le 11-04-2005 à 22:14:12   

Reply

Marsh Posté le 11-04-2005 à 22:52:12    

Code :
  1. while(cpt--)*dst++=val;


J'ai pas regarde ton code mais je te donne juste un conseil en passant : arrete de vouloir faire 15 trucs en une ligne.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed