89
L’implementation en langage C de l’algorithme SVBR
ANNEXE A
L’IMPLEMENTATION EN LANGAGE C DE L’ALGORITHME
SVBR
/* lissage.c, procédure de contrôle de débit pour Mpeg1 et mpeg2 qui garantit
la conformité du débit de sortie a un modèle du seau perce (leaky bucket)*/
/* Droits Réservés a Maher Hamdi, James Roberts et Pierre Rolin (France Telecom)
Tel: (33) 99 12 70 23
Fax: (33) 99 12 70 30
Adresse: ENST de Bretagne, Département RSM
BP 78 35512 Cesson Sévigné Cedex */
/* Cette procédure (algorithme et implémentation) a été développée au sein
du département Réseaux et services Multimedia de l’ENST de Bretagne.
Cette procédure (algorithme et implémentation) est protégée par un dépôt
de Brevet. La description y est suffisamment générale pour protéger
l’algorithme indépendamment de l’implémentation (langage, système ...) */
/* Cette procédure peut être utilisée avec les logiciels de compression video
du domaine public ou autres. Le rôle de cette procédure est de contrôler
le débit a long terme et est donc compatible avec les autres algorithmes
de contrôle de débit a court termes comme par exemple le contrôle de débit
crête.*/
#include <stdio.h>
#include <math.h>
#include <stdio.h>
#include <math.h>
static int Q0; /* The reference mquant for a VBR coding */
static int Q; /* The GoP by GoP varying quantization parameter */
static double Lambda; /* The leak rate in bits/sec */
static double b; /* The bucket size of the LB(b,Lambda) in bits */
static double X; /* The bucket fulness updated at the end of each GOP */
static double R; /* The instantaneous SVBR bit rate computed on GoP
by GoP basis */
static double Alpha; /* for the non linear reaction functions */
/* Power function used for the non linear feedback of the buffer fulness */
double E1 (double x) { /* to be called with X/b as argument */
return pow(x,Alpha);
}
/* Power function used for the non linear feedback of the buffer fulness */