本文整理汇总了C++中SDL_RWread函数的典型用法代码示例。如果您正苦于以下问题:C++ SDL_RWread函数的具体用法?C++ SDL_RWread怎么用?C++ SDL_RWread使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SDL_RWread函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: _mm_RWopsReader_Get
static int _mm_RWopsReader_Get(MREADER* reader)
{
char buf;
if ( SDL_RWread(((MRWOPSREADER*)reader)->rw, &buf, 1, 1) != 1 ) return EOF;
else return (int)buf;
}
开发者ID:Jay-Jay-OPL,项目名称:ps2sdk-ports,代码行数:6,代码来源:mmio.c
示例2: ldat_create
/* Open an SDL_RWops for reading */
LDAT *ldat_open_rw (SDL_RWops * rw)
{
char header[LDAT_MAGIC_LEN];
LDAT *newldat;
LDAT_Block *newblock;
Uint16 i, itemcount;
Uint8 idlen;
newldat = ldat_create ();
newldat->data = rw;
/* Read header */
SDL_RWread (newldat->data, header, 1, LDAT_MAGIC_LEN);
if (strncmp (header, "LDAT", 4)) {
fprintf (stderr,"Error: this is not an LDAT archive !\n");
return NULL;
}
if (header[4] != LDAT_MAJOR) {
fprintf (stderr, "Error: Unsupported version (%d.%d) !\n", header[4],
header[5]);
fprintf (stderr, "Latest supported version is %d.%d\n", LDAT_MAJOR,
LDAT_MINOR);
return NULL;
}
/* Read catalog */
if(Luola_ReadLE16 (newldat->data,&itemcount) == -1) {
fprintf(stderr,"Error occured while reading itemcount!\n");
}
for (i = 0; i < itemcount; i++) {
newblock = malloc (sizeof (LDAT_Block));
memset (newblock, 0, sizeof (LDAT_Block));
if (SDL_RWread (newldat->data, &idlen, 1, 1) == -1) {
fprintf (stderr, "(%d) Error occured while reading idlen!\n", i);
return NULL;
}
newblock->ID = malloc (idlen + 1);
if (SDL_RWread (newldat->data, newblock->ID, 1, idlen) == -1) {
fprintf (stderr, "(%d) Error occured while reading ID string!\n", i);
return NULL;
}
newblock->ID[idlen] = '\0';
if (Luola_ReadLE16(newldat->data, &newblock->index) == -1) {
fprintf (stderr, "(%d) Error occured while reading index number!\n", i);
return NULL;
}
if (Luola_ReadLE32(newldat->data, &newblock->pos) == -1) {
fprintf (stderr, "(%d) Error occured while reading position!\n", i);
return NULL;
}
if (Luola_ReadLE32(newldat->data, &newblock->size) == -1) {
fprintf (stderr, "(%d) Error occured while reading size!\n", i);
return NULL;
}
if (newldat->catalog == NULL)
newldat->catalog = newblock;
else {
newblock->prev = newldat->catalog;
newldat->catalog->next = newblock;
newldat->catalog = newblock;
}
}
newldat->catalog_size = SDL_RWtell (newldat->data) - LDAT_HEADER_LEN;
/* Rewing catalog */
while (newldat->catalog->prev)
newldat->catalog = newldat->catalog->prev;
return newldat;
}
开发者ID:callaa,项目名称:luola,代码行数:68,代码来源:ldat.c
示例3: sdl_read_func
static size_t sdl_read_func(void *ptr, size_t size, size_t nmemb, void *datasource)
{
return SDL_RWread((SDL_RWops*)datasource, ptr, size, nmemb);
}
开发者ID:Jay-Jay-OPL,项目名称:ps2sdk-ports,代码行数:4,代码来源:music_ogg.c
示例4: ERROR
SDL_Surface *IMG_LoadPNM_RW(SDL_RWops *src)
{
SDL_Surface *surface = NULL;
int width, height;
int maxval, y, bpl;
Uint8 *row;
Uint8 *buf = NULL;
char *error = NULL;
Uint8 magic[2];
int ascii;
enum { PBM, PGM, PPM } kind;
#define ERROR(s) do { error = (s); goto done; } while(0)
if ( !src ) {
/* The error message has been set in SDL_RWFromFile */
return NULL;
}
SDL_RWread(src, magic, 2, 1);
kind = magic[1] - '1';
ascii = 1;
if(kind >= 3) {
ascii = 0;
kind -= 3;
}
width = ReadNumber(src);
height = ReadNumber(src);
if(width <= 0 || height <= 0)
ERROR("Unable to read image width and height");
if(kind != PBM) {
maxval = ReadNumber(src);
if(maxval <= 0 || maxval > 255)
ERROR("unsupported PNM format");
} else
maxval = 255; /* never scale PBMs */
/* binary PNM allows just a single character of whitespace after
the last parameter, and we've already consumed it */
if(kind == PPM) {
/* 24-bit surface in R,G,B byte order */
surface = SDL_AllocSurface(SDL_SWSURFACE, width, height, 24,
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
0x000000ff, 0x0000ff00, 0x00ff0000,
#else
0x00ff0000, 0x0000ff00, 0x000000ff,
#endif
0);
} else {
/* load PBM/PGM as 8-bit indexed images */
surface = SDL_AllocSurface(SDL_SWSURFACE, width, height, 8,
0, 0, 0, 0);
}
if ( surface == NULL )
ERROR("Out of memory");
bpl = width * surface->format->BytesPerPixel;
if(kind == PGM) {
SDL_Color *c = surface->format->palette->colors;
int i;
for(i = 0; i < 256; i++)
c[i].r = c[i].g = c[i].b = i;
surface->format->palette->ncolors = 256;
} else if(kind == PBM) {
/* for some reason PBM has 1=black, 0=white */
SDL_Color *c = surface->format->palette->colors;
c[0].r = c[0].g = c[0].b = 255;
c[1].r = c[1].g = c[1].b = 0;
surface->format->palette->ncolors = 2;
bpl = (width + 7) >> 3;
buf = malloc(bpl);
if(buf == NULL)
ERROR("Out of memory");
}
开发者ID:Jay-Jay-OPL,项目名称:ps2sdk-ports,代码行数:76,代码来源:IMG_pnm.c
示例5: SDL_RWread
size_t SDLRWops::read(void *ptr, size_t size, size_t num)
{
return SDL_RWread(rwops_, ptr, num, size);
}
开发者ID:weihuoya,项目名称:HelloSDL,代码行数:4,代码来源:sdlrwops.cpp
示例6: SDL_RWtell
NativeMidiSong *native_midi_loadsong_RW(SDL_RWops *rw)
{
NativeMidiSong *retval = NULL;
void *buf = NULL;
int len = 0;
CFDataRef data = NULL;
if (SDL_RWseek(rw, 0, RW_SEEK_END) < 0)
goto fail;
len = SDL_RWtell(rw);
if (len < 0)
goto fail;
if (SDL_RWseek(rw, 0, RW_SEEK_SET) < 0)
goto fail;
buf = malloc(len);
if (buf == NULL)
goto fail;
if (SDL_RWread(rw, buf, len, 1) != 1)
goto fail;
retval = malloc(sizeof(NativeMidiSong));
if (retval == NULL)
goto fail;
memset(retval, '\0', sizeof (*retval));
if (NewMusicPlayer(&retval->player) != noErr)
goto fail;
if (NewMusicSequence(&retval->sequence) != noErr)
goto fail;
data = CFDataCreate(NULL, (const UInt8 *) buf, len);
if (data == NULL)
goto fail;
free(buf);
buf = NULL;
#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 /* this is deprecated, but works back to 10.3 */
if (MusicSequenceLoadSMFDataWithFlags(retval->sequence, data, 0) != noErr)
goto fail;
#else /* not deprecated, but requires 10.5 or later */
if (MusicSequenceFileLoadData(retval->sequence, data, 0, 0) != noErr)
goto fail;
#endif
CFRelease(data);
data = NULL;
if (GetSequenceLength(retval->sequence, &retval->endTime) != noErr)
goto fail;
if (MusicPlayerSetSequence(retval->player, retval->sequence) != noErr)
goto fail;
return retval;
fail:
if (retval) {
if (retval->sequence)
DisposeMusicSequence(retval->sequence);
if (retval->player)
DisposeMusicPlayer(retval->player);
free(retval);
}
if (data)
CFRelease(data);
if (buf)
free(buf);
return NULL;
}
开发者ID:Ailick,项目名称:socoolpal,代码行数:76,代码来源:native_midi_macosx.c
示例7: loadSound
size_t THSoundArchive::getSoundDuration(size_t iIndex)
{
SDL_RWops *pFile = loadSound(iIndex);
if(!pFile)
return 0;
uint16_t iWaveAudioFormat = 0;
uint16_t iWaveChannelCount = 0;
uint32_t iWaveSampleRate = 0;
uint32_t iWaveByteRate = 0;
uint16_t iWaveBlockAlign = 0;
uint16_t iWaveBitsPerSample = 0;
uint32_t iWaveDataLength = 0;
// This is a very crude RIFF parser, but it does the job.
uint32_t iFourCC;
uint32_t iChunkLength;
for(;;)
{
if(SDL_RWread(pFile, &iFourCC, 4, 1) != 1)
break;
if(SDL_RWread(pFile, &iChunkLength, 4, 1) != 1)
break;
if(iFourCC == FOURCC('R','I','F','F') || iFourCC == FOURCC('L','I','S','T'))
{
if(iChunkLength >= 4)
{
if(SDL_RWread(pFile, &iFourCC, 4, 1) != 1)
break;
else
continue;
}
}
if(iFourCC == FOURCC('f','m','t',' ') && iChunkLength >= 16)
{
if(SDL_RWread(pFile, &iWaveAudioFormat, 2, 1) != 1)
break;
if(SDL_RWread(pFile, &iWaveChannelCount, 2, 1) != 1)
break;
if(SDL_RWread(pFile, &iWaveSampleRate, 4, 1) != 1)
break;
if(SDL_RWread(pFile, &iWaveByteRate, 4, 1) != 1)
break;
if(SDL_RWread(pFile, &iWaveBlockAlign, 2, 1) != 1)
break;
if(SDL_RWread(pFile, &iWaveBitsPerSample, 2, 1) != 1)
break;
iChunkLength -= 16;
}
//Finally:
if(iFourCC == FOURCC('d','a','t','a'))
{
iWaveDataLength = iChunkLength;
break;
}
if(SDL_RWseek(pFile, iChunkLength + (iChunkLength & 1), RW_SEEK_CUR) == -1) {
break;
}
}
SDL_RWclose(pFile);
if(iWaveAudioFormat != 1 || iWaveChannelCount == 0 || iWaveSampleRate == 0
|| iWaveDataLength == 0 || iWaveBitsPerSample == 0)
{
return 0;
}
#define mul64(a, b) (static_cast<uint64_t>(a) * static_cast<uint64_t>(b))
return static_cast<size_t>(mul64(iWaveDataLength, 8000) /
mul64(mul64(iWaveBitsPerSample, iWaveChannelCount), iWaveSampleRate));
#undef mul64
}
开发者ID:MarkL1961,项目名称:CorsixTH,代码行数:70,代码来源:th_sound.cpp
示例8: Sys_extError
void TR_Level::read_tr5_room(SDL_RWops * const src, tr5_room_t & room)
{
uint32_t room_data_size;
//uint32_t portal_offset;
uint32_t sector_data_offset;
uint32_t static_meshes_offset;
uint32_t layer_offset;
uint32_t vertices_offset;
uint32_t poly_offset;
uint32_t poly_offset2;
uint32_t vertices_size;
//uint32_t light_size;
SDL_RWops *newsrc = NULL;
uint32_t temp;
uint32_t i;
uint8_t *buffer;
if (read_bitu32(src) != 0x414C4558)
Sys_extError("read_tr5_room: 'XELA' not found");
room_data_size = read_bitu32(src);
buffer = new uint8_t[room_data_size];
if (SDL_RWread(src, buffer, 1, room_data_size) < room_data_size)
Sys_extError("read_tr5_room: room_data");
if ((newsrc = SDL_RWFromMem(buffer, room_data_size)) == NULL)
Sys_extError("read_tr5_room: SDL_RWFromMem");
room.intensity1 = 32767;
room.intensity2 = 32767;
room.light_mode = 0;
if (read_bitu32(newsrc) != 0xCDCDCDCD)
Sys_extWarn("read_tr5_room: seperator1 has wrong value");
/*portal_offset = */read_bit32(newsrc); // StartPortalOffset? // endSDOffset
sector_data_offset = read_bitu32(newsrc); // StartSDOffset
temp = read_bitu32(newsrc);
if ((temp != 0) && (temp != 0xCDCDCDCD))
Sys_extWarn("read_tr5_room: seperator2 has wrong value");
static_meshes_offset = read_bitu32(newsrc); // endPortalOffset
// static_meshes_offset or room_layer_offset
// read and change coordinate system
room.offset.x = (float)read_bit32(newsrc);
room.offset.y = read_bitu32(newsrc);
room.offset.z = (float)-read_bit32(newsrc);
room.y_bottom = (float)-read_bit32(newsrc);
room.y_top = (float)-read_bit32(newsrc);
room.num_zsectors = read_bitu16(newsrc);
room.num_xsectors = read_bitu16(newsrc);
room.light_colour.b = read_bitu8(newsrc) / 255.0f;
room.light_colour.g = read_bitu8(newsrc) / 255.0f;
room.light_colour.r = read_bitu8(newsrc) / 255.0f;
room.light_colour.a = read_bitu8(newsrc) / 255.0f;
room.num_lights = read_bitu16(newsrc);
if (room.num_lights > 512)
Sys_extWarn("read_tr5_room: num_lights > 512");
room.num_static_meshes = read_bitu16(newsrc);
if (room.num_static_meshes > 512)
Sys_extWarn("read_tr5_room: num_static_meshes > 512");
room.reverb_info = read_bitu8(newsrc);
room.alternate_group = read_bitu8(newsrc);
room.water_scheme = read_bitu16(newsrc);
if (read_bitu32(newsrc) != 0x00007FFF)
Sys_extWarn("read_tr5_room: filler1 has wrong value");
if (read_bitu32(newsrc) != 0x00007FFF)
Sys_extWarn("read_tr5_room: filler2 has wrong value");
if (read_bitu32(newsrc) != 0xCDCDCDCD)
Sys_extWarn("read_tr5_room: seperator4 has wrong value");
if (read_bitu32(newsrc) != 0xCDCDCDCD)
Sys_extWarn("read_tr5_room: seperator5 has wrong value");
if (read_bitu32(newsrc) != 0xFFFFFFFF)
Sys_extWarn("read_tr5_room: seperator6 has wrong value");
room.alternate_room = read_bit16(newsrc);
room.flags = read_bitu16(newsrc);
room.unknown_r1 = read_bitu32(newsrc);
room.unknown_r2 = read_bitu32(newsrc);
room.unknown_r3 = read_bitu32(newsrc);
temp = read_bitu32(newsrc);
if ((temp != 0) && (temp != 0xCDCDCDCD))
Sys_extWarn("read_tr5_room: seperator7 has wrong value");
room.unknown_r4a = read_bitu16(newsrc);
//.........这里部分代码省略.........
开发者ID:ActiveMath,项目名称:OpenTomb,代码行数:101,代码来源:l_tr5.cpp
示例9: read_bitu32
void TR_Level::read_tr5_level(SDL_RWops * const src)
{
uint32_t i;
uint8_t *comp_buffer = NULL;
uint8_t *uncomp_buffer = NULL;
SDL_RWops *newsrc = NULL;
// Version
uint32_t file_version = read_bitu32(src);
if (file_version != 0x00345254)
Sys_extError("Wrong level version");
this->num_textiles = 0;
this->num_room_textiles = 0;
this->num_obj_textiles = 0;
this->num_bump_textiles = 0;
this->num_misc_textiles = 0;
this->read_32bit_textiles = false;
uint32_t uncomp_size;
uint32_t comp_size;
unsigned long size;
this->num_room_textiles = read_bitu16(src);
this->num_obj_textiles = read_bitu16(src);
this->num_bump_textiles = read_bitu16(src);
this->num_misc_textiles = 3;
this->num_textiles = this->num_room_textiles + this->num_obj_textiles + this->num_bump_textiles + this->num_misc_textiles;
uncomp_size = read_bitu32(src);
if (uncomp_size == 0)
Sys_extError("read_tr5_level: textiles32 uncomp_size == 0");
comp_size = read_bitu32(src);
if (comp_size > 0) {
uncomp_buffer = new uint8_t[uncomp_size];
this->textile32.resize( this->num_textiles );
comp_buffer = new uint8_t[comp_size];
if (SDL_RWread(src, comp_buffer, 1, comp_size) < comp_size)
Sys_extError("read_tr5_level: textiles32");
size = uncomp_size;
if (uncompress(uncomp_buffer, &size, comp_buffer, comp_size) != Z_OK)
Sys_extError("read_tr5_level: uncompress");
if (size != uncomp_size)
Sys_extError("read_tr5_level: uncompress size mismatch");
delete [] comp_buffer;
comp_buffer = NULL;
if ((newsrc = SDL_RWFromMem(uncomp_buffer, uncomp_size)) == NULL)
Sys_extError("read_tr5_level: SDL_RWFromMem");
for (i = 0; i < (this->num_textiles - this->num_misc_textiles); i++)
read_tr4_textile32(newsrc, this->textile32[i]);
SDL_RWclose(newsrc);
newsrc = NULL;
delete [] uncomp_buffer;
uncomp_buffer = NULL;
this->read_32bit_textiles = true;
}
uncomp_size = read_bitu32(src);
if (uncomp_size == 0)
Sys_extError("read_tr5_level: textiles16 uncomp_size == 0");
comp_size = read_bitu32(src);
if (comp_size > 0) {
if (this->textile32.empty()) {
uncomp_buffer = new uint8_t[uncomp_size];
this->textile16_count = this->num_textiles;
this->textile16 = (tr2_textile16_t*)malloc(this->textile16_count * sizeof(tr2_textile16_t));
comp_buffer = new uint8_t[comp_size];
if (SDL_RWread(src, comp_buffer, 1, comp_size) < comp_size)
Sys_extError("read_tr5_level: textiles16");
size = uncomp_size;
if (uncompress(uncomp_buffer, &size, comp_buffer, comp_size) != Z_OK)
Sys_extError("read_tr5_level: uncompress");
if (size != uncomp_size)
Sys_extError("read_tr5_level: uncompress size mismatch");
delete [] comp_buffer;
comp_buffer = NULL;
if ((newsrc = SDL_RWFromMem(uncomp_buffer, uncomp_size)) == NULL)
Sys_extError("read_tr5_level: SDL_RWFromMem");
for (i = 0; i < (this->num_textiles - this->num_misc_textiles); i++)
read_tr2_textile16(newsrc, this->textile16[i]);
SDL_RWclose(newsrc);
newsrc = NULL;
delete [] uncomp_buffer;
//.........这里部分代码省略.........
开发者ID:ActiveMath,项目名称:OpenTomb,代码行数:101,代码来源:l_tr5.cpp
示例10: SDL_LoadBMP_RW
SDL_Surface *
SDL_LoadBMP_RW(SDL_RWops * src, int freesrc)
{
SDL_bool was_error;
Sint64 fp_offset = 0;
int bmpPitch;
int i, pad;
SDL_Surface *surface;
Uint32 Rmask = 0;
Uint32 Gmask = 0;
Uint32 Bmask = 0;
Uint32 Amask = 0;
SDL_Palette *palette;
Uint8 *bits;
Uint8 *top, *end;
SDL_bool topDown;
int ExpandBMP;
SDL_bool haveRGBMasks = SDL_FALSE;
SDL_bool haveAlphaMask = SDL_FALSE;
SDL_bool correctAlpha = SDL_FALSE;
/* The Win32 BMP file header (14 bytes) */
char magic[2];
/* Uint32 bfSize = 0; */
/* Uint16 bfReserved1 = 0; */
/* Uint16 bfReserved2 = 0; */
Uint32 bfOffBits = 0;
/* The Win32 BITMAPINFOHEADER struct (40 bytes) */
Uint32 biSize = 0;
Sint32 biWidth = 0;
Sint32 biHeight = 0;
/* Uint16 biPlanes = 0; */
Uint16 biBitCount = 0;
Uint32 biCompression = 0;
/* Uint32 biSizeImage = 0; */
/* Sint32 biXPelsPerMeter = 0; */
/* Sint32 biYPelsPerMeter = 0; */
Uint32 biClrUsed = 0;
/* Uint32 biClrImportant = 0; */
/* Make sure we are passed a valid data source */
surface = NULL;
was_error = SDL_FALSE;
if (src == NULL) {
was_error = SDL_TRUE;
goto done;
}
/* Read in the BMP file header */
fp_offset = SDL_RWtell(src);
SDL_ClearError();
if (SDL_RWread(src, magic, 1, 2) != 2) {
SDL_Error(SDL_EFREAD);
was_error = SDL_TRUE;
goto done;
}
if (SDL_strncmp(magic, "BM", 2) != 0) {
SDL_SetError("File is not a Windows BMP file");
was_error = SDL_TRUE;
goto done;
}
/* bfSize = */ SDL_ReadLE32(src);
/* bfReserved1 = */ SDL_ReadLE16(src);
/* bfReserved2 = */ SDL_ReadLE16(src);
bfOffBits = SDL_ReadLE32(src);
/* Read the Win32 BITMAPINFOHEADER */
biSize = SDL_ReadLE32(src);
if (biSize == 12) { /* really old BITMAPCOREHEADER */
biWidth = (Uint32) SDL_ReadLE16(src);
biHeight = (Uint32) SDL_ReadLE16(src);
/* biPlanes = */ SDL_ReadLE16(src);
biBitCount = SDL_ReadLE16(src);
biCompression = BI_RGB;
} else if (biSize >= 40) { /* some version of BITMAPINFOHEADER */
Uint32 headerSize;
biWidth = SDL_ReadLE32(src);
biHeight = SDL_ReadLE32(src);
/* biPlanes = */ SDL_ReadLE16(src);
biBitCount = SDL_ReadLE16(src);
biCompression = SDL_ReadLE32(src);
/* biSizeImage = */ SDL_ReadLE32(src);
/* biXPelsPerMeter = */ SDL_ReadLE32(src);
/* biYPelsPerMeter = */ SDL_ReadLE32(src);
biClrUsed = SDL_ReadLE32(src);
/* biClrImportant = */ SDL_ReadLE32(src);
/* 64 == BITMAPCOREHEADER2, an incompatible OS/2 2.x extension. Skip this stuff for now. */
if (biSize == 64) {
/* ignore these extra fields. */
if (biCompression == BI_BITFIELDS) {
/* this value is actually huffman compression in this variant. */
SDL_SetError("Compressed BMP files not supported");
was_error = SDL_TRUE;
goto done;
}
} else {
/* This is complicated. If compression is BI_BITFIELDS, then
we have 3 DWORDS that specify the RGB masks. This is either
//.........这里部分代码省略.........
开发者ID:Solexid,项目名称:SDL-mirror,代码行数:101,代码来源:SDL_bmp.c
示例11: open_music
//.........这里部分代码省略.........
int MIX_string_equals(const char *str1, const char *str2)
{
while ( *str1 && *str2 ) {
if ( toupper((unsigned char)*str1) !=
toupper((unsigned char)*str2) )
break;
++str1;
++str2;
}
return (!*str1 && !*str2);
}
/* Load a music file */
Mix_Music *Mix_LoadMUS(const char *file)
{
char *ext;
Uint8 magic[5];
Mix_Music *music;
SDL_RWops *src; //maks
/* Figure out what kind of file this is */
/*fp = fopen(file, "rb"); //maks
if ( (fp == NULL) || !fread(magic, 4, 1, fp) ) {
if ( fp != NULL ) {
fclose(fp);
}
Mix_SetError("Couldn't read from '%s'", file);
return(NULL);
}
magic[4] = '\0';
fclose(fp);*/
src = SDL_RWFromFile(file, "rb"); //maks
if ( (src == NULL) || !SDL_RWread(src, magic, 4, 1) ) {
if ( src != NULL ) {
SDL_RWclose(src);
}
Mix_SetError("Couldn't read from '%s'", file);
return(NULL);
}
magic[4] = '\0';
SDL_RWclose(src);
/* Figure out the file extension, so we can determine the type */
ext = strrchr(file, '.');
if ( ext ) ++ext; /* skip the dot in the extension */
/* Allocate memory for the music structure */
music = (Mix_Music *)malloc(sizeof(Mix_Music));
if ( music == NULL ) {
Mix_SetError("Out of memory");
return(NULL);
}
music->error = 0;
#ifdef CMD_MUSIC
if ( music_cmd ) {
music->type = MUS_CMD;
music->data.cmd = MusicCMD_LoadSong(music_cmd, file);
if ( music->data.cmd == NULL ) {
music->error = 1;
}
} else
#endif
#ifdef WAV_MUSIC
/* WAVE files have the magic four bytes "RIFF"
开发者ID:cubemoon,项目名称:game-editor,代码行数:67,代码来源:music.c
示例12: cfg_OpenFile
// opens the file, returns NULL if it fails.
void* cfg_OpenFile( const char* fileName )
{
if( SDL_strlen( fileName ) >= ( FILE_PATH_LEN - 1 ) ) {
llog( LOG_ERROR, "Configuration file path too long" );
return NULL;
}
CFGFile* newFile = (CFGFile*)mem_Allocate( sizeof( CFGFile ) );
if( newFile == NULL ) {
llog( LOG_INFO, "Unable to open configuration file." );
return NULL;
}
newFile->sbAttributes = NULL;
SDL_strlcpy( newFile->filePath, fileName, FILE_PATH_LEN - 1 );
newFile->filePath[FILE_PATH_LEN-1] = 0;
SDL_RWops* rwopsFile = SDL_RWFromFile( fileName, "r" );
if( rwopsFile == NULL ) {
// file doesn't exist, just create a new empty configuration file to use
return newFile;
}
// TODO: change this so everything is happening in place and there are no allocations
// parse what this configuration file currently has in it
char buffer[READ_BUFFER_SIZE];
size_t numRead;
char* fileText = NULL;
llog( LOG_INFO, "Stream size: %i", (int)SDL_RWsize( rwopsFile ) );
while( ( numRead = SDL_RWread( rwopsFile, (void*)buffer, sizeof( char ), sizeof( buffer ) ) ) != 0 ) {
char* c = sb_Add( fileText, (int)numRead );
for( size_t i = 0; i < numRead; ++i ) {
*c++ = buffer[i];
}
}
sb_Push( fileText, 0 ); // make this c-string compatible
// got the entire file text, now tokenize and parse
// only tokens we're worried about are '=' and '/r/n'
// everything before the '=' is the attribute name, everything
// after is the attribute value, all white space should be cut
// off of each end
int gettingAttrName = 1;
const char* delimiters = "\f\v\t =\r\n";
char* token = strtok( fileText, delimiters );
CFGAttribute attr;
while( token != NULL ) {
// cut off white space, don't care about preserving memory
if( gettingAttrName ) {
SDL_strlcpy( attr.fileName, token, sizeof( attr.fileName ) - 1 );
attr.fileName[sizeof( attr.fileName ) - 1] = 0;
gettingAttrName = 0;
} else {
attr.value = SDL_atoi( token );
sb_Push( newFile->sbAttributes, attr );
llog( LOG_INFO, "New attribute: %s %i", attr.fileName, attr.value );
gettingAttrName = 1;
}
token = strtok( NULL, delimiters );
}
sb_Release( fileText );
SDL_RWclose( rwopsFile );
return newFile;
}
开发者ID:JesseRahikainen,项目名称:Xturos,代码行数:69,代码来源:cfgFile.c
示例13: main
//.........这里部分代码省略.........
fprintf(stderr, "The -fps option requires an argument [from 1 to 1000], default is 12.\n");
return -1;
}
} else
if ((strcmp(argv[1], "-help") == 0 ) || (strcmp(argv[1], "-h") == 0))
{
PrintUsage(argv[0]);
return 0;
} else
{
fprintf(stderr, "Unrecognized option: %s.\n", argv[1]);
return -1;
}
break;
}
RawMooseData=(Uint8*)malloc(MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT);
if (RawMooseData==NULL)
{
fprintf(stderr, "Can't allocate memory for movie !\n");
free(RawMooseData);
return 1;
}
/* load the trojan moose images */
handle=SDL_RWFromFile("moose.dat", "rb");
if (handle==NULL)
{
fprintf(stderr, "Can't find the file moose.dat !\n");
free(RawMooseData);
return 2;
}
SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT);
SDL_RWclose(handle);
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0)
{
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
free(RawMooseData);
return 3;
}
atexit(SDL_Quit);
/* Set video mode */
if ( (screen=SDL_SetVideoMode(MOOSEPIC_W*scale, MOOSEPIC_H*scale, 0, SDL_RESIZABLE | SDL_SWSURFACE)) == NULL )
{
fprintf(stderr, "Couldn't set video mode: %s\n", 0, SDL_GetError());
free(RawMooseData);
return 4;
}
/* Set the window manager title bar */
SDL_WM_SetCaption("SDL test overlay: running moose", "testoverlay2");
for (i=0; i<MOOSEFRAMES_COUNT; i++)
{
MooseFrame[i]=SDL_CreateRGBSurfaceFrom(RawMooseData+i*MOOSEFRAME_SIZE, MOOSEPIC_W,
MOOSEPIC_H, 8, MOOSEPIC_W, 0, 0, 0, 0);
if (MooseFrame[i]==NULL)
{
fprintf(stderr, "Couldn't create SDL_Surfaces:%s\n", 0, SDL_GetError());
free(RawMooseData);
return 5;
}
开发者ID:Sgt-Nukem,项目名称:chocolate_duke3D,代码行数:67,代码来源:testoverlay2.c
示例14: read_next_frame
/* Reads the next frame from the file. Returns true on success or
false on failure. */
static int
read_next_frame(mad_data *mp3_mad) {
if (mp3_mad->stream.buffer == NULL ||
mp3_mad->stream.error == MAD_ERROR_BUFLEN) {
size_t read_size;
size_t remaining;
unsigned char *read_start;
/* There might be some bytes in the buffer left over from last
time. If so, move them down and read more bytes following
them. */
if (mp3_mad->stream.next_frame != NULL) {
remaining = mp3_mad->stream.bufend - mp3_mad->stream.next_frame;
memmove(mp3_mad->input_buffer, mp3_mad->stream.next_frame, remaining);
read_start = mp3_mad->input_buffer + remaining;
read_size = MAD_INPUT_BUFFER_SIZE - remaining;
} else {
read_size = MAD_INPUT_BUFFER_SIZE;
read_start = mp3_mad->input_buffer;
remaining = 0;
}
/* Now read additional bytes from the input file. */
read_size = SDL_RWread(mp3_mad->rw, read_start, 1, read_size);
if (read_size <= 0) {
if ((mp3_mad->status & (MS_input_eof | MS_input_error)) == 0) {
if (read_size == 0) {
mp3_mad->status |= MS_input_eof;
} else {
mp3_mad->status |= MS_input_error;
}
/* At the end of the file, we must stuff MAD_BUFFER_GUARD
number of 0 bytes. */
memset(read_start + read_size, 0, MAD_BUFFER_GUARD);
read_size += MAD_BUFFER_GUARD;
}
}
/* Now feed those bytes into the libmad stream. */
mad_stream_buffer(&mp3_mad->stream, mp3_mad->input_buffer,
read_size + remaining);
mp3_mad->stream.error = MAD_ERROR_NONE;
}
/* Now ask libmad to extract a frame from the data we just put in
its buffer. */
if (mad_frame_decode(&mp3_mad->frame, &mp3_mad->stream)) {
if (MAD_RECOVERABLE(mp3_mad->stream.error)) {
return 0;
} else if (mp3_mad->stream.error == MAD_ERROR_BUFLEN) {
return 0;
} else {
mp3_mad->status |= MS_decode_error;
return 0;
}
}
mp3_mad->frames_read++;
mad_timer_add(&mp3_mad->next_frame_start, mp3_mad->frame.header.duration);
return 1;
}
开发者ID:0xD34D,项目名称:supermariowar-android,代码行数:69,代码来源:music_mad.c
示例15: SDL_GameControllerAddMappingsFromRW
/*
* Add or update an entry into the Mappings Database
*/
int
SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw)
{
const char *platform = SDL_GetPlatform();
int controllers = 0;
char *buf, *line, *line_end, *tmp, *comma, line_platform[64];
size_t db_size, platform_len;
if (rw == NULL) {
return SDL_SetError("Invalid RWops");
}
db_size = (size_t)SDL_RWsize(rw);
buf = (char *)SDL_malloc(db_size + 1);
if (buf == NULL) {
if (freerw) {
SDL_RWclose(rw);
}
return SDL_SetError("Could not allocate space to read DB into memory");
}
if (SDL_RWread(rw, buf, db_size, 1) != 1) {
if (freerw) {
SDL_RWclose(rw);
}
SDL_free(buf);
return SDL_SetError("Could not read DB");
}
if (freerw) {
SDL_RWclose(rw);
}
buf[db_size] = '\0';
line = buf;
while (line < buf + db_size) {
line_end = SDL_strchr(line, '\n');
if (line_end != NULL) {
*line_end = '\0';
} else {
line_end = buf + db_size;
}
/* Extract and verify the platform */
tmp = SDL_strstr(line, SDL_CONTROLLER_PLATFORM_FIELD);
if (tmp != NULL) {
tmp += SDL_strlen(SDL_CONTROLLER_PLATFORM_FIELD);
comma = SDL_strchr(tmp, ',');
if (comma != NULL) {
platform_len = comma - tmp + 1;
if (platform_len + 1 < SDL_arraysize(line_platform)) {
SDL_strlcpy(line_platform, tmp, platform_len);
if (SDL_strncasecmp(line_platform, platform, platform_len) == 0 &&
SDL_GameControllerAddMapping(line) > 0) {
controllers++;
}
}
}
}
line = line_end + 1;
}
SDL_free(buf);
return controllers;
}
开发者ID:antkillerfarm,项目名称:SDL,代码行数:70,代码来源:SDL_gamecontroller.c
示例16: ovpack_read
/*
* Vorbis stuff.
*/
static size_t ovpack_read( void *ptr, size_t size, size_t nmemb, void *datasource )
{
SDL_RWops *rw = datasource;
return (size_t) SDL_RWread( rw, ptr, size, nmemb );
}
开发者ID:Delll,项目名称:naev,代码行数:8,代码来源:sound_openal.c
示例17: SDL_RWtell
/* Load a PCX type image from an SDL datasource */
SDL_Surface *IMG_LoadPCX_RW(SDL_RWops *src)
{
Sint64 start;
struct PCXheader pcxh;
Uint32 Rmask;
Uint32 Gmask;
Uint32 Bmask;
Uint32 Amask;
SDL_Surface *surface = NULL;
int width, height;
int y, bpl;
Uint8 *row, *buf = NULL;
char *error = NULL;
int bits, src_bits;
if ( !src ) {
/* The error message has been set in SDL_RWFromFile */
return NULL;
}
start = SDL_RWtell(src);
if ( ! SDL_RWread(src, &pcxh, sizeof(pcxh), 1) ) {
error = "file truncated";
goto done;
}
pcxh.Xmin = SDL_SwapLE16(pcxh.Xmin);
pcxh.Ymin = SDL_SwapLE16(pcxh.Ymin);
pcxh.Xmax = SDL_SwapLE16(pcxh.Xmax);
pcxh.Ymax = SDL_SwapLE16(pcxh.Ymax);
pcxh.BytesPerLine = SDL_SwapLE16(pcxh.BytesPerLine);
/* Create the surface of the appropriate type */
width = (pcxh.Xmax - pcxh.Xmin) + 1;
height = (pcxh.Ymax - pcxh.Ymin) + 1;
Rmask = Gmask = Bmask = Amask = 0;
src_bits = pcxh.BitsPerPixel * pcxh.NPlanes;
if((pcxh.BitsPerPixel == 1 && pcxh.NPlanes >= 1 && pcxh.NPlanes <= 4)
|| (pcxh.BitsPerPixel == 8 && pcxh.NPlanes == 1)) {
bits = 8;
} else if(pcxh.BitsPerPixel == 8 && pcxh.NPlanes == 3) {
bits = 24;
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
Rmask = 0x000000FF;
Gmask = 0x0000FF00;
Bmask = 0x00FF0000;
#else
Rmask = 0xFF0000;
Gmask = 0x00FF00;
Bmask = 0x0000FF;
#endif
} else {
error = "unsupported PCX format";
goto done;
}
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height,
bits, Rmask, Gmask, Bmask, Amask);
if ( surface == NULL )
goto done;
bpl = pcxh.NPlanes * pcxh.BytesPerLine;
if (bpl > surface->pitch) {
error = "bytes per line is too large (corrupt?)";
}
buf = (Uint8 *)SDL_malloc(bpl);
row = (Uint8 *)surface->pixels;
for ( y=0; y<surface->h; ++y ) {
/* decode a scan line to a temporary buffer first */
int i, count = 0;
Uint8 ch;
Uint8 *dst = (src_bits == 8) ? row : buf;
if ( pcxh.Encoding == 0 ) {
if(!SDL_RWread(src, dst, bpl, 1)) {
error = "file truncated";
goto done;
}
} else {
for(i = 0; i < bpl; i++) {
if(!count) {
if(!SDL_RWread(src, &ch, 1, 1)) {
error = "file truncated";
goto done;
}
if( (ch & 0xc0) == 0xc0) {
count = ch & 0x3f;
if(!SDL_RWread(src, &ch, 1, 1)) {
error = "file truncated";
goto done;
}
} else
count = 1;
}
dst[i] = ch;
count--;
}
}
if(src_bits <= 4) {
/* expand planes to 1 byte/pixel */
Uint8 *innerSrc = buf;
//.........这里部分代码省略.........
开发者ID:mhernando,项目名称:SDL2_image,代码行数:101,代码来源:IMG_pcx.c
示例18: sound_al_loadWav
//.........这里部分代码省略.........
if (sound_al_wavGetLen32( rw, &rate )) {
WARN("Unable to get WAVE chunk sample rate.");
goto wav_err;
}
i += 4;
/* Get average bytes. */
if (sound_al_wavGetLen32( rw, &unused32 )) {
WARN("Unable to get WAVE chunk average byte rate.");
goto wav_err;
}
i += 4;
/* Get block align. */
if (sound_al_wavGetLen16( rw, &unused16 )) {
WARN("Unable to get WAVE chunk block align.");
goto wav_err;
}
i += 2;
/* Get significant bits. */
if (sound_al_wavGetLen16( rw, &align )) {
WARN("Unable to get WAVE chunk significant bits.");
goto wav_err;
}
align /= channels;
i += 2;
/* Seek to end. */
SDL_RWseek( rw, chunklen-i, SEEK_CUR );
/* Read new header. */
len = SDL_RWread( rw, magic, 4, 1 );
if (len != 1) {
WARN("Unable to read chunk header.");
goto wav_err;
}
/* Skip fact. */
if (memcmp( magic, "fact", 4)==0) {
/* Get chunk length. */
if (sound_al_wavGetLen32( rw, &chunklen )) {
WARN("Unable to get WAVE chunk data length.");
goto wav_err;
}
/* Seek to end of chunk. */
SDL_RWseek( rw, chunklen, SEEK_CUR );
/* Read new header. */
len = SDL_RWread( rw, magic, 4, 1 );
if (len != 1) {
WARN("Unable to read chunk header.");
goto wav_err;
}
}
/* Should be chunk header now. */
if (memcmp( magic, "data", 4)) {
WARN("Unable to find WAVE 'data' chunk header.");
goto wav_err;
}
/*
* Chunk data header.
开发者ID:Delll,项目名称:naev,代码行数:67,代码来源:sound_openal.c
示例19: SDL_RWtell
SDL_Surface *IMG_LoadWEBP_RW(SDL_RWops *src)
{
Sint64 start;
const char *error = NULL;
SDL_Surface *volatile surface = NULL;
Uint32 Rmask;
Uint32 Gmask;
Uint32 Bmask;
Uint32 Amask;
WebPBitstreamFeatures features;
int raw_data_size;
uint8_t *raw_data = NULL;
int r;
uint8_t *ret;
if ( !src ) {
/* The error message has been set in SDL_RWFromFile */
return NULL;
}
start = SDL_RWtell(src);
if ( !IMG_Init(IMG_INIT_WEBP) ) {
goto error;
}
raw_data_size = -1;
if ( !webp_getinfo( src, &raw_data_size ) ) {
error = "Invalid WEBP";
goto error;
}
// seek to start of file
SDL_RWseek(src, 0, RW_SEEK_SET );
raw_data = (uint8_t*) SDL_malloc( raw_data_size );
if ( raw_data == NULL ) {
error = "Failed to allocate enought buffer for WEBP";
goto error;
}
r = SDL_RWread(src, raw_data, 1, raw_data_size );
if ( r != raw_data_size ) {
error = "Failed to read WEBP";
goto error;
}
#if 0
// extract size of picture, not interesting since we don't know about alpha channel
int width = -1, height = -1;
if ( !WebPGetInfo( raw_data, raw_data_size, &width, &height ) ) {
printf("WebPGetInfo has failed\n" );
return NULL;
}
#endif
if ( lib.webp_get_features_internal( raw_data, raw_data_size, &features, WEBP_DECODER_ABI_VERSION ) != VP8_STATUS_OK ) {
error = "WebPGetFeatures has failed";
goto error;
}
/* Check if it's ok !*/
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
Rmask = 0x000000FF;
Gmask = 0x0000FF00;
Bmask = 0x00FF0000;
Amask = (features.has_alpha) ? 0xFF000000 : 0;
#else
s = (features.has_alpha) ? 0 : 8;
Rmask = 0xFF000000 >> s;
Gmask = 0x00FF0000 >> s;
Bmask = 0x0000FF00 >> s;
Amask = 0x000000FF >> s;
#endif
surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
features.width, features.height,
features.has_alpha?32:24, Rmask,Gmask,Bmask,Amask);
if ( surface == NULL ) {
error = "Failed to allocate SDL_Surface";
goto error;
}
if ( features.has_alpha ) {
ret = lib.webp_decode_rgba_into( raw_data, raw_data_size, (uint8_t *)surface->pixels, surface->pitch * surface->h, surface->pitch );
} else {
ret = lib.webp_decode_rgb_into( raw_data, raw_data_size, (uint8_t *)surface->pixels, surface->pitch * surface->h, surface->
|
请发表评论