summaryrefslogtreecommitdiffstats
path: root/core/Common.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/Common.cpp')
-rw-r--r--core/Common.cpp220
1 files changed, 220 insertions, 0 deletions
diff --git a/core/Common.cpp b/core/Common.cpp
new file mode 100644
index 000000000..b9bb3e062
--- /dev/null
+++ b/core/Common.cpp
@@ -0,0 +1,220 @@
+/* $Id: Common.cpp,v 1.29 2003/09/30 21:21:32 titer Exp $
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://beos.titer.org/handbrake/>.
+ It may be used under the terms of the GNU General Public License. */
+
+#if defined( SYS_BEOS )
+# include <OS.h>
+#endif
+
+#include "Common.h"
+#include "Fifo.h"
+#include "MpegDemux.h"
+#include "Languages.h"
+
+#include <stdarg.h>
+#include <time.h>
+#include <sys/time.h>
+#include <dvdread/ifo_types.h>
+#include <dvdplay/dvdplay.h>
+#include <dvdplay/info.h>
+#include <dvdplay/state.h>
+#include <dvdplay/nav.h>
+
+extern "C" {
+#include <mpeg2dec/mpeg2.h>
+}
+
+void Snooze( uint64_t time )
+{
+#if defined( SYS_BEOS )
+ snooze( time );
+#elif defined( SYS_MACOSX ) || defined( SYS_LINUX )
+ usleep( time );
+#endif
+}
+
+void Log( char * log, ... )
+{
+ if( !getenv( "HB_DEBUG" ) )
+ {
+ return;
+ }
+
+ char string[1024];
+
+ /* Show the time */
+ time_t _now = time( NULL );
+ struct tm * now = localtime( &_now );
+ sprintf( string, "[%02d:%02d:%02d] ",
+ now->tm_hour, now->tm_min, now->tm_sec );
+
+ /* Convert the message to a string */
+ va_list args;
+ va_start( args, log );
+ int ret = vsnprintf( string + 11, 1011, log, args );
+ va_end( args );
+
+ /* Add the end of line */
+ string[ret+11] = '\n';
+ string[ret+12] = '\0';
+
+ /* Print it */
+ fprintf( stderr, "%s", string );
+}
+
+char * LanguageForCode( int code )
+{
+ char codeString[2];
+ codeString[0] = ( code >> 8 ) & 0xFF;
+ codeString[1] = code & 0xFF;
+
+ iso639_lang_t * lang;
+ for( lang = languages; lang->engName; lang++ )
+ {
+ if( !strncmp( lang->iso639_1, codeString, 2 ) )
+ {
+ if( *lang->nativeName )
+ return lang->nativeName;
+
+ return lang->engName;
+ }
+ }
+
+ return "Unknown";
+}
+
+uint64_t GetDate()
+{
+ struct timeval tv;
+ gettimeofday( &tv, NULL );
+ return( (uint64_t) tv.tv_sec * 1000000 + (uint64_t) tv.tv_usec );
+}
+
+#define HBLIST_DEFAULT_SIZE 20
+
+HBList::HBList()
+{
+ fItems = (void**) malloc( HBLIST_DEFAULT_SIZE * sizeof( void* ) );
+ fAllocItems = HBLIST_DEFAULT_SIZE;
+ fNbItems = 0;
+}
+
+HBList::~HBList()
+{
+ free( fItems );
+}
+
+uint32_t HBList::CountItems()
+{
+ return fNbItems;
+}
+
+void HBList::AddItem( void * item )
+{
+ if( !item )
+ {
+ return;
+ }
+
+ if( fNbItems == fAllocItems )
+ {
+ fAllocItems += HBLIST_DEFAULT_SIZE;
+ fItems = (void**) realloc( fItems, fAllocItems * sizeof( void* ) );
+ }
+
+ fItems[fNbItems] = item;
+
+ fNbItems++;
+}
+
+void HBList::RemoveItem( void * item )
+{
+ if( !item || !fNbItems )
+ {
+ return;
+ }
+
+ uint32_t i;
+ for( i = 0; i < fNbItems; i++ )
+ {
+ if( fItems[i] == item )
+ {
+ break;
+ }
+ }
+
+ if( fItems[i] != item )
+ {
+ Log( "HBList::RemoveItem() : item not in the list" );
+ return;
+ }
+
+ for( ; i < fNbItems - 1; i++ )
+ {
+ fItems[i] = fItems[i+1];
+ }
+
+ fNbItems--;
+}
+
+void * HBList::ItemAt( uint32_t index )
+{
+ if( index < fNbItems )
+ {
+ return fItems[index];
+ }
+
+ return NULL;
+}
+
+HBTitle::HBTitle( char * device, int index )
+{
+ fDevice = strdup( device );
+ fIndex = index;
+
+ fAudioList = new HBList();
+ fPSFifo = NULL;
+ fMpeg2Fifo = NULL;
+ fRawFifo = NULL;
+ fMpeg4Fifo = NULL;
+
+ fTopCrop = 0;
+ fBottomCrop = 0;
+ fLeftCrop = 0;
+ fRightCrop = 0;
+ fBitrate = 1024;
+ fDeinterlace = false;
+ fTwoPass = false;
+}
+
+HBTitle::~HBTitle()
+{
+ HBAudio * audio;
+
+ while( ( audio = (HBAudio*) fAudioList->ItemAt( 0 ) ) )
+ {
+ fAudioList->RemoveItem( audio );
+ delete audio;
+ }
+ delete fAudioList;
+}
+
+/* Audio track */
+HBAudio::HBAudio( int id, char * description )
+{
+ fId = id;
+ fDescription = strdup( description );
+ fOutSampleRate = 44100;
+ fOutBitrate = 128;
+
+ fAc3Fifo = NULL;
+ fRawFifo = NULL;
+ fMp3Fifo = NULL;
+}
+
+HBAudio::~HBAudio()
+{
+ free( fDescription );
+}