X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=estimate-skew.cpp;h=116b4fcf92a7d814c49b1771a1c679300fdfbdb8;hb=5faebafff10f57faac92a6f9e0a698cf0015e48a;hp=2e6aff241b53f1f41c2c2361d82721884d8f3869;hpb=7f8b1c45468af6c5d86a77ff021faa7e8621bc7e;p=audiosync diff --git a/estimate-skew.cpp b/estimate-skew.cpp index 2e6aff2..116b4fc 100644 --- a/estimate-skew.cpp +++ b/estimate-skew.cpp @@ -66,23 +66,15 @@ class InterpolatingReader { private: FILE *f; - double speed; double p; int in_pos; - short prev_sample; + short prev_sample, sample; public: - InterpolatingReader(FILE *f) : f(f), speed(1.0), p(0.0), in_pos(-1) {} + InterpolatingReader(FILE *f) : f(f), p(0.0), in_pos(-1) {} - void update_speed(double speed) + double read_sample(double speed) { - this->speed = speed; - } - - double read_sample() - { - short sample; - p += speed; while ((int)(ceil(p)) > in_pos) { prev_sample = sample; @@ -140,7 +132,7 @@ int main(int argc, char **argv) // open (estimated) skew if (strcmp(argv[3], "-") == 0) { - skew = stderr; + skew = stdout; } else { skew = fopen(argv[3], "wb"); if (skew == NULL) { @@ -150,6 +142,8 @@ int main(int argc, char **argv) } FlankDetector f1, f2; + InterpolatingReader intp(in2); + double speed = 1.000; // initial sync, reference do { @@ -163,18 +157,11 @@ int main(int argc, char **argv) // initial sync, input do { - short s; - if (fread(&s, sizeof(short), 1, in2) != 1) { - exit(0); - } - + short s = (short)intp.read_sample(speed); f2.update(s); - } while (!f2.check_flag() || !f2.get_status()); - double speed = 1.000; - - InterpolatingReader intp(in2); - intp.update_speed(speed); // test to see if we can resync OK + fwrite(&speed, sizeof(double), 1, skew); + } while (!f2.check_flag() || !f2.get_status()); while (!feof(in1) && !feof(in2)) { short refs; @@ -192,15 +179,16 @@ int main(int argc, char **argv) // same here unsigned num_inp = 0; while (!feof(in2) && !f2.check_flag()) { - double s = intp.read_sample(); + double s = intp.read_sample(speed); f2.update((short)s); ++num_inp; + + fwrite(&speed, sizeof(double), 1, skew); } double ns = filter(speed * double(num_inp) / double(num_ref)); printf("%u vs. %u -- ratio %.3f, speed %.3f, filtered speed %.3f\n", num_inp, num_ref, double(num_inp) / double(num_ref), speed * double(num_inp) / double(num_ref), ns); speed = ns; - intp.update_speed(ns); } }