diff options
Diffstat (limited to 'Src/burnlib/playlist.h')
-rw-r--r-- | Src/burnlib/playlist.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/Src/burnlib/playlist.h b/Src/burnlib/playlist.h new file mode 100644 index 00000000..218b68eb --- /dev/null +++ b/Src/burnlib/playlist.h @@ -0,0 +1,157 @@ +#ifndef NULLSOFT_BurnerPlaylist_HEADER +#define NULLSOFT_BurnerPlaylist_HEADER + +#include "./main.h" +#include "./api.h" + +#include <api/service/waServiceFactory.h> +#include "../playlist/api_playlistmanager.h" +#include "../playlist/ifc_playlistloadercallback.h" +#include "../winamp/api_decodefile.h" + +#include "../nu/vector.h" + +#include "./item.h" +#include "./manager.h" + +#define BURNERPLAYLIST_SUCCESS 0x0000 + +#define BURNERPLAYLIST_STATUS 0x0000 +#define BURNERPLAYLIST_ERROR 0x1000 + +// error codes +#define BURNERPLAYLIST_FAILED ((BURNERPLAYLIST_ERROR) + 0x001) +#define BURNERPLAYLIST_BADFILENAME ((BURNERPLAYLIST_ERROR) + 0x002) +#define BURNERPLAYLIST_UNABLEOPENFILE ((BURNERPLAYLIST_ERROR) + 0x003) +#define BURNERPLAYLIST_WRITEERROR ((BURNERPLAYLIST_ERROR) + 0x004) +#define BURNERPLAYLIST_DECODEERROR ((BURNERPLAYLIST_ERROR) + 0x005) +#define BURNERPLAYLIST_DECODESERVICEFAILED ((BURNERPLAYLIST_ERROR) + 0x006) +#define BURNERPLAYLIST_THREADCREATEFAILED ((BURNERPLAYLIST_ERROR) + 0x007) +#define BURNERPLAYLIST_NOFILES ((BURNERPLAYLIST_ERROR) + 0x008) +#define BURNERPLAYLIST_WRONGFILECOUNT ((BURNERPLAYLIST_ERROR) + 0x009) + +// +#define BURNERPLAYLIST_ABORTED ((BURNERPLAYLIST_STATUS) +0x100) +#define BURNERPLAYLIST_DECODENEXTITEM ((BURNERPLAYLIST_ERROR) + 0x111) +#define BURNERPLAYLIST_DECODEITEM ((BURNERPLAYLIST_ERROR) + 0x112) + +#define BURNERPLAYLIST_NEWAUDIOFAILED ((BURNERPLAYLIST_ERROR) + 0x131) +#define BURNERPLAYLIST_ADDITEMFAILED ((BURNERPLAYLIST_ERROR) + 0x132) +#define BURNERPLAYLIST_ADDITEMSKIPPED ((BURNERPLAYLIST_ERROR) + 0x133) +#define BURNERPLAYLIST_ITEMADDED ((BURNERPLAYLIST_ERROR) + 0x134) +#define BURNERPLAYLIST_BEGINBURN ((BURNERPLAYLIST_ERROR) + 0x135) +#define BURNERPLAYLIST_ENDBURN ((BURNERPLAYLIST_ERROR) + 0x136) +#define BURNERPLAYLIST_BEGINBURNFAILED ((BURNERPLAYLIST_ERROR) + 0x137) +#define BURNERPLAYLIST_ENDBURNFAILED ((BURNERPLAYLIST_ERROR) + 0x138) +#define BURNERPLAYLIST_WRITEAUDIOFAILED ((BURNERPLAYLIST_ERROR) + 0x139) +#define BURNERPLAYLIST_WRITELEADIN ((BURNERPLAYLIST_ERROR) + 0x13A) +#define BURNERPLAYLIST_WRITEDATA ((BURNERPLAYLIST_ERROR) + 0x13B) +#define BURNERPLAYLIST_WRITELEADOUT ((BURNERPLAYLIST_ERROR) + 0x13C) +#define BURNERPLAYLIST_DISCOPEN ((BURNERPLAYLIST_ERROR) + 0x13D) +#define BURNERPLAYLIST_DISCCLOSE ((BURNERPLAYLIST_ERROR) + 0x13E) +#define BURNERPLAYLIST_WRITEITEMBEGIN ((BURNERPLAYLIST_ERROR) + 0x13F) +#define BURNERPLAYLIST_WRITEITEMEND ((BURNERPLAYLIST_ERROR) + 0x140) +#define BURNERPLAYLIST_BURNFAILED ((BURNERPLAYLIST_ERROR) + 0x141) +// +#define BURNERPLAYLIST_FILENOTLICENSED ((BURNERPLAYLIST_ERROR) + 0x150) + +// statuses +#define BURNERPLAYLIST_LICENSINGFINISHED ((BURNERPLAYLIST_STATUS) + 0x001) +#define BURNERPLAYLIST_LICENSINGSTARTING ((BURNERPLAYLIST_STATUS) + 0x002) +#define BURNERPLAYLIST_LICENSINGPROGRESS ((BURNERPLAYLIST_STATUS) + 0x003) + + +#define BURNERPLAYLIST_DECODEFINISHED ((BURNERPLAYLIST_STATUS) + 0x010) +#define BURNERPLAYLIST_DECODESTARTING ((BURNERPLAYLIST_STATUS) + 0x011) +#define BURNERPLAYLIST_DECODEPROGRESS ((BURNERPLAYLIST_STATUS) + 0x012) +#define BURNERPLAYLIST_DECODECANCELING ((BURNERPLAYLIST_STATUS) + 0x013) + +#define BURNERPLAYLIST_BURNFINISHED ((BURNERPLAYLIST_STATUS) + 0x031) +#define BURNERPLAYLIST_BURNSTARTING ((BURNERPLAYLIST_STATUS) + 0x032) +#define BURNERPLAYLIST_BURNPROGRESS ((BURNERPLAYLIST_STATUS) + 0x033) +#define BURNERPLAYLIST_BURNCANCELING ((BURNERPLAYLIST_STATUS) + 0x034) +#define BURNERPLAYLIST_BURNFINISHING ((BURNERPLAYLIST_STATUS) + 0x035) + + +// callback returns +#define BURNERPLAYLIST_CONTINUE 0 +#define BURNERPLAYLIST_STOP 1 + + +typedef Vector<BurnerItem*> BurnerVector; + +typedef struct _BPLDECODEINFO +{ + BurnerItem *iInstance; + int iIndex; + DWORD iNotifyCode; + DWORD iErrorCode; + float percentCompleted; +}BPLDECODEINFO; + +typedef struct _BPLRUNSTATUS +{ + DWORD sCurrent; + DWORD sTotal; + BurnerItem *iInstance; + int iIndex; + float percentCompleted; + +}BPLRUNSTATUS; + +typedef DWORD (WINAPI *BURNERPLAYLISTCALLBACK)(void *sender, void *userparam, DWORD notifyCode, DWORD errorCode, ULONG_PTR param); + + +class BurnerPlaylist : private ifc_playlistloadercallback, BurnerVector, BurnManagerCallback +{ +public: + BURNLIB_API BurnerPlaylist(void); + BURNLIB_API ~BurnerPlaylist(void); + BURNLIB_API HRESULT Load(const wchar_t *filename); + BURNLIB_API HRESULT CheckLicense(BURNERPLAYLISTCALLBACK notifyCB, void *userparam); + BURNLIB_API HRESULT Decode(void* hFile, BURNERPLAYLISTCALLBACK notifyCB, void *userparam, BOOL block); + BURNLIB_API HRESULT Burn(obj_primo *primoSDK, DWORD drive, DWORD maxspeed, DWORD burnFlags, void* hFile, + BURNERPLAYLISTCALLBACK notifyCB, void *userparam, BOOL block); + BURNLIB_API DWORD AddCompilationToCDDB(void); + BURNLIB_API size_t GetCount(void) { return size(); } + BURNLIB_API DWORD GetTotalLengthMS(void) { return length; } + BURNLIB_API BurnerItem* &operator[](size_t index) { return BurnerVector::at(index); } + BURNLIB_API BurnerItem* &at(size_t index) { return BurnerVector::at(index); } + BURNLIB_API DWORD GetTotalSectors(void); + BURNLIB_API BOOL SetEjectWhenDone(BOOL eject) { BOOL tmp = ejectDone; ejectDone = eject; return tmp; } + BURNLIB_API DWORD GetStatus(DWORD *retCode); // if retCode not NULL - can return completed percentage or error code + // state based calls + BURNLIB_API size_t GetStateCount(DWORD state, DWORD code); + BURNLIB_API DWORD GetStateLengthMS(DWORD state, DWORD code); + BURNLIB_API DWORD GetStateSectors(DWORD state, DWORD code); + +protected: + static DWORD WINAPI DecodeWorker(void* param); + static DWORD WINAPI BurnerWorker(void* param); + void OnFile(const wchar_t *filename, const wchar_t *title, int lengthInMS, ifc_plentryinfo *info); + static DWORD WINAPI OnItemDecode(void* sender, void *param, DWORD notifyCode, DWORD errorCode); + DWORD OnNotify(DWORD notifyCode, DWORD errorCode, ULONG_PTR param); + void OnLicenseCallback(size_t numFiles, WRESULT *results); + RECVS_DISPATCH; + +protected: + unsigned long length; + wchar_t tmpfullname; + obj_primo *primoSDK; + DWORD drive; + BURNERPLAYLISTCALLBACK notifyCB; + void *userparam; + HANDLE hThread; + HANDLE hFile; + BPLDECODEINFO *activeDecode; + float percentStep; + DWORD maxspeed; + DWORD burnFlags; + DWORD statusCode; + DWORD errorCode; + HANDLE evntCancel; + BOOL ejectDone; + BurnManager manager; +}; + +#endif //NULLSOFT_BurnerPlaylist_HEADER
\ No newline at end of file |