diff options
Diffstat (limited to 'Src/burnlib/item.h')
-rw-r--r-- | Src/burnlib/item.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Src/burnlib/item.h b/Src/burnlib/item.h new file mode 100644 index 00000000..73abb403 --- /dev/null +++ b/Src/burnlib/item.h @@ -0,0 +1,105 @@ +#pragma once + +#include "./main.h" +#include "../Agave/DecodeFile/api_decodefile.h" +#include "../Agave/DecodeFile/ifc_audiostream.h" +#include "./manager.h" +//#include "../primo/obj_primo.h" + + +#define BURNERITEM_SUCCESS 0x0000 + +#define BURNERITEM_STATUS 0x0000 +#define BURNERITEM_ERROR 0x1000 + +// states + +#define BURNERITEM_SKIPPED 0x0100 +#define BURNERITEM_READY 0x0101 +#define BURNERITEM_LICENSING 0x0102 +#define BURNERITEM_LICENSED 0x0103 +#define BURNERITEM_DECODING 0x0104 +#define BURNERITEM_DECODED 0x0105 +#define BURNERITEM_BURNING 0x0106 +#define BURNERITEM_BURNED 0x0107 + +// error codes +#define BURNERITEM_FAILED ((BURNERITEM_ERROR) + 0x001) +#define BURNERITEM_BADFILENAME ((BURNERITEM_ERROR) + 0x002) +#define BURNERITEM_UNABLEOPENFILE ((BURNERITEM_ERROR) + 0x003) +#define BURNERITEM_WRITEERROR ((BURNERITEM_ERROR) + 0x004) +#define BURNERITEM_DECODEERROR ((BURNERITEM_ERROR) + 0x005) +#define BURNERITEM_ALREADYCREATED ((BURNERITEM_ERROR) + 0x006) +#define BURNERITEM_ADDSTREAMFAILED ((BURNERITEM_ERROR) + 0x007) +#define BURNERITEM_READSTREAMERROR ((BURNERITEM_ERROR) + 0x008) +#define BURNERITEM_ABORTED ((BURNERITEM_ERROR) + 0x009) +#define BURNERITEM_CANCELING ((BURNERITEM_ERROR) + 0x00A) + +// statuses +#define BURNERITEM_DECODESTARTING ((BURNERITEM_STATUS) + 0x001) +#define BURNERITEM_DECODEPROGRESS ((BURNERITEM_STATUS) + 0x002) +#define BURNERITEM_DECODECANCELING ((BURNERITEM_STATUS) + 0x003) +#define BURNERITEM_DECODEFINISHED ((BURNERITEM_STATUS) + 0x004) + + + +// callback returns +#define BURNERITEM_CONTINUE 0 +#define BURNERITEM_STOP 1 + + +typedef DWORD (WINAPI *BURNERITEMCALLBACK)(void*, void*, DWORD, DWORD); // sender, parameter, notifyCode, errorCode + +#define ZEROMEM_SIZE 1024 +class BurnerItem +{ + friend class BurnerPlaylist; +public: + + BURNLIB_API BurnerItem(void); + BURNLIB_API ~BurnerItem(void); + +public: + BURNLIB_API HRESULT Create(const wchar_t *fullname, const wchar_t *title, int length); + BURNLIB_API void Destroy(void); + BURNLIB_API HRESULT Decode(BurnManager *manager, void *fileHandle, BURNERITEMCALLBACK notifyCB, void *userparam); + BURNLIB_API HRESULT AddStream(obj_primo *primoSDK, void *fileHandle); + +public: + BURNLIB_API const wchar_t* GetFullName(void) { return fullname; } + BURNLIB_API const wchar_t* GetTitle(void) { return title; } + BURNLIB_API int GetLength(void) { return length; } + BURNLIB_API unsigned __int64 GetSize(void) { return sizeBytes; } + BURNLIB_API DWORD GetSizeInSectors(void) { return sizeSectors; } + BURNLIB_API unsigned int GetPreGap(void) { return preGap; } + BURNLIB_API unsigned __int8* GetISRC(void) { return ISRC; } + BURNLIB_API __int64 GetDecodedFilePosition(void) { return fposition; } + BURNLIB_API int GetStatus(DWORD *retCode); // if retCode not NULL - can return completed percentage or error code + void SetPreGap(unsigned int preGap); + void SetISRC(unsigned __int8 *ISRC); + +protected: + static wchar_t* DuplicateString(void *heap, const wchar_t *source, unsigned int cchSource); + static DWORD StreamFiller(PBYTE pBuffer, DWORD dwBytesRequested, PDWORD pdwBytesWritten, PVOID pContext); + + +protected: + void *heap; + wchar_t *fullname; + wchar_t *title; + int length; + unsigned __int64 sizeBytes; + DWORD sizeSectors; + unsigned int preGap; + unsigned __int8 ISRC[12]; + void* fhandle; + __int64 fposition; + BOOL needSetFilePos; + unsigned __int64 streamedSize; + int percentCompleted; + int itemStatus; + DWORD errorCode; + static DWORD zeroMem[ZEROMEM_SIZE]; + + +};
\ No newline at end of file |