diff options
Diffstat (limited to 'Src/Plugins/Input/in_cdda/VeritasPlay.h')
-rw-r--r-- | Src/Plugins/Input/in_cdda/VeritasPlay.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_cdda/VeritasPlay.h b/Src/Plugins/Input/in_cdda/VeritasPlay.h new file mode 100644 index 00000000..30b16f38 --- /dev/null +++ b/Src/Plugins/Input/in_cdda/VeritasPlay.h @@ -0,0 +1,122 @@ +#ifndef NULLSOFT_VERITASPLAYH +#define NULLSOFT_VERITASPLAYH + +#include "CDPlay.h" +#include <windows.h> +#include "SpeedLimiter.h" +#include "main.h" + +using namespace Nullsoft::Utility; +class VeritasBuffer +{ +public: + VeritasBuffer() : buffer(0), readSize(0), sector(0), offset(0) + { + } + ~VeritasBuffer() + { + Destroy(); + } + void Create(int numBuffers) + { + buffer = new BYTE[numBuffers * 2352]; + Clear(); + } + void Destroy() + { + if (buffer) + delete buffer; + buffer = 0; + Clear(); + } + void Clear() + { + readSize = 0; + sector = 0; + } + BYTE *buffer; + BYTE *internal; + DWORD readSize; + DWORD sector; + int offset; +}; + +class VeritasPlay : public C_CDPlay +{ +public: + VeritasPlay(bool _ripping = false); + ~VeritasPlay(); + //void Delete() {if (primo) delete primo; primo = 0; } + void CreateBuffers(); + void DestroyBuffers(); + int open(char drive, int track); //called by winampGetExtendedRead + int play(char drive, int track); //called by winamp2 + int openVeritasTrack(DWORD start, DWORD length); + + static DWORD WINAPI threadProc(LPVOID lpParameter) + { + VeritasPlay *wp = (VeritasPlay *)lpParameter; + return wp->threadProc2(); + } + + void OutputBuffer(VeritasBuffer &buffer); + int read(char *dest, int len, int *killswitch); + void Abort(); + void Seek(); + void SeekAndFlush(); + void Output(char *buffer, int len); + void OutputOverflow(); + int CopyOverflow(char *sample_buffer, int len); + + size_t CopyBuffer(VeritasBuffer &buffer, char *&sample_buffer, int &bytes); + int threadProc2(); + void stop(); + void pause() + { + line.outMod->Pause(1); + } + void unpause() + { + line.outMod->Pause(0); + } + int getlength() + { + return g_playlength; + } + int getoutputtime() + { + return line.outMod->GetOutputTime(); + } + void setoutputtime(int time_in_ms); + void setvolume(int a_v, int a_p); + + void *submitHandle; +private: + void Close(); + void AbortAsync(); + + void WaitForAbort(int time); + int killswitch; + HANDLE hThread; + int decode_pos_ms; + int need_seek; + + DWORD unit, start_sector, end_sector, lastseek, sec_length; + int end; + int total_extract_len; + DWORD extract_start_time; + BYTE *overflowBuffer; + long overflow; + VeritasBuffer *buffers; + int buf_size, currentBuffer, nb_veritas_buf; + int g_nch; + bool ripping, opened; + SpeedLimiter speedLimiter; + bool padStart, padEnd; + + #ifndef IGNORE_PRIMO + obj_primo *primo; + #endif +}; + +#endif |