o General review of Batch/Array distinction throughout the project
[asdcplib.git] / src / as-02-wrap.cpp
index 8aac348e008996b4e529633e2b255eb9de058fca..09abd984828291419c32f38f3093ab422f452072 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2011-2014, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
+Copyright (c) 2011-2015, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
 John Hurst
 
 All rights reserved.
@@ -107,7 +107,7 @@ banner(FILE* stream = stdout)
 {
   fprintf(stream, "\n\
 %s (asdcplib %s)\n\n\
-Copyright (c) 2011-2014, Robert Scheler, Heiko Sparenberg Fraunhofer IIS, John Hurst\n\n\
+Copyright (c) 2011-2015, Robert Scheler, Heiko Sparenberg Fraunhofer IIS, John Hurst\n\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",
@@ -173,7 +173,7 @@ decode_rational(const char* str_rat)
 {
   assert(str_rat);
   ui32_t Num = atoi(str_rat);
-  ui32_t Den = 0;
+  ui32_t Den = 1;
 
   const char* den_str = strrchr(str_rat, '/');
   if ( den_str != 0 )
@@ -283,7 +283,7 @@ public:
 
              case 'b':
                TEST_EXTRA_ARG(i, 'b');
-               fb_size = abs(atoi(argv[i]));
+               fb_size = Kumu::xabs(strtol(argv[i], 0, 10));
 
                if ( verbose_flag )
                  fprintf(stderr, "Frame Buffer size: %u bytes.\n", fb_size);
@@ -301,12 +301,12 @@ public:
 
              case 'D':
                TEST_EXTRA_ARG(i, 'D');
-               component_depth = abs(atoi(argv[i]));
+               component_depth = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 'd':
                TEST_EXTRA_ARG(i, 'd');
-               duration = abs(atoi(argv[i]));
+               duration = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 'E': encrypt_header_flag = false; break;
@@ -314,7 +314,7 @@ public:
 
              case 'F':
                TEST_EXTRA_ARG(i, 'F');
-               field_dominance = abs(atoi(argv[i]));
+               field_dominance = Kumu::xabs(strtol(argv[i], 0, 10));
                if ( field_dominance > 1 )
                  {
                    fprintf(stderr, "Field dominance value must be \"0\" or \"1\"\n");
@@ -388,17 +388,17 @@ public:
 
              case 's':
                TEST_EXTRA_ARG(i, 's');
-               partition_space = abs(atoi(argv[i]));
+               partition_space = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 't':
                TEST_EXTRA_ARG(i, 't');
-               rgba_MinRef = abs(atoi(argv[i]));
+               rgba_MinRef = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 'T':
                TEST_EXTRA_ARG(i, 'T');
-               rgba_MaxRef = abs(atoi(argv[i]));
+               rgba_MaxRef = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 'u': show_ul_values_flag = true; break;
@@ -408,12 +408,12 @@ public:
 
              case 'x':
                TEST_EXTRA_ARG(i, 'x');
-               horizontal_subsampling = abs(atoi(argv[i]));
+               horizontal_subsampling = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 'X':
                TEST_EXTRA_ARG(i, 'X');
-               vertical_subsampling = abs(atoi(argv[i]));
+               vertical_subsampling = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
              case 'Y':
@@ -759,14 +759,6 @@ write_PCM_file(CommandOptions& Options)
 
          if ( ASDCP_SUCCESS(result) )
            {
-             if ( FrameBuffer.Size() != FrameBuffer.Capacity() )
-               {
-                 fprintf(stderr, "WARNING: Last frame read was short, PCM input is possibly not frame aligned.\n");
-                 fprintf(stderr, "Expecting %u bytes, got %u.\n", FrameBuffer.Capacity(), FrameBuffer.Size());
-                 result = RESULT_ENDOFFILE;
-                 continue;
-               }
-
              if ( Options.verbose_flag )
                FrameBuffer.Dump(stderr, Options.fb_dump_size);
 
@@ -823,6 +815,8 @@ write_timed_text_file(CommandOptions& Options)
   if ( ASDCP_SUCCESS(result) )
     {
       Parser.FillTimedTextDescriptor(TDesc);
+      TDesc.EditRate = Options.edit_rate;
+      TDesc.ContainerDuration = Options.duration;
       FrameBuffer.Capacity(Options.fb_size);
 
       if ( Options.verbose_flag )
@@ -835,6 +829,8 @@ write_timed_text_file(CommandOptions& Options)
   if ( ASDCP_SUCCESS(result) && ! Options.no_write_flag )
     {
       WriterInfo Info = s_MyInfo;  // fill in your favorite identifiers here
+      Info.LabelSetType = LS_MXF_SMPTE;
+
       if ( Options.asset_id_flag )
        memcpy(Info.AssetUUID, Options.asset_id_value, UUIDlen);
       else
@@ -963,6 +959,10 @@ main(int argc, const char** argv)
          result = write_PCM_file(Options);
          break;
 
+       case ESS_TIMED_TEXT:
+         result = write_timed_text_file(Options);
+         break;
+
        default:
          fprintf(stderr, "%s: Unknown file type, not ASDCP-compatible essence.\n",
                  Options.filenames.front().c_str());