libtiger 0.3.4

- Main Page
- Related Pages
- Modules
- Data Structures
- Files
- Examples

simple.c
/*
*/
#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;
}