105 lines
3.4 KiB
C++
105 lines
3.4 KiB
C++
#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];
|
|
|
|
|
|
}; |