Beispiel #1
0
static void
gst_rsvg_dec_init (GstRsvgDec * rsvg)
{
  GstVideoDecoder *decoder = GST_VIDEO_DECODER (rsvg);
  gst_video_decoder_set_packetized (decoder, FALSE);
  dec_reset (rsvg);
}
Beispiel #2
0
static gboolean
gst_rsvg_dec_reset (GstVideoDecoder * decoder, gboolean hard)
{
  GstRsvgDec *dec = GST_RSVG_DEC (decoder);

  dec_reset (dec);

  return TRUE;
}
Beispiel #3
0
void decode (FILE *fin, int size, FILE *fout)
{
  Decoder *dec = dec_new ();
  List *word, *entry;
  unsigned int code;
  uchar chr;

  chr = fgetc (fin);
  fputc (chr, fout);

  word = list_new (chr);
  for (; size > 1; size--) {
    chr = fgetc (fin);
    if (dec->nbits > MAX_BITS) {
      dec = dec_reset (dec);
      list_destroy (word);
      word = list_new (chr);
      fputc (chr, fout);
    } else {
      /* Se agrega el nuevo caracter al buffer. */
      dec->bitbuffer.buffer  = (dec->bitbuffer.buffer << 8) | chr;
      dec->bitbuffer.length += 8;
      
      while (dec->bitbuffer.length >= dec->nbits) {
	dec->bitbuffer.length -= dec->nbits;
	code = dec->bitbuffer.buffer >> dec->bitbuffer.length;
	dec->bitbuffer.buffer &= (1 << dec->bitbuffer.length) - 1;

	if (code < dec->charbuffer.nelem) { /* El código está en el diccionario. */
	  entry = dec->charbuffer.buffer[code];
	  fputl (entry, fout);

	  /* Agrega word + entry[0] al diccionario. */
	  word = list_prepend (word, entry->data);
	  dec_add_word (dec, word);

	  list_destroy (word);
	  word = NULL;

	  for (; entry != NULL; entry = entry->next)
	    word = list_prepend (word, entry->data);
	} else {
	  /* Agrega word + word[0] al diccionario. */
	  word = list_prepend (word, list_last (word));
	  dec_add_word (dec, word);

	  fputl (dec->charbuffer.buffer[dec->charbuffer.nelem-1], fout);
	}
      }
    }
  }

  list_destroy (word);
  dec_destroy  (dec);
}