]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - dpvsimpledecode.c
more warning fixes
[xonotic/darkplaces.git] / dpvsimpledecode.c
index bdfcf319b0dfaf96aeb592e4af9083e15fe6c634..9f4154972878c3d261a29ee36b16517394f911cb 100644 (file)
@@ -1,26 +1,17 @@
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
+#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
 {
-       FILE *file;
+       qfile_t *file;
        int endoffile;
 }
 hz_bitstream_read_t;
@@ -45,9 +36,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, false)))
        {
                stream = malloc(sizeof(hz_bitstream_read_t));
                memset(stream, 0, sizeof(*stream));
@@ -62,22 +53,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 +113,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) != (fs_offset_t)b->size)
                {
                        stream->endoffile = 1;
                        break;
@@ -178,7 +158,7 @@ int hz_bitstream_read_bit(hz_bitstream_readblocks_t *blocks)
        return (blocks->store >> blocks->count) & 1;
 }
 
-unsigned int hz_bitstream_read_bits(hz_bitstream_readblocks_t *blocks, unsigned int size)
+unsigned int hz_bitstream_read_bits(hz_bitstream_readblocks_t *blocks, int size)
 {
        unsigned int num = 0;
        // we can only handle about 24 bits at a time safely
@@ -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;
-}