X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=dpvsimpledecode.c;h=9f4154972878c3d261a29ee36b16517394f911cb;hp=b248ea0f787549296fc9ca1ea2a17b4ab5697ee7;hb=e3272446d9f13cc12b1822a99b4e7cf512454db9;hpb=57252d1b300d96b2353bf9d564b0de281552d2c5 diff --git a/dpvsimpledecode.c b/dpvsimpledecode.c index b248ea0f..9f415497 100644 --- a/dpvsimpledecode.c +++ b/dpvsimpledecode.c @@ -1,22 +1,13 @@ -#include -#include -#include -#include +#include "quakedef.h" #include "dpvsimpledecode.h" -#include "wavefile.h" -#define EMBEDDEDHZREAD 1 - -#ifndef EMBEDDEDHZREAD -#include "hz_read.h" -#include "hz_read.c" -#else #define HZREADERROR_OK 0 #define HZREADERROR_EOF 1 #define HZREADERROR_MALLOCFAILED 2 -#define HZREADBLOCKSIZE 16000 +//#define HZREADBLOCKSIZE 16000 +#define HZREADBLOCKSIZE 1048576 typedef struct { @@ -47,7 +38,7 @@ hz_bitstream_read_t *hz_bitstream_read_open(char *filename) { qfile_t *file; hz_bitstream_read_t *stream; - if ((file = FS_Open (filename, "rb", false))) + if ((file = FS_Open (filename, "rb", false, false))) { stream = malloc(sizeof(hz_bitstream_read_t)); memset(stream, 0, sizeof(*stream)); @@ -67,17 +58,6 @@ void hz_bitstream_read_close(hz_bitstream_read_t *stream) } } -unsigned int hz_bitstream_read_currentbyte(hz_bitstream_read_t *stream) -{ - return FS_Tell(stream->file); -} - -int hz_bitstream_read_seek(hz_bitstream_read_t *stream, unsigned int position) -{ - stream->endoffile = 0; - return FS_Seek(stream->file, position, SEEK_SET) != 0; -} - hz_bitstream_readblocks_t *hz_bitstream_read_blocks_new(void) { hz_bitstream_readblocks_t *blocks; @@ -133,7 +113,7 @@ int hz_bitstream_read_blocks_read(hz_bitstream_readblocks_t *blocks, hz_bitstrea else b->size = s; s -= b->size; - if (FS_Read(stream->file, b->data, b->size) != b->size) + if (FS_Read(stream->file, b->data, b->size) != (fs_offset_t)b->size) { stream->endoffile = 1; break; @@ -225,7 +205,6 @@ void hz_bitstream_read_bytes(hz_bitstream_readblocks_t *blocks, void *outdata, u while (size--) *out++ = hz_bitstream_read_byte(blocks); } -#endif #define BLOCKSIZE 8 @@ -258,8 +237,8 @@ typedef struct dpvsimpledecodestream_s // current video frame data (needed because of delta compression) unsigned int *videopixels; - // wav file the sound is being read from - wavefile_t *wavefile; + // channel the sound file is being played on + int sndchan; } dpvsimpledecodestream_t; @@ -416,9 +395,15 @@ void *dpvsimpledecode_open(char *filename, char **errorstring) wavename = malloc(strlen(filename) + 10); if (wavename) { + sfx_t* sfx; + StripExtension(filename, wavename); strcat(wavename, ".wav"); - s->wavefile = waveopen(wavename, NULL); + sfx = S_PrecacheSound (wavename, false, false); + if (sfx != NULL) + s->sndchan = S_StartSound (-1, 0, sfx, vec3_origin, 1.0f, 0); + else + s->sndchan = -1; free(wavename); } // all is well... @@ -459,8 +444,8 @@ void dpvsimpledecode_close(void *stream) return; if (s->videopixels) free(s->videopixels); - if (s->wavefile) - waveclose(s->wavefile); + if (s->sndchan != -1) + S_StopChannel (s->sndchan); if (s->framedatablocks) hz_bitstream_read_blocks_free(s->framedatablocks); if (s->bitstream) @@ -536,16 +521,6 @@ unsigned int dpvsimpledecode_getheight(void *stream) return s->info_imageheight; } -// returns the sound sample rate of the stream -unsigned int dpvsimpledecode_getsoundrate(void *stream) -{ - dpvsimpledecodestream_t *s = stream; - if (s->wavefile) - return s->wavefile->info_rate; - else - return 0; -} - // returns the framerate of the stream double dpvsimpledecode_getframerate(void *stream) { @@ -689,20 +664,3 @@ int dpvsimpledecode_video(void *stream, void *imagedata, unsigned int Rmask, uns dpvsimpledecode_convertpixels(s, imagedata, imagebytesperrow); return s->error; } - -// (note: sound is 16bit stereo native-endian, left channel first) -int dpvsimpledecode_audio(void *stream, short *soundbuffer, int requestedlength) -{ - int samples; - dpvsimpledecodestream_t *s = stream; - s->error = DPVSIMPLEDECODEERROR_NONE; - if (requestedlength) - { - samples = 0; - if (s->wavefile && requestedlength) - samples = waveread16stereo(s->wavefile, soundbuffer, requestedlength); - if (samples < requestedlength) - memset(soundbuffer + samples * 2, 0, (requestedlength - samples) * sizeof(short[2])); - } - return s->error; -}