123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /** (c) Nullsoft, Inc. C O N F I D E N T I A L
- ** Filename:
- ** Project:
- ** Description:
- ** Author: Ben Allison [email protected]
- ** Created:
- **/
- #include "main.h"
- #include "ExtendedReader.h"
- #include "../nu/AutoCharFn.h"
- ExtendedReader::ExtendedReader(OpenFunc _open, OpenWFunc _openW, OpenFunc _openFloat, OpenWFunc _openWFloat, GetDataFunc _getData, CloseFunc _close, SetTimeFunc _setTime)
- : open(_open), openFloat(_openFloat), openW(_openW), openWFloat(_openWFloat), getData(_getData), close(_close), setTime(_setTime), handle(0)
- {}
- bool ExtendedReader::Open(const wchar_t *filename, AudioParameters *parameters)
- {
- if (parameters->flags & AUDIOPARAMETERS_FLOAT)
- {
- if (this->openWFloat)
- handle = this->openWFloat(filename, (int *) & parameters->sizeBytes, (int *) & parameters->bitsPerSample, (int *) & parameters->channels, (int *) & parameters->sampleRate);
- else if (this->openFloat)
- handle = this->openFloat(AutoCharFn(filename), (int *) & parameters->sizeBytes, (int *) & parameters->bitsPerSample, (int *) & parameters->channels, (int *) & parameters->sampleRate);
- }
- else
- {
- if (this->openW)
- handle = this->openW(filename, (int *) & parameters->sizeBytes, (int *) & parameters->bitsPerSample, (int *) & parameters->channels, (int *) & parameters->sampleRate);
- else
- handle = this->open(AutoCharFn(filename), (int *) & parameters->sizeBytes, (int *) & parameters->bitsPerSample, (int *) & parameters->channels, (int *) & parameters->sampleRate);
- }
- if (handle > 0)
- return true;
- else
- {
- if (handle == -1)
- parameters->errorCode = API_DECODEFILE_FAIL_NO_WARN;
- else
- parameters->errorCode = API_DECODEFILE_FAILURE;
- return false;
- }
- }
- size_t ExtendedReader::ReadAudio(void *buffer, size_t sizeBytes)
- {
- int killswitch = 0;
- return this->getData(handle, buffer, sizeBytes, &killswitch);
- }
- size_t ExtendedReader::ReadAudio_kill(void *buffer, size_t sizeBytes, int *killswitch, int *error)
- {
- *error=0;
- intptr_t ret = this->getData(handle, buffer, sizeBytes, killswitch);
- if (ret < 0)
- {
- *error=1;
- return 0;
- }
- else
- return static_cast<size_t>(ret);
- }
- BOOL ExtendedReader::SeekToTimeMs(int millisecs)
- {
- if (!setTime)
- return FALSE;
- return this->setTime(handle, millisecs);
- }
- int ExtendedReader::CanSeek()
- {
- return setTime?1:0;
- }
- ExtendedReader::~ExtendedReader()
- {
- if (handle)
- this->close(handle);
- }
- #define CBCLASS ExtendedReader
- START_DISPATCH;
- CB(IFC_AUDIOSTREAM_READAUDIO, ReadAudio)
- CB(IFC_AUDIOSTREAM_READAUDIO2, ReadAudio_kill)
- CB(IFC_AUDIOSTREAM_SEEKTOTIMEMS, SeekToTimeMs)
- CB(IFC_AUDIOSTREAM_CANSEEK, CanSeek)
- END_DISPATCH;
|