X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=estimate-skew.cpp;h=04a56e785fdb0cfecda9183e0e76a44e16f589a6;hb=0dc1bfb693116c4bdb746e724e8079926cab1ade;hp=cc4835edfa227ab3dbd158d46bb390a51475b649;hpb=4503152997dff409892cf97b550f7f3621611375;p=audiosync diff --git a/estimate-skew.cpp b/estimate-skew.cpp index cc4835e..04a56e7 100644 --- a/estimate-skew.cpp +++ b/estimate-skew.cpp @@ -68,15 +68,13 @@ private: FILE *f; double p; int in_pos; - short prev_sample; + short prev_sample, sample; public: InterpolatingReader(FILE *f) : f(f), p(0.0), in_pos(-1) {} double read_sample(double speed) { - short sample; - p += speed; while ((int)(ceil(p)) > in_pos) { prev_sample = sample; @@ -134,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) { @@ -144,6 +142,8 @@ int main(int argc, char **argv) } FlankDetector f1, f2; + InterpolatingReader intp(in2); + double speed = 1.000; // initial sync, reference do { @@ -157,16 +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()); - InterpolatingReader intp(in2); - double speed = 1.000; + fwrite(&speed, sizeof(double), 1, skew); + } while (!f2.check_flag() || !f2.get_status()); while (!feof(in1) && !feof(in2)) { short refs; @@ -187,10 +182,12 @@ int main(int argc, char **argv) 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, + fprintf(stderr, "%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; }