Force feeding involves synchronously:  
More...
Force feeding involves synchronously: 
This process is illustrated in the following diagram:
 The following example code generates a stream of ten packets, each containing a single byte ('A', 'B', ... , 'J'):
 
#include <stdlib.h> 
 
static long serialno;
static ogg_int64_t granulepos = 0;
static ogg_int64_t packetno = 0;
 
int
main (int argc, char * argv[])
{
  char * progname, * filename = NULL;
  ogg_packet op;
  unsigned char buf[1];
  long n;
 
  progname = argv[0];
  if (argc > 1) filename = argv[1];
 
  if (filename) {
  } else {
  }
 
  if (oggz == NULL) {
    fprintf (stderr, "%s: Error creating oggz\n", progname);
    exit (1);
  }
 
 
  for (packetno = 0; packetno < 10; packetno++) {
 
    
 
    buf[0] = 'A' + (int)packetno;
 
    op.packet = buf;
    op.bytes = 1;
    op.granulepos = granulepos;
    op.packetno = packetno;
    
    if (packetno == 0) op.b_o_s = 1;
    else op.b_o_s = 0;
    
    if (packetno == 9) op.e_o_s = 1;
    else op.e_o_s = 0;
    
    
 
    
    granulepos += 100;
 
    
 
  }
 
 
  exit (0);
}
 
OGGZ * oggz_open(const char *filename, int flags)
Open an Ogg file, creating an OGGZ handle for it.
int oggz_write_feed(OGGZ *oggz, ogg_packet *op, long serialno, int flush, int *guard)
Add a packet to oggz's packet queue.
long oggz_serialno_new(OGGZ *oggz)
Request a new serialno, as required for a new stream, ensuring the serialno is not yet used for any o...