o Moved original '-g' option in asdc-wrap to '-x' (currently
authorjhurst <jhurst@cinecert.com>
Mon, 16 Apr 2018 17:57:06 +0000 (17:57 +0000)
committerjhurst <>
Mon, 16 Apr 2018 17:57:06 +0000 (17:57 +0000)
 o Added '-g' option to asdcp-wrap to set MCA language
 o Re-ordered some options in the asdcp-wrap help message
 o Added '-g' option to as-02-wrap to set MCA language
 o Re-ordered some options in the as-02-wrap help message
 o Added "MCALanguage" keyword option to asdcp.MXFWriter constructor

src/as-02-wrap.cpp
src/asdcp-wrap.cpp

index 49b552f73ff83a7d2ff7f72a73ac01bda6ee2afa..174365b8c67a71f7d68c26040ed361c700b21144 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2011-2017, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
+Copyright (c) 2011-2018, Robert Scheler, Heiko Sparenberg Fraunhofer IIS,
 John Hurst
 
 All rights reserved.
@@ -105,7 +105,7 @@ banner(FILE* stream = stdout)
 {
   fprintf(stream, "\n\
 %s (asdcplib %s)\n\n\
-Copyright (c) 2011-2017, Robert Scheler, Heiko Sparenberg Fraunhofer IIS, John Hurst\n\n\
+Copyright (c) 2011-2018, 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",
@@ -140,22 +140,25 @@ Options:\n\
   -e                - Encrypt JP2K headers (default)\n\
   -E                - Do not encrypt JP2K headers\n\
   -F (0|1)          - Set field dominance for interlaced image (default: 0)\n\
+  -g <rfc-5646-code>\n\
+                    - Create MCA labels having the given RFC 5646 language code\n\
+                      (requires option \"-m\")\n\
   -i                - Indicates input essence is interlaced fields (forces -Y)\n\
   -j <key-id-str>   - Write key ID instead of creating a random value\n\
   -k <key-string>   - Use key for ciphertext operations\n\
   -l <first>,<second>\n\
                     - Integer values that set the VideoLineMap when creating\n\
                       interlaced YCbCr files\n\
-  -M                - Do not create HMAC values when writing\n\
   -m <expr>         - Write MCA labels using <expr>.  Example:\n\
                         51(L,R,C,LFE,Ls,Rs,),HI,VIN\n\
+  -M                - Do not create HMAC values when writing\n\
   -n <UL>           - Set the TransferCharacteristic UL\n\
   -o <min>,<max>    - Mastering Display luminance, cd*m*m, e.g., \".05,100\"\n\
   -O <rx>,<ry>,<gx>,<gy>,<bx>,<by>,<wx>,<wy>\n\
                     - Mastering Display Color Primaries and white point\n\
                       e.g., \".64,.33,.3,.6,.15,.06,.3457,.3585\"\n\
-  -P <string>       - Set NamespaceURI property when creating timed text MXF\n\
   -p <ul>           - Set broadcast profile\n\
+  -P <string>       - Set NamespaceURI property when creating timed text MXF\n\
   -q <UL>           - Set the CodingEquations UL\n\
   -r <n>/<d>        - Edit Rate of the output file.  24/1 is the default\n\
   -R                - Indicates RGB image essence (default except with -c)\n\
@@ -167,12 +170,12 @@ Options:\n\
   -W                - Read input file only, do not write source file\n\
   -x <int>          - Horizontal subsampling degree (default: 2)\n\
   -X <int>          - Vertical subsampling degree (default: 2)\n\
-  -Y                - Indicates YCbCr image essence (default with -c), uses\n\
-                      default values for White Ref, Black Ref and Color Range,\n\
-                       940,64,897, indicating 10 bit standard Video Range\n\
   -y <white-ref>[,<black-ref>[,<color-range>]]\n\
                     - Same as -Y but White Ref, Black Ref and Color Range are\n\
                       set from the given argument\n\
+  -Y                - Indicates YCbCr image essence (default with -c), uses\n\
+                      default values for White Ref, Black Ref and Color Range,\n\
+                       940,64,897, indicating 10 bit standard Video Range\n\
   -z                - Fail if j2c inputs have unequal parameters (default)\n\
   -Z                - Ignore unequal parameters in j2c inputs\n\
 \n\
@@ -249,6 +252,7 @@ public:
 
   UL channel_assignment, picture_coding, transfer_characteristic, color_primaries, coding_equations;
   ASDCP::MXF::AS02_MCAConfigParser mca_config;
+  std::string mca_language;
 
   ui32_t rgba_MaxRef;
   ui32_t rgba_MinRef;
@@ -433,6 +437,7 @@ public:
     coding_equations = g_dict->ul(MDD_CodingEquations_709);
     color_primaries = g_dict->ul(MDD_ColorPrimaries_BT709);
     transfer_characteristic = g_dict->ul(MDD_TransferCharacteristics_709);
+    std::string mca_config_str;
 
     for ( int i = 1; i < argc; i++ )
       {
@@ -522,6 +527,11 @@ public:
                  }
                break;
 
+             case 'g':
+               TEST_EXTRA_ARG(i, 'g');
+               mca_language = argv[i];
+               break;
+
              case 'h': help_flag = true; break;
 
              case 'i':
@@ -570,10 +580,7 @@ public:
 
              case 'm':
                TEST_EXTRA_ARG(i, 'm');
-               if ( ! mca_config.DecodeString(argv[i]) )
-                 {
-                   return;
-                 }
+               mca_config_str = argv[i];
                break;
 
              case 'n':
@@ -707,9 +714,29 @@ public:
          }
       }
 
+    if ( ! mca_config_str.empty() )
+      {
+       if ( mca_language.empty() )
+         {
+           if ( ! mca_config.DecodeString(mca_config_str) )
+             {
+               return;
+             }
+         }
+       else
+         {
+           if ( ! mca_config.DecodeString(mca_config_str, mca_language) )
+             {
+               return;
+             }
+         }
+      }
+
     if ( help_flag || version_flag || show_ul_values_flag )
-      return;
-    
+      {
+       return;
+      }
+
     if ( filenames.size() < 2 )
       {
        fputs("Option requires at least two filename arguments: <input-file> <output-file>\n", stderr);
index 4312cc785fc482423845ccd17320165d80bfac55..66f291acc1be342fbbd253ea49ea70277bd88dd6 100755 (executable)
@@ -1,5 +1,6 @@
 /*
-Copyright (c) 2003-2016, John Hurst
+Copyright (c) 2003-2018
+, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -113,7 +114,7 @@ banner(FILE* stream = stdout)
 {
   fprintf(stream, "\n\
 %s (asdcplib %s)\n\n\
-Copyright (c) 2003-2015 John Hurst\n\n\
+Copyright (c) 2003-2018 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",
@@ -135,35 +136,38 @@ USAGE: %s [-h|-help] [-V]\n\
 
   fprintf(stream, "\
 Options:\n\
+  -h | -help        - Show help\n\
+  -V                - Show version information\n\
   -3                - Create a stereoscopic image file. Expects two\n\
                       directories of JP2K codestreams (directories must have\n\
                       an equal number of frames; the left eye is first)\n\
+  -a <UUID>         - Specify the Asset ID of the file\n\
   -A <UL>           - Set DataEssenceCoding UL value in an Aux Data file\n\
+  -b <buffer-size>  - Specify size in bytes of picture frame buffer\n\
+                      Defaults to 4,194,304 (4MB)\n\
   -C <UL>           - Set ChannelAssignment UL value in a PCM file\n\
-  -h | -help        - Show help\n\
-  -V                - Show version information\n\
+  -d <duration>     - Number of frames to process, default all\n\
   -e                - Encrypt MPEG or JP2K headers (default)\n\
   -E                - Do not encrypt MPEG or JP2K headers\n\
+  -f <start-frame>  - Starting frame number, default 0\n\
+  -g <rfc-5646-code>\n\
+                    - Create MCA labels having the given RFC 5646 language code\n\
+                      (requires option \"-m\")\n\
   -j <key-id-str>   - Write key ID instead of creating a random value\n\
   -k <key-string>   - Use key for ciphertext operations\n\
-  -M                - Do not create HMAC values when writing\n\
-  -m <expr>         - Write MCA labels using <expr>.  Example:\n\
-                        51(L,R,C,LFE,Ls,Rs,),HI,VIN\n\
-                        Note: The symbol '-' may be used for an unlabeled\n\
-                              channel, but not within a soundfield.\n\
-  -a <UUID>         - Specify the Asset ID of the file\n\
-  -b <buffer-size>  - Specify size in bytes of picture frame buffer\n\
-                      Defaults to 4,194,304 (4MB)\n\
-  -d <duration>     - Number of frames to process, default all\n\
-  -f <start-frame>  - Starting frame number, default 0\n\
   -l <label>        - Use given channel format label when writing MXF sound\n\
                       files. SMPTE 429-2 labels: '5.1', '6.1', '7.1',\n\
                       '7.1DS', 'WTF'\n\
                       Default is no label (valid for Interop only).\n\
   -L                - Write SMPTE UL values instead of MXF Interop\n\
-  -P <UL>           - Set PictureEssenceCoding UL value in a JP2K file\n\
+  -m <expr>         - Write MCA labels using <expr>.  Example:\n\
+                        51(L,R,C,LFE,Ls,Rs,),HI,VIN\n\
+                        Note: The symbol '-' may be used for an unlabeled\n\
+                              channel, but not within a soundfield.\n\
+  -M                - Do not create HMAC values when writing\n\
   -p <rate>         - fps of picture when wrapping PCM or JP2K:\n\
                       Use one of [23|24|25|30|48|50|60], 24 is default\n\
+  -P <UL>           - Set PictureEssenceCoding UL value in a JP2K file\n\
   -s                - Insert a Dolby Atmos synchronization channel when\n\
                       wrapping PCM. This implies a -L option(SMPTE ULs) and \n\
                       will overide -C and -l options with Configuration 4 \n\
@@ -248,6 +252,7 @@ public:
   ui32_t max_object_count;     // max object count for atmos wrapping
   bool use_interop_sound_wtf;  // make true to force WTF assignment label instead of MCA
   ASDCP::MXF::ASDCP_MCAConfigParser mca_config;
+  std::string mca_language;
 
   //
   Rational PictureRate()
@@ -313,6 +318,7 @@ public:
   {
     memset(key_value, 0, KeyLen);
     memset(key_id_value, 0, UUIDlen);
+    std::string mca_config_str;
 
     for ( int i = 1; i < argc; i++ )
       {
@@ -386,7 +392,11 @@ public:
                start_frame = Kumu::xabs(strtol(argv[i], 0, 10));
                break;
 
-             case 'g': write_partial_pcm_flag = true; break;
+             case 'g':
+               TEST_EXTRA_ARG(i, 'g');
+               mca_language = argv[i];
+               break;
+
              case 'h': help_flag = true; break;
 
              case 'j': key_id_flag = true;
@@ -427,10 +437,7 @@ public:
 
              case 'm':
                TEST_EXTRA_ARG(i, 'm');
-               if ( ! mca_config.DecodeString(argv[i]) )
-                 {
-                   return;
-                 }
+               mca_config_str = argv[i];
                break;
 
              case 'P':
@@ -453,6 +460,7 @@ public:
              case 'v': verbose_flag = true; break;
              case 'w': use_interop_sound_wtf = true; break;
              case 'W': no_write_flag = true; break;
+             case 'x': write_partial_pcm_flag = true; break;
              case 'Z': j2c_pedantic = false; break;
              case 'z': j2c_pedantic = true; break;
 
@@ -476,8 +484,28 @@ public:
          }
       }
 
+    if ( ! mca_config_str.empty() )
+      {
+       if ( mca_language.empty() )
+         {
+           if ( ! mca_config.DecodeString(mca_config_str) )
+             {
+               return;
+             }
+         }
+       else
+         {
+           if ( ! mca_config.DecodeString(mca_config_str, mca_language) )
+             {
+               return;
+             }
+         }
+      }
+               
     if ( help_flag || version_flag )
-      return;
+      {
+       return;
+      }
 
     if ( filenames.size() < 2 )
       {