#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#include <signal.h>
#include <memory.h>
#include <SDL.h>
#include "Buzz_inc.h"
#include "macros.h"
#include "options.h"
#include "utils.h"
#include "logging.h"
#include "av.h"
Go to the source code of this file.
Data Structures | |
| struct | fade_information |
Defines | |
| #define | ASSIGN |
| #define | KEYBUF_SIZE 256 |
| #define | MAX_X 320 |
| #define | MAX_Y 200 |
| #define | TYPE (uint32_t *) |
| #define | TYPE (uint8_t *) |
| #define | TYPE (uint16_t *) |
| #define | TYPE (uint8_t *) |
Functions | |
| static void | alloc_dirty_tree (void) |
| char | AnimSoundCheck (void) |
| Check if animation sound playback is in progress. | |
| static void | audio_callback (void *userdata, Uint8 *stream, int len) |
| void | av_block (void) |
| Block until an SDL event comes in. | |
| void | av_need_update (SDL_Rect *r) |
| Notify graphic subsystem that rectangle has to be redrawn. | |
| void | av_need_update_xy (int x1, int y1, int x2, int y2) |
| Notify graphic subsystem that rectangle has to be redrawn. | |
| static void | av_process_event (SDL_Event *evp) |
| void | av_set_fading (int type, int from, int to, int steps, int preserve) |
| Set up screen fade effect. | |
| void | av_setup (void) |
| Setup SDL audio, video and window subsystems. | |
| void | av_silence (int channel) |
| void | av_step (void) |
| void | av_sync (void) |
| int | bioskey (int peek) |
| static void | fill_rect_list (SDL_Rect *arr, int *len, int x, int y, int w, int h, int idx, int level) |
| static int | get_dirty_rect_list () |
| static int | intersect_area (SDL_Rect *first, SDL_Rect *second) |
| compute area of intersection of rectangles | |
| int | IsChannelMute (int channel) |
| LOG_DEFAULT_CATEGORY (sdl) | |
| void | MuteChannel (int channel, int mute) |
| void | NUpdateVoice (void) |
| void | play (struct audio_chunk *new_chunk, int channel) |
| static SDL_Surface * | SDL_Scale2x (SDL_Surface *src, SDL_Surface *dst) |
| Uint32 | sdl_timer_callback (Uint32 interval, void *param) |
| static void | transform_palette (void) |
| static void | update_rect (SDL_Rect *fill, int x, int y, int w, int h, int idx, int level) |
| void | UpdateAudio (void) |
Variables | |
| static SDL_AudioSpec | audio_desired |
| int | av_mouse_cur_x |
| int | av_mouse_cur_y |
| int | av_mouse_pressed_cur |
| int | av_mouse_pressed_latched |
| int | av_mouse_pressed_x |
| int | av_mouse_pressed_y |
| static struct audio_channel | Channels [AV_NUM_CHANNELS] |
| static SDL_Rect * | dirty_rect_list |
| static unsigned char * | dirty_tree |
| static unsigned | dirty_tree_length |
| SDL_Surface * | display |
| static int | do_fading |
| static struct fade_information | fade_info |
| static int | have_audio |
| static int | keybuf [KEYBUF_SIZE] |
| static int | keybuf_in_idx |
| static int | keybuf_out_idx |
| SDL_Overlay * | news_overlay |
| SDL_Rect | news_rect |
| unsigned char | pal [3 *256] |
| RGB color palette. | |
| static SDL_Color | pal_colors [256] |
| unsigned char * | screen |
| int | screen_dirty |
| Indicates that screen redraw is required. | |
| static SDL_Surface * | screen_surf |
| static SDL_Surface * | screen_surf2x |
| SDL_Overlay * | video_overlay |
| SDL_Rect | video_rect |
| #define ASSIGN |
Value:
do { \ *(TYPE (to)) = *(TYPE from); \ *(TYPE (to+bpp)) = *(TYPE from); \ *(TYPE (to+dst->pitch)) = *(TYPE from); \ *(TYPE (to+dst->pitch+bpp)) = *(TYPE from); \ } while (0)
Referenced by SDL_Scale2x().
| #define KEYBUF_SIZE 256 |
| #define TYPE (uint32_t *) |
| #define TYPE (uint8_t *) |
| #define TYPE (uint16_t *) |
| #define TYPE (uint8_t *) |
Definition at line 73 of file sdl.c.
References AV_DTREE_DEPTH, dirty_rect_list, dirty_tree, dirty_tree_length, and xcalloc().
Referenced by av_setup().
| char AnimSoundCheck | ( | void | ) |
Check if animation sound playback is in progress.
Currently AV_SOUND_CHANNEL is used only for animation sounds.
Definition at line 147 of file sdl.c.
References AV_SOUND_CHANNEL, av_step(), and Channels.
Definition at line 93 of file sdl.c.
References AV_NUM_CHANNELS, Channels, audio_channel::chunk, audio_channel::chunk_tailp, audio_chunk::data, audio_chunk::loop, min, audio_channel::mute, audio_chunk::next, audio_channel::offset, audio_chunk::size, and audio_channel::volume.
Referenced by av_setup(), and main().
Block until an SDL event comes in.
We have a 30ms timer going, so that is the maximum wait time.
Definition at line 510 of file sdl.c.
References av_process_event(), and av_step().
| void av_need_update | ( | SDL_Rect * | r | ) |
Notify graphic subsystem that rectangle has to be redrawn.
| r | rectangle coordinates |
Definition at line 925 of file sdl.c.
References MAX_X, MAX_Y, screen_dirty, and update_rect().
| void av_need_update_xy | ( | int | x1, | |
| int | y1, | |||
| int | x2, | |||
| int | y2 | |||
| ) |
Notify graphic subsystem that rectangle has to be redrawn.
| x1 | x screen coord. of upper left corner | |
| y1 | y screen coord. of upper left corner | |
| x2 | x screen coord. of bottom right corner | |
| y2 | y screen coord. of bottom right corner |
Definition at line 939 of file sdl.c.
References av_need_update().
| static void av_process_event | ( | SDL_Event * | evp | ) | [static] |
Definition at line 390 of file sdl.c.
References av_mouse_cur_x, av_mouse_cur_y, av_mouse_pressed_cur, av_mouse_pressed_latched, av_mouse_pressed_x, av_mouse_pressed_y, c, DEBUG2, key, keybuf, keybuf_in_idx, KEYBUF_SIZE, and TRACE4.
Referenced by av_block(), and av_step().
| void av_set_fading | ( | int | type, | |
| int | from, | |||
| int | to, | |||
| int | steps, | |||
| int | preserve | |||
| ) |
Set up screen fade effect.
Fading applies only to a range of palette color indexes. Rest of colors in the palette can be preserved or forced to black.
| type | AV_FADE_IN or AV_FADE_OUT | |
| from | index of first affected color | |
| to | index of last affected color | |
| steps | how many color change steps to perform | |
| preserve | whether preserve rest of palette colors or not |
Definition at line 784 of file sdl.c.
References AV_FADE_IN, av_need_update(), av_sync(), do_fading, fade_information::end, fade_info, fade_information::force_black, fade_information::from, fade_information::inc, MAX_X, MAX_Y, fade_information::step, fade_information::steps, and fade_information::to.
Setup SDL audio, video and window subsystems.
Definition at line 232 of file sdl.c.
References alloc_dirty_tree(), audio_callback(), audio_desired, AV_MAX_VOLUME, AV_NUM_CHANNELS, Channels, audio_channel::chunk, audio_channel::chunk_tailp, CRITICAL2, display, do_fading, ERROR2, fade_info, FT_IMAGE, have_audio, INFO1, INFO2, locate_file(), MAX_X, MAX_Y, audio_channel::mute, news_overlay, NOTICE1, audio_channel::offset, options, PACKAGE_NAME, PACKAGE_STRING, PACKAGE_VERSION, screen, screen_surf, screen_surf2x, sdl_timer_callback(), fade_information::step, fade_information::steps, video_overlay, audio_channel::volume, game_options::want_audio, game_options::want_fullscreen, and xcalloc().
| void av_silence | ( | int | channel | ) |
Definition at line 195 of file sdl.c.
References AV_ALL_CHANNELS, AV_NUM_CHANNELS, av_silence(), Channels, audio_channel::chunk, audio_channel::chunk_tailp, and audio_channel::offset.
Definition at line 703 of file sdl.c.
References av_need_update(), dirty_rect_list, display, get_dirty_rect_list(), MAX_X, MAX_Y, news_overlay, news_rect, pal_colors, screen_dirty, screen_surf, screen_surf2x, SDL_Scale2x(), TRACE4, transform_palette(), video_overlay, and video_rect.
| int bioskey | ( | int | peek | ) |
Definition at line 522 of file sdl.c.
References av_step(), c, keybuf, keybuf_in_idx, keybuf_out_idx, and KEYBUF_SIZE.
| static void fill_rect_list | ( | SDL_Rect * | arr, | |
| int * | len, | |||
| int | x, | |||
| int | y, | |||
| int | w, | |||
| int | h, | |||
| int | idx, | |||
| int | level | |||
| ) | [static] |
Definition at line 883 of file sdl.c.
References AV_DTREE_DEPTH, dirty_tree, and dirty_tree_length.
Referenced by get_dirty_rect_list().
| static int get_dirty_rect_list | ( | void | ) | [static] |
Definition at line 912 of file sdl.c.
References dirty_rect_list, dirty_tree, dirty_tree_length, fill_rect_list(), MAX_X, and MAX_Y.
Referenced by av_sync().
| static int intersect_area | ( | SDL_Rect * | first, | |
| SDL_Rect * | second | |||
| ) | [inline, static] |
compute area of intersection of rectangles
Definition at line 819 of file sdl.c.
References min.
Referenced by update_rect().
| int IsChannelMute | ( | int | channel | ) |
Definition at line 157 of file sdl.c.
References AV_NUM_CHANNELS, Channels, have_audio, and audio_channel::mute.
| LOG_DEFAULT_CATEGORY | ( | sdl | ) |
| void MuteChannel | ( | int | channel, | |
| int | mute | |||
| ) |
Definition at line 750 of file sdl.c.
References AV_ALL_CHANNELS, AV_NUM_CHANNELS, Channels, audio_channel::mute, and MuteChannel().
| void play | ( | struct audio_chunk * | new_chunk, | |
| int | channel | |||
| ) |
Definition at line 166 of file sdl.c.
References AV_NUM_CHANNELS, av_silence(), Channels, audio_channel::chunk, audio_channel::chunk_tailp, DEBUG1, have_audio, and audio_chunk::next.
| static SDL_Surface* SDL_Scale2x | ( | SDL_Surface * | src, | |
| SDL_Surface * | dst | |||
| ) | [static] |
| Uint32 sdl_timer_callback | ( | Uint32 | interval, | |
| void * | param | |||
| ) |
Definition at line 655 of file sdl.c.
References ARRAY_LENGTH, fade_info, fade_information::force_black, fade_information::from, pal, pal_colors, fade_information::step, fade_information::steps, steps, and fade_information::to.
Referenced by av_sync().
| static void update_rect | ( | SDL_Rect * | fill, | |
| int | x, | |||
| int | y, | |||
| int | w, | |||
| int | h, | |||
| int | idx, | |||
| int | level | |||
| ) | [static] |
Definition at line 849 of file sdl.c.
References AV_DTREE_DEPTH, AV_DTREE_FILL_RATIO, dirty_tree, dirty_tree_length, and intersect_area().
Referenced by av_need_update().
SDL_AudioSpec audio_desired [static] |
| int av_mouse_cur_x |
| int av_mouse_cur_y |
struct audio_channel Channels[AV_NUM_CHANNELS] [static] |
Definition at line 43 of file sdl.c.
Referenced by AnimSoundCheck(), audio_callback(), av_setup(), av_silence(), IsChannelMute(), MuteChannel(), and play().
SDL_Rect* dirty_rect_list [static] |
Definition at line 70 of file sdl.c.
Referenced by alloc_dirty_tree(), av_sync(), and get_dirty_rect_list().
unsigned char* dirty_tree [static] |
Definition at line 68 of file sdl.c.
Referenced by alloc_dirty_tree(), fill_rect_list(), get_dirty_rect_list(), and update_rect().
unsigned dirty_tree_length [static] |
Definition at line 69 of file sdl.c.
Referenced by alloc_dirty_tree(), fill_rect_list(), get_dirty_rect_list(), and update_rect().
| SDL_Surface* display |
int do_fading [static] |
struct fade_information fade_info [static] |
Referenced by av_set_fading(), av_setup(), and transform_palette().
int have_audio [static] |
int keybuf[KEYBUF_SIZE] [static] |
int keybuf_in_idx [static] |
int keybuf_out_idx [static] |
| SDL_Overlay* news_overlay |
SDL_Color pal_colors[256] [static] |
| int screen_dirty |
SDL_Surface* screen_surf [static] |
SDL_Surface* screen_surf2x [static] |
| SDL_Overlay* video_overlay |
| SDL_Rect video_rect |
1.5.3