X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fasdcp-test.cpp;h=7889974b59b1fd63c878b75c7ecfe4b3109933f4;hb=ec832f280ffa16392808ee4976deb5b190a6e205;hp=ba610157d8db5eb3f696d1fa08aedd218c6f2062;hpb=766b93f3654e6e80623a84774fce0307694340f9;p=asdcplib.git diff --git a/src/asdcp-test.cpp b/src/asdcp-test.cpp index ba61015..7889974 100755 --- a/src/asdcp-test.cpp +++ b/src/asdcp-test.cpp @@ -66,7 +66,7 @@ const ui32_t FRAME_BUFFER_SIZE = 4 * Kumu::Megabyte; // // command line option parser class -static const char* PACKAGE = "asdcp-test"; // program name for messages +static const char* PROGRAM_NAME = "asdcp-test"; // program name for messages const ui32_t MAX_IN_FILES = 16; // maximum number of input files handled by // the command option parser @@ -83,10 +83,7 @@ public: memcpy(ProductUUID, default_ProductUUID_Data, UUIDlen); CompanyName = "WidgetCo"; ProductName = "asdcp-test"; - - char s_buf[128]; - snprintf(s_buf, 128, "%u.%u.%u", VERSION_MAJOR, VERSION_APIMINOR, VERSION_IMPMINOR); - ProductVersion = s_buf; + ProductVersion = ASDCP::Version(); } } s_MyInfo; @@ -110,7 +107,7 @@ Copyright (c) 2003-2008 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", - PACKAGE, ASDCP::Version(), PACKAGE); + PROGRAM_NAME, ASDCP::Version(), PROGRAM_NAME); } // @@ -135,8 +132,8 @@ USAGE: %s -c [-3] [-b ] [-d ] [-e|-E]\n\ \n\ %s -x [-3] [-b ] [-d ]\n\ [-f ] [-m] [-p ] [-R] [-s ] [-S|-1]\n\ - [-v] [-W] \n\ -\n", PACKAGE, PACKAGE, PACKAGE, PACKAGE, PACKAGE, PACKAGE, PACKAGE); + [-v] [-W] [-w] \n\ +\n", PROGRAM_NAME, PROGRAM_NAME, PROGRAM_NAME, PROGRAM_NAME, PROGRAM_NAME, PROGRAM_NAME, PROGRAM_NAME); fprintf(stream, "\ Major modes:\n\ @@ -183,6 +180,8 @@ Read/Write Options:\n\ -1 - Split Wave essence to mono WAV files during extract.\n\ Default is multichannel WAV\n\ -W - Read input file only, do not write source file\n\ + -w - Width of numeric element in a series of frame file names\n\ + (use with -x, default 6).\n\ \n"); fprintf(stream, "\ @@ -241,6 +240,7 @@ public: bool version_flag; // true if the version display option was selected bool help_flag; // true if the help display option was selected bool stereo_image_flag; // if true, expect stereoscopic JP2K input (left eye first) + ui32_t number_width; // number of digits in a serialized filename (for JPEG extract) ui32_t start_frame; // frame number to begin processing ui32_t duration; // number of frames to be processed bool duration_flag; // true if duration argument given @@ -276,7 +276,8 @@ public: mode(MMT_NONE), error_flag(true), key_flag(false), key_id_flag(false), encrypt_header_flag(true), write_hmac(true), read_hmac(false), split_wav(false), mono_wav(false), verbose_flag(false), fb_dump_size(0), showindex_flag(false), showheader_flag(false), - no_write_flag(false), version_flag(false), help_flag(false), stereo_image_flag(false), start_frame(0), + no_write_flag(false), version_flag(false), help_flag(false), stereo_image_flag(false), + number_width(6), start_frame(0), duration(0xffffffff), duration_flag(false), do_repeat(false), use_smpte_labels(false), picture_rate(24), fb_size(FRAME_BUFFER_SIZE), file_count(0), file_root(0), out_file(0) { @@ -301,24 +302,15 @@ public: case '1': mono_wav = true; break; case '2': split_wav = true; break; case '3': stereo_image_flag = true; break; - case 'i': mode = MMT_INFO; break; - case 'G': mode = MMT_GOP_START; break; - case 'W': no_write_flag = true; break; - case 'n': showindex_flag = true; break; - case 'H': showheader_flag = true; break; - case 'R': do_repeat = true; break; - case 'S': split_wav = true; break; - case 'V': version_flag = true; break; - case 'h': help_flag = true; break; - case 'v': verbose_flag = true; break; - case 'g': mode = MMT_GEN_KEY; break; - case 'U': mode = MMT_UL_LIST; break; - case 'u': mode = MMT_GEN_ID; break; - case 'e': encrypt_header_flag = true; break; - case 'E': encrypt_header_flag = false; break; - case 'M': write_hmac = false; break; - case 'm': read_hmac = true; break; - case 'L': use_smpte_labels = true; break; + + case 'b': + TEST_EXTRA_ARG(i, 'b'); + fb_size = abs(atoi(argv[i])); + + if ( verbose_flag ) + fprintf(stderr, "Frame Buffer size: %u bytes.\n", fb_size); + + break; case 'c': TEST_EXTRA_ARG(i, 'c'); @@ -326,26 +318,26 @@ public: out_file = argv[i]; break; - case 'x': - TEST_EXTRA_ARG(i, 'x'); - mode = MMT_EXTRACT; - file_root = argv[i]; + case 'd': + TEST_EXTRA_ARG(i, 'd'); + duration_flag = true; + duration = abs(atoi(argv[i])); break; - case 'k': key_flag = true; - TEST_EXTRA_ARG(i, 'k'); - { - ui32_t length; - Kumu::hex2bin(argv[i], key_value, KeyLen, &length); + case 'E': encrypt_header_flag = false; break; + case 'e': encrypt_header_flag = true; break; - if ( length != KeyLen ) - { - fprintf(stderr, "Unexpected key length: %u, expecting %u characters.\n", length, KeyLen); - return; - } - } + case 'f': + TEST_EXTRA_ARG(i, 'f'); + start_frame = abs(atoi(argv[i])); break; + case 'G': mode = MMT_GOP_START; break; + case 'g': mode = MMT_GEN_KEY; break; + case 'H': showheader_flag = true; break; + case 'h': help_flag = true; break; + case 'i': mode = MMT_INFO; break; + case 'j': key_id_flag = true; TEST_EXTRA_ARG(i, 'j'); { @@ -360,36 +352,55 @@ public: } break; - case 'f': - TEST_EXTRA_ARG(i, 'f'); - start_frame = abs(atoi(argv[i])); - break; + case 'k': key_flag = true; + TEST_EXTRA_ARG(i, 'k'); + { + ui32_t length; + Kumu::hex2bin(argv[i], key_value, KeyLen, &length); - case 'd': - TEST_EXTRA_ARG(i, 'd'); - duration_flag = true; - duration = abs(atoi(argv[i])); + if ( length != KeyLen ) + { + fprintf(stderr, "Unexpected key length: %u, expecting %u characters.\n", length, KeyLen); + return; + } + } break; + + case 'L': use_smpte_labels = true; break; + case 'M': write_hmac = false; break; + case 'm': read_hmac = true; break; + case 'n': showindex_flag = true; break; + case 'p': TEST_EXTRA_ARG(i, 'p'); picture_rate = abs(atoi(argv[i])); break; + case 'R': do_repeat = true; break; + case 'S': split_wav = true; break; + case 's': TEST_EXTRA_ARG(i, 's'); fb_dump_size = abs(atoi(argv[i])); break; case 't': mode = MMT_DIGEST; break; + case 'U': mode = MMT_UL_LIST; break; + case 'u': mode = MMT_GEN_ID; break; + case 'V': version_flag = true; break; + case 'v': verbose_flag = true; break; + case 'W': no_write_flag = true; break; - case 'b': - TEST_EXTRA_ARG(i, 'b'); - fb_size = abs(atoi(argv[i])); - - if ( verbose_flag ) - fprintf(stderr, "Frame Buffer size: %u bytes.\n", fb_size); + case 'w': + TEST_EXTRA_ARG(i, 'w'); + number_width = abs(atoi(argv[i])); + break; + case 'x': + TEST_EXTRA_ARG(i, 'x'); + mode = MMT_EXTRACT; + file_root = argv[i]; break; default: @@ -877,6 +888,10 @@ read_JP2K_S_file(CommandOptions& Options) if ( last_frame > frame_count ) last_frame = frame_count; + char left_format[64]; char right_format[64]; + snprintf(left_format, 64, "%%s%%0%duL.j2c", Options.number_width); + snprintf(right_format, 64, "%%s%%0%duR.j2c", Options.number_width); + for ( ui32_t i = Options.start_frame; ASDCP_SUCCESS(result) && i < last_frame; i++ ) { result = Reader.ReadFrame(i, JP2K::SP_LEFT, FrameBuffer, Context, HMAC); @@ -885,7 +900,7 @@ read_JP2K_S_file(CommandOptions& Options) { Kumu::FileWriter OutFile; ui32_t write_count; - snprintf(filename, filename_max, "%s%06uL.j2c", Options.file_root, i); + snprintf(filename, filename_max, left_format, Options.file_root, i); result = OutFile.OpenWrite(filename); if ( ASDCP_SUCCESS(result) ) @@ -902,7 +917,7 @@ read_JP2K_S_file(CommandOptions& Options) { Kumu::FileWriter OutFile; ui32_t write_count; - snprintf(filename, filename_max, "%s%06uR.j2c", Options.file_root, i); + snprintf(filename, filename_max, right_format, Options.file_root, i); result = OutFile.OpenWrite(filename); if ( ASDCP_SUCCESS(result) ) @@ -1087,6 +1102,9 @@ read_JP2K_file(CommandOptions& Options) if ( last_frame > frame_count ) last_frame = frame_count; + char name_format[64]; + snprintf(name_format, 64, "%%s%%0%du.j2c", Options.number_width); + for ( ui32_t i = Options.start_frame; ASDCP_SUCCESS(result) && i < last_frame; i++ ) { result = Reader.ReadFrame(i, FrameBuffer, Context, HMAC); @@ -1096,7 +1114,7 @@ read_JP2K_file(CommandOptions& Options) Kumu::FileWriter OutFile; char filename[256]; ui32_t write_count; - snprintf(filename, 256, "%s%06u.j2c", Options.file_root, i); + snprintf(filename, 256, name_format, Options.file_root, i); result = OutFile.OpenWrite(filename); if ( ASDCP_SUCCESS(result) ) @@ -1769,7 +1787,7 @@ main(int argc, const char** argv) if ( Options.error_flag ) { - fprintf(stderr, "There was a problem. Type %s -h for help.\n", PACKAGE); + fprintf(stderr, "There was a problem. Type %s -h for help.\n", PROGRAM_NAME); return 3; }