diff --git a/src/FitRideFile.cpp b/src/FitRideFile.cpp index 8fa6c6a4b..144cd6515 100644 --- a/src/FitRideFile.cpp +++ b/src/FitRideFile.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -444,26 +445,32 @@ struct FitFileReaderState double deltaSlope = headwind - prevPoint->slope; double deltaLeftRightBalance = lrbalance - prevPoint->lrbalance; - for (int i = 1; i < deltaSecs; i++) { - double weight = 1.0 * i / deltaSecs; - rideFile->appendPoint( - prevPoint->secs + (deltaSecs * weight), - prevPoint->cad + (deltaCad * weight), - prevPoint->hr + (deltaHr * weight), - prevPoint->km + (deltaDist * weight), - prevPoint->kph + (deltaSpeed * weight), - prevPoint->nm + (deltaTorque * weight), - prevPoint->watts + (deltaPower * weight), - prevPoint->alt + (deltaAlt * weight), - (badgps == 1) ? 0 : prevPoint->lon + (deltaLon * weight), - (badgps == 1) ? 0 : prevPoint->lat + (deltaLat * weight), - prevPoint->headwind + (deltaHeadwind * weight), - prevPoint->slope + (deltaSlope * weight), - temperature, - prevPoint->lrbalance + (deltaLeftRightBalance * weight), - interval); + // only smooth for less than 30 minutes + // we don't want to crash / stall on bad + // or corrupt files + if (deltaSecs > 0 && deltaSecs < (60*30)) { + + for (int i = 1; i < deltaSecs; i++) { + double weight = 1.0 * i / deltaSecs; + rideFile->appendPoint( + prevPoint->secs + (deltaSecs * weight), + prevPoint->cad + (deltaCad * weight), + prevPoint->hr + (deltaHr * weight), + prevPoint->km + (deltaDist * weight), + prevPoint->kph + (deltaSpeed * weight), + prevPoint->nm + (deltaTorque * weight), + prevPoint->watts + (deltaPower * weight), + prevPoint->alt + (deltaAlt * weight), + (badgps == 1) ? 0 : prevPoint->lon + (deltaLon * weight), + (badgps == 1) ? 0 : prevPoint->lat + (deltaLat * weight), + prevPoint->headwind + (deltaHeadwind * weight), + prevPoint->slope + (deltaSlope * weight), + temperature, + prevPoint->lrbalance + (deltaLeftRightBalance * weight), + interval); + } + prevPoint = rideFile->dataPoints().back(); } - prevPoint = rideFile->dataPoints().back(); } if (km < 0.00001f) km = last_distance; diff --git a/src/test/rides/2013-04-11-17-32-50.fit b/src/test/rides/2013-04-11-17-32-50.fit new file mode 100644 index 000000000..6705628a0 Binary files /dev/null and b/src/test/rides/2013-04-11-17-32-50.fit differ diff --git a/src/test/rides/descriptions.txt b/src/test/rides/descriptions.txt index cb1bba8e2..13a5f346e 100644 --- a/src/test/rides/descriptions.txt +++ b/src/test/rides/descriptions.txt @@ -63,3 +63,6 @@ lgulseth...pwx A PWX file from a Timex GPS with a permanent recording interval of 2 seconds claimed. But looks more like 2.02s. +2013-04-11-17-32-50.fit + A FIT file with a massive gap in recording at the end. +