/* $Id: Common.h,v 1.34 2003/10/13 17:49:58 titer Exp $
This file is part of the HandBrake source code.
Homepage: .
It may be used under the terms of the GNU General Public License. */
#ifndef HB_COMMON_H
#define HB_COMMON_H
/* Standard headers */
#include
#include
#include
#include
#include
typedef uint8_t byte_t;
/* Misc structures */
typedef struct a52_state_s a52_state_t;
typedef struct lame_global_struct lame_global_flags;
typedef struct dvdplay_s * dvdplay_ptr;
typedef struct mpeg2dec_s mpeg2dec_t;
typedef struct AVPicture AVPicture;
typedef struct AVFrame AVFrame;
typedef struct AVCodecContext AVCodecContext;
typedef struct ImgReSampleContext ImgReSampleContext;
/* Classes */
class HBAc3Decoder;
class HBAudio;
class HBAviIndex;
class HBAviMuxer;
class HBBuffer;
class HBDVDReader;
class HBFifo;
class HBList;
class HBLock;
class HBManager;
class HBMp3Encoder;
class HBMpeg2Decoder;
class HBMpeg4Encoder;
class HBMpegDemux;
class HBResizer;
class HBScanner;
class HBStatus;
class HBThread;
class HBTitle;
class HBWorker;
/* Handy macros */
#ifndef MIN
# define MIN( a, b ) ( ( (a) > (b) ) ? (b) : (a) )
#endif
#ifndef MAX
# define MAX( a, b ) ( ( (a) > (b) ) ? (a) : (b) )
#endif
#define EVEN( a ) ( ( (a) & 0x1 ) ? ( (a) + 1 ) : (a) )
#define MULTIPLE_16( a ) ( 16 * ( ( (a) + 8 ) / 16 ) )
#define VOUT_ASPECT_FACTOR 432000
/* Global prototypes */
void Snooze( uint64_t time );
void Log( char * log, ... );
char * LanguageForCode( int code );
uint64_t GetDate();
int GetCPUCount();
/* Possible states */
typedef enum
{
HB_MODE_UNDEF = 00000,
HB_MODE_NEED_VOLUME = 00001,
HB_MODE_SCANNING = 00002,
HB_MODE_INVALID_VOLUME = 00004,
HB_MODE_READY_TO_RIP = 00010,
HB_MODE_ENCODING = 00020,
HB_MODE_SUSPENDED = 00040,
HB_MODE_STOPPING = 00100,
HB_MODE_DONE = 00200,
HB_MODE_CANCELED = 00400,
HB_MODE_ERROR = 01000
} HBMode;
/* Possible errors */
typedef enum
{
HB_ERROR_A52_SYNC = 0,
HB_ERROR_AVI_WRITE,
HB_ERROR_DVD_OPEN,
HB_ERROR_DVD_READ,
HB_ERROR_MP3_INIT,
HB_ERROR_MP3_ENCODE,
HB_ERROR_MPEG4_INIT
} HBError;
class HBStatus
{
public:
HBMode fMode;
/* HB_MODE_SCANNING */
char * fScannedVolume;
int fScannedTitle;
/* HB_MODE_SCANDONE */
HBList * fTitleList;
/* HB_MODE_ENCODING || HB_MODE_SUSPENDED */
float fPosition;
float fFrameRate;
uint32_t fFrames;
uint64_t fStartDate;
uint32_t fRemainingTime; /* in seconds */
uint64_t fSuspendDate;
/* HB_MODE_ERROR */
HBError fError;
};
class HBList
{
public:
HBList();
~HBList();
uint32_t CountItems();
void AddItem( void * item );
void RemoveItem( void * item );
void * ItemAt( uint32_t index );
private:
void ** fItems;
uint32_t fAllocItems;
uint32_t fNbItems;
};
class HBAudio
{
public:
HBAudio( int id, char * description );
~HBAudio();
/* Ident */
uint32_t fId;
char * fDescription;
/* Settings */
int fInSampleRate;
int fOutSampleRate;
int fInBitrate;
int fOutBitrate;
int64_t fDelay; /* in ms */
/* Fifos */
HBFifo * fAc3Fifo;
HBFifo * fRawFifo;
HBFifo * fMp3Fifo;
/* Threads */
HBAc3Decoder * fAc3Decoder;
HBMp3Encoder * fMp3Encoder;
};
class HBTitle
{
public:
HBTitle( char * device, int index );
~HBTitle();
char * fDevice;
int fIndex;
uint64_t fLength;
/* Video input */
uint32_t fInWidth;
uint32_t fInHeight;
uint32_t fAspect;
uint32_t fRate;
uint32_t fScale;
/* Video output */
bool fDeinterlace;
uint32_t fOutWidth;
uint32_t fOutHeight;
uint32_t fOutWidthMax;
uint32_t fOutHeightMax;
uint32_t fTopCrop;
uint32_t fBottomCrop;
uint32_t fLeftCrop;
uint32_t fRightCrop;
uint32_t fBitrate;
bool fTwoPass;
/* Audio infos */
HBList * fAudioList;
/* Fifos */
HBFifo * fPSFifo;
HBFifo * fMpeg2Fifo;
HBFifo * fRawFifo;
HBFifo * fResizedFifo;
HBFifo * fMpeg4Fifo;
/* Threads */
HBDVDReader * fDVDReader;
HBMpegDemux * fMpegDemux;
HBMpeg2Decoder * fMpeg2Decoder;
HBResizer * fResizer;
HBMpeg4Encoder * fMpeg4Encoder;
HBAviMuxer * fAviMuxer;
HBWorker * fWorkers[4];
};
#endif