Bonjour à tous,
Je n'ai pas trouvé de réponse en cherchant sur le net, alors je me permet de poster ici.
J'ai développé une librairie statique contenant des fonctions d'encodage/decodage.
Ces fonctions prennent en paramètre un tableau à initialiser.
Quand j'appelle ces fonctions directement dans ma librairie, aucun souci, mes tableaux sont correctement initialisés.
En revanche, dès que j'y fait appel depuis un programme externe, il n'y a plus moyen d'avoir des valeurs correctes...
Il s'agit de fonctions d'encodage/decodage G711 loi A, loi µ:
J'ai effectué les tests suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 void SetEncodingMap(int law, unsigned char *array, int size){ int i; if(size == SIZE_ENCODING_MAP){ if(law == ALAW){ for(i = SHRT_MIN; i <= SHRT_MAX; i++){ array[(i & 0xffff)] = EncodeAlaw(i); } }else{ for(i = SHRT_MIN; i <= SHRT_MAX; i++){ array[(i & 0xffff)] = EncodeUlaw(i); } } } } void SetDecodingMap(int law, short *array, int size){ int i; if(size == SIZE_DECODING_MAP){ if(law == ALAW){ for(i = 0; i < UCHAR_MAX; i++){ array[i] = DecodeAlaw(i); } }else{ for(i = 0; i < UCHAR_MAX; i++){ array[i] = DecodeUlaw(i); } } } }
- Recompilation avec/sans flags d'optimisation de g++ (-O2, et -O3)
- Ajout du mot-clé volatile sur les tableaux
- Appels aux fonctions d'encodage/decodage (EncodeA/Ulaw et DecodeA/Ulaw) depuis un programme externe pour confirmer leur bon fonctionnement (OK)
Mais je n'ai toujours aucune piste pour résoudre ce problème...
Merci d'avance
Partager