1 
2 typedef struct ALLEGRO_VIDEO_INTERFACE {
3    bool (*open_video)(ALLEGRO_VIDEO *video);
4    bool (*close_video)(ALLEGRO_VIDEO *video);
5    bool (*start_video)(ALLEGRO_VIDEO *video);
6    bool (*set_video_playing)(ALLEGRO_VIDEO *video);
7    bool (*seek_video)(ALLEGRO_VIDEO *video, double seek_to);
8    bool (*update_video)(ALLEGRO_VIDEO *video);
9 } ALLEGRO_VIDEO_INTERFACE;
10 
11 struct ALLEGRO_VIDEO {
12    ALLEGRO_VIDEO_INTERFACE *vtable;
13 
14    /* video */
15    ALLEGRO_BITMAP *current_frame;
16    double video_position;
17    double fps;
18    float scaled_width;
19    float scaled_height;
20 
21    /* audio */
22    ALLEGRO_MIXER *mixer;
23    ALLEGRO_VOICE *voice;
24    ALLEGRO_AUDIO_STREAM *audio;
25    double audio_position;
26    double audio_rate;
27 
28    /* general */
29    bool es_inited;
30    ALLEGRO_EVENT_SOURCE es;
31    ALLEGRO_PATH *filename;
32    bool playing;
33    double position;
34 
35    /* implementation specific */
36    void *data;
37 };
38 
39 ALLEGRO_VIDEO_INTERFACE *_al_video_ogv_vtable(void);
40 void _al_compute_scaled_dimensions(int frame_w, int frame_h, float aspect_ratio, float *scaled_w, float *scaled_h);
41