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