www.pudn.com > NeroSDK-v1.06.zip > NeroBurnAtOnce.h


/****************************************************************************** 
|* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
|* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
|* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
|* PARTICULAR PURPOSE. 
|*  
|* Copyright 1995-2005 Nero AG. All Rights Reserved. 
|*----------------------------------------------------------------------------- 
|* NeroSDK / NeroAPI 
|* 
|* PROGRAM: NeroBurnAtOnce.h 
|* 
|* PURPOSE: Interface to BurnAtOnce functionality of Nero API. 
|*          BurnAtOnce can burn DVD-Video data directly to DVDs without having 
|*          to first generate all files on the harddisc. 
|* 
|* NOTES  : This functionality is present up from NeroAPI 6.3.1.11 
******************************************************************************/ 
#ifndef NEROBURNATONCE_H 
#define NEROBURNATONCE_H 
 
#include "NeroAPI.h" 
 
#ifdef __cplusplus 
 
#include "NeroFileSystemContent.h" 
 
#if defined(__BORLANDC__) 
// NEROAPI expects structs to be 8byte aligned 
#pragma pack(push, 8)  
// tell Borland C++ Builder to treat enums as int 
#pragma option push -b  
#endif 
 
namespace FileSystemContent 
{ 
	// ask the IDataInputStream object you get in IFileProducer::ProduceFile 
	// with GetOtherInterface("IBurnAtOnceInfo") to get a pointer to this object 
	class IBurnAtOnceInfo : public InterfaceBase 
	{ 
	public: 
		// returns the offset to start of VIDEO_TS.IFO in blocks 
		virtual DWORD GetOffset() const = 0; 
	}; 
} 
#endif // __cplusplus 
 
#ifdef __cplusplus 
class CBurnAtOnceRecorder; 
typedef CBurnAtOnceRecorder* NERO_BAO_HANDLE; 
 
extern "C" 
{ 
 
#else // __cplusplus 
typedef void* NERO_BAO_HANDLE; 
#endif  
		    
 
typedef struct tag_NERO_BURN_AT_ONCE 
{ 
	/* fill this with sizeof(NERO_BURN_AT_ONCE) */ 
	DWORD nwbaoSize;				 
 
	/* path to a directory to store temporary files 
	 * If NULL, system temp directory will be used */ 
	const char *nwbaoTempDirectory;  
 
	/* The content of the filesystem  
	 * Important: 
	 * 1) All IFO and BUP files must have set the exact file size 
	 * 2) All other video files must have set the estimated size which will be  
	 *    updated during burning. Note, that the estimated size should 
	 *    be as exact as possible. 
	 * 3) For each video title set only add the first VOB file (e.g. VTS_01_1.VOB) 
	 *    to the file system container and pass all the video data of this title set 
	 *    in the file producer of this file. NeroAPI will automatically split the  
	 *    file at the appropriate size (1 GB - logical block size). 
	 * 4) DVD-Video files will be sorted automatically 
	 * 5) It is guaranteed that the file data will be requested in the following order: 
	 *    - VMGM_VOB (VIDEO_TS.VOB) [if present] 
	 *    - For each video title set (VTS): 
	 *      - VTSM_VOB (e.g. VTS_01_0.VOB) [if present] 
	 *      - VTSTT_VOBS (e.g. VTS_01_1.VOB) [mandatory] 
	 *      - VTSI file (e.g. VTS_01_0.IFO)  [mandatory] 
	 *      - VTSI backup (e.g. VTS_01_0.BUP) [mandatory] 
	 *    - VMGMI (VIDEO_TS.IFO) [mandatory] 
	 *    - Backup for VMGMI (VIDEO_TS.BUP) [mandatory] 
	 */ 
#ifdef __cplusplus 
FileSystemContent:: 
#else //__cplusplus 
struct 
#endif//__cplusplus 
    IFileSystemDescContainer *nwbaoFSContainer;	 
 
	DWORD nwbaoReserved[64];				/* Should be zero */ 
} NERO_WRITE_BURN_AT_ONCE; 
	 
 
NEROAPI_API 
NEROAPI_BURN_ERROR NADLL_ATTR NeroBurnAtOnce(NERO_DEVICEHANDLE    aDeviceHandle, 
             NERO_WRITE_BURN_AT_ONCE *pBurnAtOnce, 
 			 DWORD                dwFlags,	// set of NBF_ flags. Note, that not all NBF_ flags will be interpreted. 
             DWORD                dwSpeed,  // In KB/s if NBF_SPEED_IN_KBS is present, in multiple of 150 KB/s otherwise 
             NERO_PROGRESS*       pNeroProgress, 
			 void *reserved); 
 
 
/* This is the second method to do BurnAtOnce with NeroAPI. 
 * It allows more control by application but you have to make sure 
 * by yourself to deliver the data in the correct order. Additionally, 
 * NeroAPI will not cache any data in memory with this method and the 
 * methods block until all the data is written. Therefore, your 
 * application should implement some caching itself for performance reasons. 
 * 
 * Howto use: 
 * 1) Fill the nwbaoFSContainer of NERO_WRITE_BURN_AT_ONCE to specify the  
 *    layout of the DVD. 
 * 2) Call NeroBAOCreateHandle with the necessary information to get a NERO_BAO_HANDLE 
 * 3) For each video file in the VIDEO_TS folder, call NeroBAOOpenFile, then write 
 *    all the data with NeroBAOWriteToFile and then call NeroBAOCloseFile.  
 *    Note: 
 *    it is absolutely important, that this is done in the correct order. See 
 *    notes on the nwbaoFSContainer above. 
 * 4) After all video data is written, call NeroBAOCloseHandle. This will write additional 
 *    files that are present in the filesystem container and then finalize the disc. 
 * 5) If an error occurs on your side and/or you want to cancel burning, just call 
 *    NeroBAOCloseHandle with dwFlags set to NBAOF_CANCELED or NBAOF_FAILED. 
 * 6) If an error occurs on NeroAPI's side, also call NeroBAOCloseHandle to end burning 
 *    and do some cleanup. 
 * 
 * Notes: 
 * - nwbaoFSContainer needs to be valid until NeroBAOCloseHandle is called. 
 */ 
 
NEROAPI_API  
NEROAPI_BURN_ERROR NADLL_ATTR NeroBAOCreateHandle(NERO_DEVICEHANDLE aDeviceHandle, 
			NERO_WRITE_BURN_AT_ONCE *pBurnAtOnce, 
			DWORD                dwFlags,	// set of NBF_ flags. Note, that not all NBF_ flags will be interpreted. 
			DWORD                dwSpeed,  // In KB/s if NBF_SPEED_IN_KBS is present, in multiple of 150 KB/s otherwise 
			NERO_PROGRESS*       pNeroProgress, 
			NERO_BAO_HANDLE* pBAOHandle, // will get the handle created by NeroAPI 
			void *reserved); 
 
NEROAPI_API 
NEROAPI_BURN_ERROR NADLL_ATTR NeroBAOOpenFile(NERO_BAO_HANDLE hBAOHandle, const char *name, DWORD* pdwOffset, void *reserved); 
 
NEROAPI_API 
NEROAPI_BURN_ERROR NADLL_ATTR NeroBAOWriteToFile(NERO_BAO_HANDLE hBAOHandle,  
			const void* lpBuffer, // data buffer 
			DWORD nNumberOfBytesToWrite, // number of bytes to write 
			                             // Must be multiple of 2048! 
			LPDWORD lpNumberOfBytesWritten, 
			void *reserved); 
 
NEROAPI_API 
NEROAPI_BURN_ERROR NADLL_ATTR NeroBAOCloseFile(NERO_BAO_HANDLE hBAOHandle, 
			void *reserved); 
 
 
NEROAPI_API 
NEROAPI_BURN_ERROR NADLL_ATTR NeroBAOCloseHandle(NERO_BAO_HANDLE hBAOHandle, DWORD dwFlags, void *reserved); 
 
#define NBAOF_CANCELED (1<<0) 
#define NBAOF_FAILED   (1<<1) 
 
 
#ifdef __cplusplus 
} 
#endif 
 
 
#if defined(__BORLANDC__) 
#pragma pack(pop) 
#pragma option pop  
#endif 
 
 
#endif // NEROBURNATONCE_H