Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 89de7b48d4fd156f0af7b4735abd1453 > files > 6

libtiger-doc-0.3.4-1.fc14.noarch.rpm

/*
  */

#include <stdio.h>
#include <stdlib.h>
#include <ogg/ogg.h>
#include <kate/kate.h>
#include "common.h"

/* All the libtiger API is available from the main tiger header file: */

#include <tiger/tiger.h>

#define FPS ((kate_float)25.0)

static void step_render(tiger_renderer *tr,kate_float *t,kate_float t1)
{
  for (;*t<=t1;*t+=(kate_float)1.0/FPS) {
    tiger_renderer_update(tr,*t,1);
    if (tiger_renderer_is_dirty(tr)) {
      tiger_renderer_render(tr);
    }
  }
}

int main()
{
  ogg_sync_state oy;
  ogg_stream_state os;
  int init=0;
  ogg_packet op;
  kate_state k;
  const kate_event *ev;
  kate_packet kp;
  unsigned char *image;
  tiger_renderer *tr;
  kate_float render_time=(kate_float)0;
  kate_float end_time=(kate_float)0;

  set_binary_file(stdin);

  /* create a buffer to draw to */
  image=(unsigned char*)malloc(640*480*4);

  /* we initialize ogg, kate, and tiger */
  ogg_sync_init(&oy);
  kate_high_decode_init(&k);
  tiger_renderer_create(&tr);
  tiger_renderer_set_buffer(tr,image,640,480,640*4,0);
  tiger_renderer_set_surface_clear_color(tr,1,0,0,0,0);

  /*
    We then read packets and feed them to the libkate high level API. When
    kate_high_decode_packetin returns a positive number, this signals the
    end of the stream.
    */
  while (1) {
    if (get_packet(&oy,&os,&init,&op)) break;
    kate_packet_wrap(&kp,op.bytes,op.packet);
    if (kate_high_decode_packetin(&k,&kp,&ev)>0) break;
    /* if the event is non NULL, we have an event */
    if (ev) {
      step_render(tr,&render_time,ev->start_time);
      if (ev->end_time>end_time) end_time=ev->end_time;
      tiger_renderer_add_event(tr,k.ki,ev);
    }
  }
  step_render(tr,&render_time,end_time);

  /* That's it, we can now cleanup */
  tiger_renderer_destroy(tr);
  free(image);

  ogg_stream_clear(&os);
  ogg_sync_clear(&oy);

  kate_high_decode_clear(&k);

  return 0;
}