diff options
author | haslersn <sebastian.hasler@gmx.net> | 2020-06-07 21:30:02 +0200 |
---|---|---|
committer | haslersn <sebastian.hasler@gmx.net> | 2020-06-07 21:30:02 +0200 |
commit | 7ccad9190781e38ca9557af4d6e33348a6e422d9 (patch) | |
tree | 4e0b57bd283ac2a8d3adbf5453a99b964d6aa8ac | |
parent | 080d336106dd9560b3d6f4d6e9ff59fd6c6f710e (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.cpp | 17 |
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) { |