#include <stdio.h>
#include <ogg/ogg.h>
#include <kate/kate.h>
#include "common.h"
#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;
cairo_surface_t *cs;
tiger_renderer *tr;
kate_float render_time=(kate_float)0;
kate_float end_time=(kate_float)0;
set_binary_file(stdin);
cs=cairo_image_surface_create(CAIRO_FORMAT_ARGB32,640,480);
ogg_sync_init(&oy);
kate_high_decode_init(&k);
tiger_renderer_create(&tr);
tiger_renderer_set_cairo_surface(tr,cs);
tiger_renderer_set_surface_clear_color(tr,1,0,0,0,0);
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 (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);
tiger_renderer_destroy(tr);
cairo_surface_destroy(cs);
ogg_stream_clear(&os);
ogg_sync_clear(&oy);
kate_high_decode_clear(&k);
return 0;
}