rlm@23: #include rlm@23: #include rlm@23: #include rlm@23: #include rlm@23: #include rlm@23: rlm@23: rlm@23: rlm@23: int rlm@23: do_check (int drop, int argc, char * argv []) rlm@23: { rlm@23: int margin_of_error; rlm@23: SNDFILE* goldenWavFile; rlm@23: SNDFILE* outputWavFile; rlm@23: SF_INFO goldenInfo ; rlm@23: SF_INFO outputInfo ; rlm@23: short int buffA; rlm@23: short int buffB; rlm@23: rlm@23: memset (&goldenInfo, 0, sizeof (goldenInfo)) ; rlm@23: memset (&outputInfo, 0, sizeof (outputInfo)) ; rlm@23: rlm@23: margin_of_error = atoi(argv[1]); rlm@23: rlm@23: printf("Checking for Margin of Error %d\n", margin_of_error); rlm@23: rlm@23: goldenWavFile = sf_open(argv[2], SFM_READ, &goldenInfo); rlm@23: if (goldenWavFile == NULL){ rlm@23: printf ("\nERROR : failed Not able to open wav file named '%s' : %s/\n", argv[2], sf_strerror (NULL)) ; rlm@23: exit (1) ; rlm@23: } rlm@23: rlm@23: outputWavFile = sf_open(argv[3], SFM_READ, &outputInfo); rlm@23: if (outputWavFile == NULL){ rlm@23: printf ("\nERROR : failed Not able to open wav file named '%s' : %s/\n", argv[3], sf_strerror (NULL)) ; rlm@23: exit (1) ; rlm@23: } rlm@23: rlm@23: int max_diff = 0; rlm@23: rlm@23: // it is possible that the modified pipeline might introduce a few rlm@23: // dummy tokens at the beginning of the stream, we'll just drop them rlm@23: for(int i = 0; i < drop; i++){ rlm@23: sf_read_short(outputWavFile, &buffB, 1); rlm@23: } rlm@23: rlm@23: int count=0; rlm@23: rlm@23: while(sf_read_short(goldenWavFile, &buffA, 1)==1){ rlm@23: rlm@23: if(sf_read_short(outputWavFile, &buffB, 1) != 1){ rlm@23: // the streams are of different length rlm@23: printf("failed (length)\n"); rlm@23: exit(0); rlm@23: } rlm@23: rlm@23: int td = (buffA > buffB) ? (buffA - buffB) : (buffB - buffA); rlm@23: max_diff = (td > max_diff) ? td : max_diff; rlm@23: rlm@23: if(max_diff > margin_of_error){ rlm@23: printf("max_diff %x on drop %d (count %d)\n", max_diff, drop,count); rlm@23: return 1; rlm@23: } rlm@23: rlm@23: count++; rlm@23: } rlm@23: rlm@23: printf("max_diff %x on drop %d\n", max_diff, drop); rlm@23: rlm@23: if(max_diff > margin_of_error) rlm@23: return 1; rlm@23: else rlm@23: return 0; rlm@23: } rlm@23: rlm@23: int rlm@23: main(int argc, char* argv[]) rlm@23: { rlm@23: for(int drop = 0; drop < 10; drop++){ rlm@23: if(do_check(drop, argc, argv)==0){ rlm@23: printf("passed on drop %d\n", drop); rlm@23: exit(0); rlm@23: } rlm@23: } rlm@23: printf("failed\n"); rlm@23: exit(1); rlm@23: }