vbAccelerator - Contents of code file: CDRip_CDRip.h

This file is part of the download CDRip DLL Source, which is described in the article CD Ripping in VB Part 1.

/*
** Copyright (C) 1999 Albert L. Faber
**  
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
** 
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
** 
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software 
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#ifndef CDRIP_INCLUDED
#define CDRIP_INCLUDED

#pragma pack(push,4)

#ifdef _WIN32
  #define CCONV _stdcall
#endif

#undef DLLEXPORT

#define DLLEXPORT 
#ifdef CDEX_DLL
//   #define DLLEXPORT __declspec(dllexport)
#else
//   #define DLLEXPORT __declspec(import)
#endif

#define      CDEX_ERR                     LONG
#define      CDEX_OK                        0x00000000
#define      CDEX_ERROR                     0x00000001
#define      CDEX_FILEOPEN_ERROR               0x00000002
#define      CDEX_JITTER_ERROR               0x00000003
#define      CDEX_RIPPING_DONE               0x00000004
#define      CDEX_RIPPING_INPROGRESS            0x00000005


#define      TRANSPLAYER_ASPI                  (0)
#define      TRANSPLAYER_NTSCSI                  (1)

#define CDROMDATAFLAG 0x04
#define AUDIOTRKFLAG 0x10


#define CR_RIPPING_MODE_NORMAL                  ( 0 )
#define CR_RIPPING_MODE_PARANOIA               ( 1 )


// forward class declaration
class CIni;


typedef struct SENSKEY_TAG
{
   BYTE   SK;
   BYTE   ASC;
   BYTE   ASCQ;
} SENSEKEY;


enum DRIVETYPE
{
   GENERIC=0,
   TOSHIBA,
   TOSHIBANEW,
   IBM,
   NEC,
   DEC,
   IMS,
   KODAK,
   RICOH,
   HP,
   PHILIPS,
   PLASMON,
   GRUNDIGCDR100IPW,
   MITSUMICDR,
   PLEXTOR,
   SONY,
   YAMAHA,
   NRC,
   IMSCDD5,
   CUSTOMDRIVE,
   NUMDRIVETYPES
};

enum READMETHOD
{
   READMMC=0,
   READ10,
   READNEC,
   READSONY,
   READMMC2,
   READMMC3,
   READC1,
   READC2,
   READC3,
   READMMC4,
   NUMREADMETHODS
};

enum SETSPEED
{
   SPEEDNONE=0,
   SPEEDMMC,
   SPEEDSONY,
   SPEEDYAMAHA,
   SPEEDTOSHIBA,
   SPEEDPHILIPS,
   SPEEDNEC,
   NUMSPEEDMETHODS
};

enum ENDIAN
{
   BIGENDIAN=0,
   LITTLEENDIAN,
   NUMENDIAN
};

enum ENABLEMODE
{
   ENABLENONE=0,
   ENABLESTD,
   NUMENABLEMODES
};


typedef struct DRIVETABLE_TAG
{
   DRIVETYPE   DriveType;
   READMETHOD   ReadMethod;
   SETSPEED   SetSpeed;
   ENDIAN      Endian;
   ENABLEMODE   EnableMode;
   LONG      nDensity;
   BOOL      bAtapi;
} DRIVETABLE;

enum OUTPUTFORMAT
{
   STEREO44100=0,
   MONO44100,
   STEREO22050,
   MONO22050,
   STEREO11025,
   MONO11025,
   NUMOUTPUTFORMATS
};


struct CDROMPARAMS
{
   char       lpszCDROMID[255];      // CD-ROM ID, must be unique to index
    settings in INI file
   LONG      nNumReadSectors;      // Number of sector to read per burst
   LONG      nNumOverlapSectors;      // Number of overlap sectors for jitter
    correction
   LONG      nNumCompareSectors;      // Number of sector to compare for jitter
    correction
   LONG      nOffsetStart;         // Fudge factor at start of ripping in
    sectors
   LONG      nOffsetEnd;            // Fudge factor at the end of ripping in
    sectors
   LONG      nSpeed;               // CD-ROM speed factor 0 .. 32 x
   LONG      nSpinUpTime;         // CD-ROM spin up time in seconds
   BOOL      bJitterCorrection;      // Boolean indicates whether to use Jitter
    Correction
   BOOL      bSwapLefRightChannel;   // Swap left and right channel ? 
   DRIVETABLE   DriveTable;            // Drive specific parameters
      
   BYTE      btTargetID;            // SCSI target ID
   BYTE      btAdapterID;         // SCSI Adapter ID
   BYTE      btLunID;            // SCSI LUN ID

   BOOL      bAspiPosting;         // When set ASPI posting is used,
    otherwhiese ASPI polling is used
   INT         nAspiRetries;
   INT         nAspiTimeOut;

   BOOL        bEnableMultiRead;       // Enables Multiple Read Verify Feature
   BOOL        bMultiReadFirstOnly;    // Only do the multiple reads on the
    first block
   INT         nMultiReadCount;        // Number of times to reread and compare

   BOOL      bLockDuringRead;        // Number of times to reread and compare

   INT         nRippingMode;
   INT         nParanoiaMode;


};


// Table of contents structure
struct TOCENTRY
{
   DWORD   dwStartSector;      // Start sector of the track
   BYTE   btFlag;            // Track flags (i.e. data or audio track)
   BYTE   btTrackNumber;      // Track number
};

// Call init before anything else
DLLEXPORT CDEX_ERR CCONV CR_Init( LPCSTR strIniFname );

// Get the DLL version number
DLLEXPORT LONG CCONV CR_GetCDRipVersion();

// Get the number of detected CD-ROM drives
DLLEXPORT LONG CCONV CR_GetNumCDROM();

// Get the active CDROM drive index (0..GetNumCDROM()-1 )
DLLEXPORT LONG CCONV CR_GetActiveCDROM();

// Get the active CDROM drive (0..GetNumCDROM()-1 )
//DLLFUNCTION void CR_SetActiveCDROM(LONG nActiveDrive);
DLLEXPORT void CCONV CR_SetActiveCDROM(LONG nActiveDrive);

// Setlect the DRIVETYPE of the active drive
DLLEXPORT CDEX_ERR CCONV CR_SelectCDROMType( DRIVETYPE cdType );

// Get the Selected CDROM type
DLLEXPORT DRIVETYPE CCONV CR_GetCDROMType();

// Get the CDROM parameters of the active drive
DLLEXPORT CDEX_ERR CCONV CR_GetCDROMParameters( CDROMPARAMS* pParam);

// Set the CDROM parameters of the active drive
DLLEXPORT CDEX_ERR CCONV CR_SetCDROMParameters( CDROMPARAMS* pParam);

// Start ripping section, output is fetched to WriteBufferFunc
// Data is extracted from dwStartSector to dwEndSector
DLLEXPORT CDEX_ERR CCONV CR_OpenRipper(   LONG* plBufferSize,LONG
 dwStartSector,LONG dwEndSector);


// Close the ripper, has to be called when the ripping process is completed
 (i.e 100%)
// Or it can be called to abort the current ripping section
DLLEXPORT CDEX_ERR CCONV CR_CloseRipper();

// Indicates how far the ripping process is right now
// Returns 100% when the ripping is completed
DLLEXPORT LONG CCONV   CR_GetPercentCompleted();

// Returns the peak value of the ripped section (0..2^15)
DLLEXPORT LONG CCONV   CR_GetPeakValue();

// Get number of Jitter Errors that have occured during the ripping
// This function must be called before CloseRipper is called !
DLLEXPORT LONG CCONV   CR_GetNumberOfJitterErrors();

// Get the jitter position of the extracted track
DLLEXPORT LONG CCONV   CR_GetJitterPosition();

// Rip a chunk from the CD, pbtStream contains the ripped data, pNumBytes the
// number of bytes that have been ripped and corrected for jitter (if enabled)
DLLEXPORT CDEX_ERR CCONV CR_RipChunk( BYTE* pbtStream,LONG* pNumBytes, BOOL&
 bAbort );

// Load the CD-ROM settings from the file
DLLEXPORT CDEX_ERR CCONV CR_LoadSettings();

// Save the settings to a INI file
DLLEXPORT CDEX_ERR CCONV CR_SaveSettings();

// Normalize the stream (i.e. multiply by dScaleFactor)
DLLEXPORT void CCONV CR_NormalizeChunk(SHORT* pbsStream,LONG nNumSamples,DOUBLE
 dScaleFactor);

// Read the table of contents
DLLEXPORT CDEX_ERR CCONV CR_ReadToc();

// Read CD Text entry
DLLEXPORT CDEX_ERR CCONV CR_ReadCDText(BYTE* pbtBuffer,int nBufferSize,LPINT
 pnCDTextSize);

// Get the number of TOC entries, including the lead out
DLLEXPORT LONG CCONV CR_GetNumTocEntries();

// Get the TOC entry
DLLEXPORT TOCENTRY CCONV CR_GetTocEntry(LONG nTocEntry);

// Checks if the unit is ready (i.e. is the CD media present)
DLLEXPORT BOOL CCONV CR_IsUnitReady();

// Eject the CD, bEject=TRUE=> the CD will be ejected, bEject=FALSE=> the CD
 will be loaded
DLLEXPORT BOOL CCONV CR_EjectCD(BOOL bEject);

// Check if the CD is playing
DLLEXPORT BOOL CCONV CR_IsAudioPlaying();

// Play track
DLLEXPORT CDEX_ERR CCONV CR_PlayTrack(int nTrack);

// Stop Play track
DLLEXPORT CDEX_ERR CCONV CR_StopPlayTrack();

// Pause Play track
DLLEXPORT CDEX_ERR CCONV CR_PauseCD(BOOL bPause);

// Get debug information
DLLEXPORT SENSEKEY CCONV CR_GetSenseKey();

// Lock/unlock the CD Tray
DLLEXPORT void CCONV CR_LockCD( BOOL bLock );

DLLEXPORT void CCONV  CR_GetSubChannelTrackInfo(int&   nReadIndex,
                                    int&   nReadTrack,
                                    DWORD&   dwReadPos );



// Get status of audio playing
DLLEXPORT CDEX_ERR CCONV CR_GetPlayPosition(DWORD& dwRelPos,DWORD& dwAbsPos);

// Set the audio play position
DLLEXPORT CDEX_ERR CCONV CR_SetPlayPosition(DWORD dwAbsPos);

DLLEXPORT CDEX_ERR CCONV CR_PlaySection(LONG lStartSector,LONG lEndSector);

DLLEXPORT void CCONV CR_GetLastJitterErrorPosition(DWORD& dwStartSector,DWORD&
 dwEndSector);


// Change transport layer, DLL has to be re-initialzed when changing the
 transport layer!
// 0 = ASPI drivers
// 1 = Native NT scsi drivers

DLLEXPORT VOID CCONV CR_SetTransportLayer( int nTransportLayer );
DLLEXPORT INT CCONV CR_GetTransportLayer(  );

DLLEXPORT void CCONV CR_ScanForC2Errors(   
   LONG   lStartSector,
   LONG   lEndSector,
   INT&   nErrors,
   INT*   pnErrorSectors,
   INT      nMaxErrors,
   BOOL&   bAbort   );


#pragma pack(pop)

#endif