Modified to enforce execution order of the predicates
[asdcplib.git] / src / blackwave.cpp
index 311a0dbc4c5f6112b45ae98462b8f335bef26c19..1a89a0e2f6ba5ec350a0670c88da4124e5ec2076 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2005, John Hurst
+Copyright (c) 2005-2012, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,7 @@ using namespace ASDCP;
 //
 // command line option parser class
 
-static const char* PACKAGE = "wavsplit";    // program name for messages
+static const char* PROGRAM_NAME = "blackwave";    // program name for messages
 
 // Macros used to test command option data state.
 
@@ -56,12 +56,12 @@ banner(FILE* stream = stderr)
 {
   fprintf(stream, "\n\
 %s (asdcplib %s)\n\n\
-Copyright (c) 2005-2006 John Hurst\n\n\
-wavesplit is part of asdcplib.\n\
+Copyright (c) 2005-2012 John Hurst\n\n\
+%s is part of asdcplib.\n\
 asdcplib may be copied only under the terms of the license found at\n\
 the top of every file in the asdcplib distribution kit.\n\n\
 Specify the -h (help) option for further information about %s\n\n",
-         PACKAGE, ASDCP::Version(), PACKAGE);
+         PROGRAM_NAME, ASDCP::Version(), PROGRAM_NAME, PROGRAM_NAME);
 }
 
 //
@@ -73,14 +73,15 @@ USAGE: %s [-v|-h[-d]] <filename>\n\
 \n\
   -V              - Show version\n\
   -h              - Show help\n\
-  -d <duration>   - Number of 2k-sample frames to process, default 1440\n\
+  -d <duration>   - Number of edit units to process, default 1440\n\
+  -9              - Make a 96 kHz file (default 48 kHz)\n\
 \n\
 Other Options:\n\
   -v              - Verbose, show extra detail during run\n\
 \n\
   NOTES: o There is no option grouping, all options must be distinct arguments.\n\
          o All option arguments must be separated from the option by whitespace.\n\
-\n", PACKAGE);
+\n", PROGRAM_NAME);
 }
 
 //
@@ -94,16 +95,17 @@ public:
   bool   verbose_flag;   // true if the verbose option was selected
   bool   version_flag;   // true if the version display option was selected
   bool   help_flag;      // true if the help display option was selected
+  bool   s96_flag;       // true if the samples should be at 96 kHz
   ui32_t duration;       // number of frames to be processed
   const char* filename;  // filename prefix for files written by the extract mode
 
   CommandOptions(int argc, const char** argv) :
-    error_flag(true), verbose_flag(false), version_flag(false), help_flag(false),
+    error_flag(true), verbose_flag(false), version_flag(false), help_flag(false), s96_flag(false),
     duration(1440), filename(0)
   {
     for ( int i = 1; i < argc; i++ )
       {
-       if ( argv[i][0] == '-' && isalpha(argv[i][1]) && argv[i][2] == 0 )
+       if ( argv[i][0] == '-' && ( isalpha(argv[i][1]) || isdigit(argv[i][1]) ) && argv[i][2] == 0 )
          {
            switch ( argv[i][1] )
              {
@@ -113,7 +115,11 @@ public:
 
              case 'd':
                TEST_EXTRA_ARG(i, 'd');
-               duration = atoi(argv[i]); // TODO: test for negative value, should use strtol()
+               duration = Kumu::xabs(strtol(argv[i], 0, 10));
+               break;
+
+             case '9':
+               s96_flag = true;
                break;
 
              default:
@@ -152,13 +158,13 @@ make_black_wav_file(CommandOptions& Options)
   PCM::FrameBuffer FrameBuffer;
   PCM::AudioDescriptor ADesc;
 
-  ADesc.SampleRate = Rational(24,1);
-  ADesc.AudioSamplingRate = ASDCP::SampleRate_48k;
+  ADesc.EditRate = Rational(24,1);
+  ADesc.AudioSamplingRate = Options.s96_flag ? ASDCP::SampleRate_96k : ASDCP::SampleRate_48k;
   ADesc.Locked = 0;
   ADesc.ChannelCount = 1;
   ADesc.QuantizationBits = 24;
   ADesc.BlockAlign = 3;
-  ADesc.AvgBps = 14400;
+  ADesc.AvgBps = ADesc.BlockAlign * ADesc.AudioSamplingRate.Quotient();
   ADesc.LinkedTrackID = 1;
   ADesc.ContainerDuration = Options.duration;
 
@@ -167,10 +173,10 @@ make_black_wav_file(CommandOptions& Options)
   memset(FrameBuffer.Data(), 0, FrameBuffer.Capacity());
   FrameBuffer.Size(FrameBuffer.Capacity());
 
-  if ( 1 ) // Options.verbose_flag )
+  if ( Options.verbose_flag )
     {
-      fprintf(stderr, "48Khz PCM Audio, %s fps (%u spf)\n", "24",
-             PCM::CalcSamplesPerFrame(ADesc));
+      fprintf(stderr, "%s kHz PCM Audio, 24 fps (%u spf)\n",
+             (Options.s96_flag?"96":"48"), PCM::CalcSamplesPerFrame(ADesc));
       fputs("AudioDescriptor:\n", stderr);
       PCM::AudioDescriptorDump(ADesc);
     }
@@ -181,8 +187,8 @@ make_black_wav_file(CommandOptions& Options)
 
   if ( ASDCP_SUCCESS(result) )
     {
-      Wav::SimpleWaveHeader WavHeader(ADesc);
-      result = WavHeader.WriteToFile(OutFile);
+       RF64::SimpleRF64Header WavHeader(ADesc);
+       result = WavHeader.WriteToFile(OutFile);
     }
 
   if ( ASDCP_SUCCESS(result) )