123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #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];
-
- };
|