aboutsummaryrefslogtreecommitdiff
path: root/Src/burnlib/item.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/burnlib/item.h')
-rw-r--r--Src/burnlib/item.h105
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