summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhaslersn <sebastian.hasler@gmx.net>2020-06-07 21:30:02 +0200
committerhaslersn <sebastian.hasler@gmx.net>2020-06-07 21:30:02 +0200
commit7ccad9190781e38ca9557af4d6e33348a6e422d9 (patch)
tree4e0b57bd283ac2a8d3adbf5453a99b964d6aa8ac
parent080d336106dd9560b3d6f4d6e9ff59fd6c6f710e (diff)
enginelibrary: Allow reading beat data even if the beatgrid is malformed
This way malformed Engine Prime libraries can be salvaged in some cases.
-rw-r--r--src/djinterop/enginelibrary/performance_data_format.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/djinterop/enginelibrary/performance_data_format.cpp b/src/djinterop/enginelibrary/performance_data_format.cpp
index e346448..58a9a42 100644
--- a/src/djinterop/enginelibrary/performance_data_format.cpp
+++ b/src/djinterop/enginelibrary/performance_data_format.cpp
@@ -193,8 +193,21 @@ beat_data beat_data::decode(const std::vector<char>& compressed_data)
// TODO (haslersn): print a warning that "Is beat data set" is not 1
}
- std::tie(result.default_beatgrid, ptr) = decode_beatgrid(ptr, end);
- std::tie(result.adjusted_beatgrid, ptr) = decode_beatgrid(ptr, end);
+ try
+ {
+ std::vector<beatgrid_marker> default_beatgrid;
+ std::vector<beatgrid_marker> adjusted_beatgrid;
+ std::tie(default_beatgrid, ptr) = decode_beatgrid(ptr, end);
+ std::tie(adjusted_beatgrid, ptr) = decode_beatgrid(ptr, end);
+ // If there's an exception, then the following will intentially not be
+ // executed.
+ result.default_beatgrid = std::move(default_beatgrid);
+ result.adjusted_beatgrid = std::move(adjusted_beatgrid);
+ }
+ catch (const std::invalid_argument& e)
+ {
+ // TODO (haslersn): print a warning with e.what().
+ }
if (ptr != end)
{