Provided by: vdmfec_1.0-2build1_amd64 bug

NAME

       fec_new, fec_encode, fec_encode, fec_free — An erasure code in GF(2^m)

SYNOPSIS

       #include <fec.h>

       void *
       fec_new(int k, int n);

       void
       fec_encode(void *code, void *data[], void *dst, int i, int sz);

       int
       fec_decode(void *code, void *data[], int i[], int sz);

       void *
       fec_free(void *code);

DESCRIPTION

       This  library  implements a simple (n,k) erasure code based on Vandermonde matrices.  The encoder takes k
       packets of size sz each, and is able to produce up to n different encoded packets,  numbered  from  0  to
       n-1, such that any subset of k of them permits reconstruction of the original data.

       The  data  structures  necessary  for the encoding/decoding must first be created using calling fec_new()
       with the desired parameters. The code descriptor returned  by  the  function  must  be  passed  to  other
       functions, and destroyed calling fec_free()

       Allowed  values  for  k  and n depend on a compile-time value of GF_BITS and must be k <= n <= 2^GF_BITS.
       Best performance is achieved with GF_BITS=8, although the code supports also GF_BITS=16.

       Encoding is done by calling fec_encode() and passing it pointers to the code descriptor, the  source  and
       destination data packets, the index of the packet to be produced, and the size of the packet.

       fec_decode()  with  pointers to the code, received packets, indexes of received packets, and packet size.
       Decoding is done in place, possibly shuffling the arrays passed as parameters.  Decoding is deterministic
       as long as the received packets are different. The decoding procedure does some limited testing  on  this
       and returns if parameters are invalid.

EXAMPLE

       #include <fec.h>

       /*
        * example of sender code
        */
       void *code ;
       int n, k ;

       void *src[] ;
       void *pkt ;

       code = new_code (k, n );

       for (i = 0 ; i < k ; i++ )
           src[i] = .. pointer to i-th source packet ..
       for (each packet to transmit) {
          i = ... index of the packet ;
          fec_encode(code, src, pkt, i, size) ;
          .. use packet in pkt
       }
       fec_free(code) ;

       /*
        * example of receiver code
        */
       void *code ;
       int n, k ;

       void *data[] ;
       int *ix[] ;

       code = new_code (k, n );

       for (i = 0 ; i < k ; i++ ) {
           ... receive a new packet ...
           data[i] = .. pointer to i-th source packet ..
           ix[i] = .. index of i-th source packet ..
       }
       fec_decode(code, data, ix, size) ;
       /*
        * now data[] has pointers to the source packets
        */
       Please direct bug reports to luigi@iet.unipi.it .

Debian                                            July 15, 1998                                           FEC(3)