.\" .\" SMPEG - SDL MPEG Player Library .\" Copyright (C) 1999 Loki Entertainment Software .\" .\" This library is free software; you can redistribute it and/or .\" modify it under the terms of the GNU Library General Public .\" License as published by the Free Software Foundation; either .\" version 2 of the License, or (at your option) any later version. .\" .\" This library is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU .\" Library General Public License for more details. .\" .\" You should have received a copy of the GNU Library General Public .\" License along with this library; if not, write to the Free .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. .\" .Dd December 23, 2002 .Dt SMPEG 3 .Os .Sh NAME .Nm smpeg .Nd MPEG-1 audio/video playback library .Sh SYNOPSIS .Bd -literal #include .Sh DESCRIPTION The .Nm library provides audio/video playback of MPEG-1 data. .Sh INITIALIZATION .nr nS 1 .Ft "SMPEG *" .Fn SMPEG_new "const char *file" "SMPEG_Info *info" "int sdl_audio" .Pp .Ft "SMPEG *" .Fn SMPEG_new_descr "int fd" "SMPEG_Info *info" "int sdl_audio" .Pp .Ft "SMPEG *" .Fn SMPEG_new_data "void *data" "SMPEG_Info *info" "int sdl_audio" .Pp .Ft "void" .Fn SMPEG_getinfo "SMPEG *mpeg" "SMPEG_Info *info" .Pp .Ft "void" .Fn SMPEG_enableaudio "SMPEG *mpeg" "int enable" .Pp .Ft "void" .Fn SMPEG_enablevideo "SMPEG *mpeg" "int enable" .Pp .Ft "void" .Fn SMPEG_delete "SMPEG *mpeg" .Pp .Ft "char *" .Fn SMPEG_error "SMPEG *mpeg" .nr nS 0 .Pp The .Fn SMPEG_new , .Fn SMPEG_new_descr , .Fn SMPEG_new_data and .Fn SMPEG_new_rwops functions read MPEG data from a file, a file descriptor, memory or a .Ft SDL_Rwops structure, respectively. A newly allocated .Ft SMPEG object is returned. If .Fa sdl_audio is non-zero, the SDL audio subsystem is used to play audio. If .Fa info is not NULL, it is filled with the following information: .Bd -literal typedef struct _SMPEG_Info { int has_audio, has_video; /* Available data */ int width, height; /* Video geometry */ int current_frame; /* Video frame# */ double current_fps; /* Frames/second */ char audio_string[80]; int audio_current_frame; /* Audio playback status */ Uint32 current_offset; /* Position in video */ Uint32 total_size; /* Video size */ double current_time; double total_time; } SMPEG_Info; .Ed .Pp The .Fn SMPEG_getinfo function returns information about .Fa mpeg in .Fa info . .Pp The .Fn SMPEG_enableaudio and .Fn SMPEG_enablevideo functions toggle audio and video playback respectively. .Pp The .Fn SMPEG_delete function frees resources allocated by .Fa mpeg . The .Fn SMPEG_error function returns an error string if a fatal error occured, NULL otherwise. .Sh PLAYBACK .nr nS 1 .Ft SMPEGstatus .Fn SMPEG_status "SMPEG *mpeg" .Pp .Ft void .Fn SMPEG_setvolume "SMPEG *mpeg" "int volume" .Pp .Ft void .Fn SMPEG_setdisplay "SMPEG *mpeg" "SDL_Surface *dst" "SDL_mutex *surfLock" \ "SMPEG_DisplayCallback callback" .Pp .Ft void .Fn SMPEG_loop "SMPEG *mpeg" "int repeat" .Pp .Ft void .Fn SMPEG_scaleXY "SMPEG *mpeg" "int width" "int height" .Pp .Ft void .Fn SMPEG_scale "SMPEG *mpeg" "int scale" .Pp .Ft void .Fn SMPEG_move "SMPEG *mpeg" "int x" "int y" .Pp .Ft void .Fn SMPEG_setdisplayregion "SMPEG *mpeg" "int x" "int y" "int w" "int h" .Pp .Ft void .Fn SMPEG_play "SMPEG *mpeg" .Pp .Ft void .Fn SMPEG_pause "SMPEG *mpeg" .Pp .Ft void .Fn SMPEG_stop "SMPEG *mpeg" .Pp .Ft void .Fn SMPEG_rewind "SMPEG *mpeg" .Pp .Ft void .Fn SMPEG_seek "SMPEG *mpeg" "int nbytes" .Pp .Ft void .Fn SMPEG_skip "SMPEG *mpeg" "float seconds" .Pp .Ft void .Fn SMPEG_renderFrame "SMPEG *mpeg" "int framenum" .Pp .Ft void .Fn SMPEG_renderFinal "SMPEG *mpeg" "SDL_Surface *dst" "int x" "int y" .nr nS 0 .Pp The .Fn SMPEG_status function returns playback status: .Bd -literal typedef enum { SMPEG_ERROR = -1, SMPEG_STOPPED, SMPEG_PLAYING } SMPEGstatus; .Ed .Pp The .Fn SMPEG_setvolume function sets the audio volume of .Fa mpeg , in the in the range 0-100. The .Fn SMPEG_setdisplay function sets the destination surface for MPEG video playback to .Fa dst . The .Fa surfLock mutex, if not NULL, will be used to serialize access to .Fa dst . The .Fa callback function is called when an area of .Fa dst needs to be updated, its prototype matches .Xr SDL_UpdateRect 3 . .Pp The .Fn SMPEG_loop function causes the video to loop. .Pp The .Fn SMPEG_scaleXY and .Fn SMPEG_scale functions scale the pixel display to .Fa width by .Fa height pixels or .Fa scale % respectively. The .Fn SMPEG_move function moves the video display area within .Fa dst . The .Fn SMPEG_setdisplayregion function selects the region of the video to be shown. .Pp The .Fn SMPEG_play function plays .Fa mpeg . .Fn SMPEG_pause pauses the playback. .Fn SMPEG_stop stops the playback. .Fn SMPEG_rewind rewinds the play position to the beginning of the MPEG data. .Fn SMPEG_seek seeks .Fa bytes in the MPEG stream. The .Fn SMPEG_skip function skips .Fa seconds in the MPEG stream. .Pp The .Fn SMPEG_renderFrame renders the frame .Fa framenum , at the current video position, which may be set using .Fn SMPEG_setdisplay and .Fn SMPEG_move . The .Fn SMPEG_renderFinal function renders the last frame of the MPEG video at coordinates .Fa x and .Fa y of .Fa dst surface. .Sh VIDEO FILTERING .nr nS 1 .Ft "SMPEG_Filter *" .Fn SMPEG_Filter "SMPEG *mpeg" "SMPEG_Filter *filter" .nr nS 0 .Pp The .Fn SMPEG_Filter function selects a video filter. .Sh AUDIO PLAYBACK .nr nS 1 .Ft int .Fn SMPEG_playAudio "SMPEG *mpeg" "Uint8 *stream" "int len" .Pp .Ft void .Fn SMPEG_playAudioSDL "void *mpeg" "Uint8 *stream" "int len" .Pp .Ft int .Fn SMPEG_wantedSpec "SMPEG *mpeg" "SDL_AudioSpec *wanted" .Pp .Ft void .Fn SMPEG_actualSpec "SMPEG *mpeg" "SDL_AudioSpec *spec" .nr nS 0 .Pp .Fn SMPEG_playAudio is the exported callback function for audio playback. .Fa stream is the buffer, and .Fa len is the amount of data to fill. The function should return the amount of bytes that were actually written, this will be the amount requested unless the MPEG audio playback is done. .Fn SMPEG_playAudioSDL is a wrapper for .Fn SMPEG_playAudio that can be passed to SDL and SDL_mixer. .Pp The .Fn SMPEG_wantedSpec function returns the best audio spec in .Fa wanted for the MPEG audio stream. .Fn SMPEG_actualSpec informs .Nm of the actual SDL audio spec used for sound playback. .Sh SEE ALSO .Xr plaympeg 1 , .Xr SDL_Init 3 , .Xr SDL_Init_SubSystem 3 .Sh HISTORY The .Nm library was Loki Software's first Open Source project. It is based on UC Berkeley's mpeg_play MPEG decoder, and SPLAY, a MPEG audio decoder created by Woo-jae Jung. .Sh AUTHORS The .Nm library was written by Karl Robillard and Sam Lantinga, Loki Software Inc. Streaming MPEG support was contributed by Vivien Chappelier.