X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=dpvsimpledecode.c;h=9927a7606e06eab2a1c75c2a709d7f309bc5d613;hp=0d30b4f703e1a3dec7e85a82191886a9f4ff30a4;hb=0e6ee75ea28c1f0f9027b698779d945c71e65213;hpb=b37129d36872d2d42d861024433c34239b24f6a3 diff --git a/dpvsimpledecode.c b/dpvsimpledecode.c index 0d30b4f7..9927a760 100644 --- a/dpvsimpledecode.c +++ b/dpvsimpledecode.c @@ -1,17 +1,7 @@ -#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 @@ -20,7 +10,7 @@ typedef struct { - FILE *file; + qfile_t *file; int endoffile; } hz_bitstream_read_t; @@ -45,9 +35,9 @@ hz_bitstream_readblocks_t; hz_bitstream_read_t *hz_bitstream_read_open(char *filename) { - FILE *file; + qfile_t *file; hz_bitstream_read_t *stream; - if ((file = fopen(filename, "rb"))) + if ((file = FS_Open (filename, "rb", false))) { stream = malloc(sizeof(hz_bitstream_read_t)); memset(stream, 0, sizeof(*stream)); @@ -62,22 +52,11 @@ void hz_bitstream_read_close(hz_bitstream_read_t *stream) { if (stream) { - fclose(stream->file); + FS_Close(stream->file); free(stream); } } -unsigned int hz_bitstream_read_currentbyte(hz_bitstream_read_t *stream) -{ - return ftell(stream->file); -} - -int hz_bitstream_read_seek(hz_bitstream_read_t *stream, unsigned int position) -{ - stream->endoffile = 0; - return fseek(stream->file, position, SEEK_SET) != 0; -} - hz_bitstream_readblocks_t *hz_bitstream_read_blocks_new(void) { hz_bitstream_readblocks_t *blocks; @@ -133,7 +112,7 @@ int hz_bitstream_read_blocks_read(hz_bitstream_readblocks_t *blocks, hz_bitstrea else b->size = s; s -= b->size; - if (fread(b->data, 1, b->size, stream->file) != b->size) + if (FS_Read(stream->file, b->data, b->size) != b->size) { stream->endoffile = 1; break; @@ -225,7 +204,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 +236,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 +394,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 +443,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 +520,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 +663,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; -}