/* $Id: Test.cpp,v 1.5 2003/10/05 14:28:40 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. */ #include #include "Manager.h" volatile bool die; void SigHandler( int signal ) { die = true; } int main( int argc, char ** argv ) { die = false; /* Exit ASAP on Ctrl-C */ signal( SIGINT, SigHandler ); /* Default values */ bool debug = false; char * device = NULL; char * outputFile = NULL; int titleIdx = 1; bool twoPass = false; bool deinterlace = false; int width = 0; int topCrop = 0; int bottomCrop = 0; int leftCrop = 0; int rightCrop = 0; /* Parse command line */ int c; while( ( c = getopt( argc, argv, "vd:o:t:piw:j:k:l:m:" ) ) != -1 ) { switch( c ) { case 'v': debug = true; break; case 'd': device = strdup( optarg ); break; case 'o': outputFile = strdup( optarg ); break; case 't': titleIdx = atoi( optarg ); break; case 'p': twoPass = true; break; case 'i': deinterlace = true; break; case 'w': width = atoi( optarg ); break; case 'j': topCrop = atoi( optarg ); break; case 'k': bottomCrop = atoi( optarg ); break; case 'l': leftCrop = atoi( optarg ); break; case 'm': rightCrop = atoi( optarg ); break; default: break; } } /* Check parsed options */ if( !device || !outputFile ) { fprintf( stderr, "Syntax: HBTest [options] -d -o \n" "Possible options are :\n" " -v verbose output\n" " -t select a title (default is 1)\n" " -p 2-pass encoding\n" " -i deinterlace picture\n" " -w output width\n" " -j top cropping\n" " -k bottom cropping\n" " -l left cropping\n" " -m right cropping\n" ); return 1; } /* Create the manager thread */ HBManager * manager = new HBManager( debug ); /* Tell the manager to scan the specified volume */ manager->ScanVolumes( device ); HBStatus status; while( !die ) { if( !manager->NeedUpdate() ) { Snooze( 10000 ); continue; } status = manager->GetStatus(); switch( status.fMode ) { case HB_MODE_UNDEF: break; case HB_MODE_SCANNING: if( !status.fScannedTitle ) { fprintf( stderr, "Scanning %s\n", status.fScannedVolume ); } else { fprintf( stderr, "Scanning %s, title %d\n", status.fScannedVolume, status.fScannedTitle ); } break; case HB_MODE_READY_TO_RIP: { /* Find the title */ HBTitle * title = NULL; for( uint32_t i = 0; i < status.fTitleList->CountItems(); i++ ) { title = (HBTitle*) status.fTitleList->ItemAt( i ); if( title->fIndex == titleIdx ) { break; } else { title = NULL; } } if( !title ) { fprintf( stderr, "Error: unvalid title. Possible " "choices are: " ); for( uint32_t i = 0; i < status.fTitleList->CountItems(); i++ ) { title = (HBTitle*) status.fTitleList->ItemAt( i ); fprintf( stderr, "%d%s", title->fIndex, ( i == status.fTitleList->CountItems() - 1 ) ? ".\n" : ", " ); } die = true; break; } title->fTwoPass = twoPass; title->fDeinterlace = deinterlace; if( width ) title->fOutWidth = width; title->fTopCrop = topCrop; title->fBottomCrop = bottomCrop; title->fLeftCrop = leftCrop; title->fRightCrop = rightCrop; HBAudio * audio = (HBAudio*) title->fAudioList->ItemAt( 0 ); manager->StartRip( title, audio, NULL, outputFile ); break; } case HB_MODE_ENCODING: fprintf( stderr, "Progress = %.2f %%, %.2f fps " "(%02d:%02d:%02d remaining)\n", 100 * status.fPosition, status.fFrameRate, status.fRemainingTime / 3600, ( status.fRemainingTime % 3600 ) / 60, status.fRemainingTime % 60 ); break; case HB_MODE_DONE: fprintf( stderr, "Done\n" ); die = true; break; case HB_MODE_CANCELED: fprintf( stderr, "Canceled\n" ); die = true; break; case HB_MODE_ERROR: fprintf( stderr, "Error\n" ); die = true; break; default: break; } } delete manager; if( device ) free( device ); if( outputFile ) free( outputFile ); return 0; }