diff runner/BinaryFeatureWriter.cpp @ 69:0ef80ae6493c

Sonic Annotator correctly reports the number of bytes written to a feature file even if it's less than expected.
author gyorgyf
date Fri, 24 Feb 2012 12:32:39 +0000
parents 5e432835d7e1
children
line wrap: on
line diff
--- a/runner/BinaryFeatureWriter.cpp	Fri Feb 24 11:23:06 2012 +0000
+++ b/runner/BinaryFeatureWriter.cpp	Fri Feb 24 12:32:39 2012 +0000
@@ -236,7 +236,8 @@
 	if (binary->newtransform) {
 		binary->newtransform = false;
 		output_binCount = output.binCount;
-		feature_count = 0;		
+		feature_count = 0;
+		element_count = 0;
 		binary->transform = &transform;
 	
 	ofs << endl << "{"
@@ -284,8 +285,10 @@
 	// write the feature data
 	feature_count += featureList.size();	
 	for (size_t i = 0; i < featureList.size(); ++i) {
-		for (size_t j = 0; j < featureList[i].values.size(); ++j)
+		for (size_t j = 0; j < featureList[i].values.size(); ++j) {
 			ofs.write( (const char*) &featureList[i].values[j], sizeof(featureList[i].values[j]) );
+			element_count++;
+		}
 	}
 	// ofs << endl;
 	
@@ -328,7 +331,13 @@
 	ofs << ",\"feature_count\":" 
 		<< feature_count
 		<< ",\"data_size\":" 	
-		<< feature_count * output_binCount * sizeof(float);	
-	ofs.seekp(t);	
+		// << feature_count * output_binCount * sizeof(float);	
+		<< element_count * sizeof(float);
+	ofs.seekp(t);
+	if (element_count != feature_count * output_binCount) 
+		cerr << "ERROR: The number of feature values written is different from the expected value given by the output bin count and the number of features returned by the plugin. \n"
+		<< "Otput bin count: " << output_binCount << ", Feature count: " << feature_count << ", Expected elements: " << feature_count * output_binCount 
+		<< ", Written elements: " << element_count << ", Resulting float32 data size: " << element_count * sizeof(float) << " bytes."
+		<< endl;
     // FileFeatureWriter::finish();
 }