Added an option for disabling any variable data (segment UIDs, unique integers for other UIDs, creation date). Without this regression tests become difficult.

This commit is contained in:
Moritz Bunkus 2004-01-10 21:12:49 +00:00
parent 5c1084f2ef
commit a92d10a1cd
4 changed files with 78 additions and 49 deletions

View File

@ -49,6 +49,7 @@
using namespace std;
#include "common.h"
#include "hacks.h"
int verbose = 1;
@ -599,6 +600,8 @@ void clear_list_of_unique_uint32() {
bool is_unique_uint32(uint32_t number) {
int i;
if (hack_engaged(ENGAGE_NO_VARIABLE_DATA))
return true;
for (i = 0; i < ru_numbers.size(); i++)
if (ru_numbers[i] == number)
return false;
@ -607,12 +610,20 @@ bool is_unique_uint32(uint32_t number) {
}
void add_unique_uint32(uint32_t number) {
ru_numbers.push_back(number);
if (hack_engaged(ENGAGE_NO_VARIABLE_DATA))
ru_numbers.push_back(ru_numbers.size() + 1);
else
ru_numbers.push_back(number);
}
uint32_t create_unique_uint32() {
uint32_t rnumber, half;
if (hack_engaged(ENGAGE_NO_VARIABLE_DATA)) {
ru_numbers.push_back(ru_numbers.size() + 1);
return ru_numbers.size();
}
do {
half = (uint32_t)(65535.0 * rand() / RAND_MAX);
rnumber = half;
@ -1252,3 +1263,46 @@ string mxsprintf(const char *fmt, ...) {
return dst;
}
static const char *mosu_hacks[] = {
ENGAGE_SPACE_AFTER_CHAPTERS,
ENGAGE_NO_CHAPTERS_IN_META_SEEK,
ENGAGE_NO_META_SEEK,
ENGAGE_LACING_XIPH,
ENGAGE_LACING_EBML,
ENGAGE_NATIVE_BFRAMES,
ENGAGE_NO_VARIABLE_DATA,
NULL
};
static vector<const char *> engaged_hacks;
bool hack_engaged(const char *hack) {
uint32_t i;
if (hack == NULL)
return false;
for (i = 0; i < engaged_hacks.size(); i++)
if (!strcmp(engaged_hacks[i], hack))
return true;
return false;
}
void engage_hacks(const char *hacks) {
vector<string> engage_args;
int aidx, hidx;
bool valid_hack;
engage_args = split(hacks, ",");
for (aidx = 0; aidx < engage_args.size(); aidx++) {
valid_hack = false;
for (hidx = 0; mosu_hacks[hidx] != NULL; hidx++)
if (engage_args[aidx] == mosu_hacks[hidx]) {
valid_hack = true;
engaged_hacks.push_back(mosu_hacks[hidx]);
break;
}
if (!valid_hack)
mxerror("'%s' is not a valid hack.\n", engage_args[aidx].c_str());
}
}

View File

@ -184,6 +184,9 @@ bool MTX_DLL_API parse_double(const char *s, double &value);
int MTX_DLL_API get_arg_len(const char *fmt, ...);
int MTX_DLL_API get_varg_len(const char *fmt, va_list ap);
void MTX_DLL_API engage_hacks(const char *hacks);
bool MTX_DLL_API hack_engaged(const char *hack);
extern int MTX_DLL_API verbose;
class MTX_DLL_API bit_cursor_c {

View File

@ -29,6 +29,7 @@
#define ENGAGE_LACING_XIPH "lacing_xiph"
#define ENGAGE_LACING_EBML "lacing_ebml"
#define ENGAGE_NATIVE_BFRAMES "native_bframes"
#define ENGAGE_NO_VARIABLE_DATA "no_variable_data"
bool hack_engaged(const char *hack);

View File

@ -197,29 +197,6 @@ mm_io_c *out = NULL;
bitvalue_c seguid_prev(128), seguid_current(128), seguid_next(128);
bitvalue_c *seguid_link_previous = NULL, *seguid_link_next = NULL;
const char *mosu_hacks[] = {
ENGAGE_SPACE_AFTER_CHAPTERS,
ENGAGE_NO_CHAPTERS_IN_META_SEEK,
ENGAGE_NO_META_SEEK,
ENGAGE_LACING_XIPH,
ENGAGE_LACING_EBML,
ENGAGE_NATIVE_BFRAMES,
NULL
};
vector<const char *> engaged_hacks;
bool hack_engaged(const char *hack) {
uint32_t i;
if (hack == NULL)
return false;
for (i = 0; i < engaged_hacks.size(); i++)
if (!strcmp(engaged_hacks[i], hack))
return true;
return false;
}
file_type_t file_types[] =
{{"---", TYPEUNKNOWN, "<unknown>"},
{"demultiplexers:", -1, ""},
@ -986,22 +963,31 @@ static void render_headers(mm_io_c *rout, bool last_file, bool first_file) {
cstr_to_UTFstring(version.c_str());
*((EbmlUnicodeString *)&GetChild<KaxWritingApp>(*kax_infos)) =
cstr_to_UTFstring(VERSIONINFO);
GetChild<KaxDateUTC>(*kax_infos).SetEpochDate(time(NULL));
if (!hack_engaged(ENGAGE_NO_VARIABLE_DATA))
GetChild<KaxDateUTC>(*kax_infos).SetEpochDate(time(NULL));
else
GetChild<KaxDateUTC>(*kax_infos).SetEpochDate(0);
if (segment_title.length() > 0)
*((EbmlUnicodeString *)&GetChild<KaxTitle>(*kax_infos)) =
cstrutf8_to_UTFstring(segment_title.c_str());
// Generate the segment UIDs.
if (first_file) {
seguid_current.generate_random();
if (!last_file)
seguid_next.generate_random();
if (!hack_engaged(ENGAGE_NO_VARIABLE_DATA)) {
if (first_file) {
seguid_current.generate_random();
if (!last_file)
seguid_next.generate_random();
} else {
seguid_prev = seguid_current;
seguid_current = seguid_next;
if (!last_file)
seguid_next.generate_random();
}
} else {
seguid_prev = seguid_current;
seguid_current = seguid_next;
if (!last_file)
seguid_next.generate_random();
memset(seguid_current.data(), 0, 128 / 8);
memset(seguid_prev.data(), 0, 128 / 8);
memset(seguid_next.data(), 0, 128 / 8);
}
// Set the segment UIDs.
@ -1371,24 +1357,9 @@ static void parse_args(int argc, char **argv) {
// Global options
if (!strcmp(this_arg, "--engage")) {
vector<string> engage_args;
int aidx, hidx;
bool valid_hack;
if (next_arg == NULL)
mxerror("'--engage' lacks its argument.\n");
engage_args = split(next_arg, ",");
for (aidx = 0; aidx < engage_args.size(); aidx++) {
valid_hack = false;
for (hidx = 0; mosu_hacks[hidx] != NULL; hidx++)
if (engage_args[aidx] == mosu_hacks[hidx]) {
valid_hack = true;
engaged_hacks.push_back(mosu_hacks[hidx]);
break;
}
if (!valid_hack)
mxerror("'%s' is not a valid hack.\n", engage_args[aidx].c_str());
}
engage_hacks(next_arg);
i++;
} else if (!strcmp(this_arg, "-q"))