Video streaming addon
These functions are declared in the following header file. Link with allegro_video.
Currently we have an Ogg backend (Theora + Vorbis). See http://xiph.org/ for installation instructions, licensing information and supported video formats.
- ALLEGRO_EVENT_VIDEO_FRAME_SHOW - This event is sent when it is time to show a new frame. Once you receive this event, you can draw the current frame (as returned by al_get_video_frame). al_get_video_frame will continue returning the same frame until the next ALLEGRO_EVENT_VIDEO_FRAME_SHOW is sent.
- ALLEGRO_EVENT_VIDEO_FINISHED - This event is sent when the video is finished. Depending on the backend, it may be possible to seek to an earlier part of the video and set the video to play to resume playback.
typedef enum ALLEGRO_VIDEO_POSITION_TYPE ALLEGRO_VIDEO_POSITION_TYPE;
Used with al_get_video_position to specify which position to retrieve. If these get out of sync, audio and video may be out of sync in the display of the video.
ALLEGRO_VIDEO_POSITION_ACTUAL - The amount of time the video has been playing. If the video has audio then this value can be ahead of ALLEGRO_VIDEO_POSITION_VIDEO_DECODE when video decoding lags.
ALLEGRO_VIDEO_POSITION_VIDEO_DECODE - The amount of video that has been decoded. This may lag behind the "actual" and audio positions if decoding is slower than realtime.
ALLEGRO_VIDEO_POSITION_AUDIO_DECODE - The amount of audio that has been decoded. This may be the same as ALLEGRO_VIDEO_POSITION_ACTUAL if audio decode is driving the position, which is common to keep audio and video in sync.
Initializes the video addon.
Shut down the video addon. This is done automatically at program exit, but can be called any time the user wishes as well.
Returns the (compiled) version of the addon, in the same format as al_get_allegro_version.
ALLEGRO_VIDEO *al_open_video(char const *filename)
Reads a video file. This does not start streaming yet but reads the meta info so you can query e.g. the size or audio rate.
void al_close_video(ALLEGRO_VIDEO *video)
Closes the video and frees all allocated resources. The video pointer is invalid after the function returns.
void al_start_video(ALLEGRO_VIDEO *video, ALLEGRO_MIXER *mixer)
Starts streaming the video from the beginning.
void al_start_video_with_voice(ALLEGRO_VIDEO *video, ALLEGRO_VOICE *voice)
Like al_start_video but audio is routed to the provided voice.
ALLEGRO_EVENT_SOURCE *al_get_video_event_source(ALLEGRO_VIDEO *video)
Get an event source for the video. The possible events are described under ALLEGRO_VIDEO_EVENT_TYPE.
void al_set_video_playing(ALLEGRO_VIDEO *video, bool play)
Paused or resumes playback.
bool al_is_video_playing(ALLEGRO_VIDEO *video)
Returns true if the video is currently playing.
double al_get_video_audio_rate(ALLEGRO_VIDEO *video)
Returns the audio rate of the video, in Hz.
double al_get_video_fps(ALLEGRO_VIDEO *video)
Returns the speed of the video in frames per second. Often this will not be an integer value.
float al_get_video_scaled_width(ALLEGRO_VIDEO *video)
Returns the width with which the video frame should be drawn. Videos often do not use square pixels, so this will may return a value larger than the width of the frame bitmap.
See also: al_get_video_frame
float al_get_video_scaled_height(ALLEGRO_VIDEO *video)
Returns the height with which the video frame should be drawn. Videos often do not use square pixels, so this will may return a value larger than the height of the frame bitmap.
See also: al_get_video_frame
ALLEGRO_BITMAP *al_get_video_frame(ALLEGRO_VIDEO *video)
Returns the current video frame. The bitmap is owned by the video so do not attempt to free it. The bitmap will stay valid until the next call to al_get_video_frame.
Videos often do not use square pixels so the recommended way to draw a video frame would be using code like this:
float scale = 1.0; /* Adjust this to fit your target bitmap dimensions. */ ALLEGRO_BITMAP* frame = al_get_video_frame(video); float sw = al_get_bitmap_width(frame); float sh = al_get_bitmap_height(frame); float dw = scale * al_get_video_scaled_width(video); float dh = scale * al_get_video_scaled_height(video); al_draw_scaled_bitmap(frame, 0, 0, sw, sh, 0, 0, dw, dh, 0);
double al_get_video_position(ALLEGRO_VIDEO *video, ALLEGRO_VIDEO_POSITION_TYPE which)
Returns the current position of the video stream in seconds since the beginning. The parameter is one of the ALLEGRO_VIDEO_POSITION_TYPE constants.
bool al_seek_video(ALLEGRO_VIDEO *video, double pos_in_seconds)
Seek to a different position in the video. Currently only seeking to the beginning of the video is supported.