summaryrefslogtreecommitdiffstats
path: root/src/track/beatgrid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/track/beatgrid.cpp')
-rw-r--r--src/track/beatgrid.cpp64
1 files changed, 38 insertions, 26 deletions
diff --git a/src/track/beatgrid.cpp b/src/track/beatgrid.cpp
index e931eb6a36..c52f30b19e 100644
--- a/src/track/beatgrid.cpp
+++ b/src/track/beatgrid.cpp
@@ -46,6 +46,7 @@ class BeatGridIterator : public BeatIterator {
};
BeatGrid::BeatGrid(
+ MakeSharedTag,
audio::SampleRate sampleRate,
const QString& subVersion,
const mixxx::track::io::BeatGrid& grid,
@@ -54,21 +55,25 @@ BeatGrid::BeatGrid(
m_sampleRate(sampleRate),
m_grid(grid),
m_beatLengthFrames(beatLengthFrames) {
- // BeatGrid should live in the same thread as the track it is associated
- // with.
}
-BeatGrid::BeatGrid(const BeatGrid& other,
+BeatGrid::BeatGrid(
+ MakeSharedTag,
+ const BeatGrid& other,
const mixxx::track::io::BeatGrid& grid,
audio::FrameDiff_t beatLengthFrames)
- : m_subVersion(other.m_subVersion),
- m_sampleRate(other.m_sampleRate),
- m_grid(grid),
- m_beatLengthFrames(beatLengthFrames) {
+ : BeatGrid(
+ MakeSharedTag{},
+ other.m_sampleRate,
+ other.m_subVersion,
+ grid,
+ beatLengthFrames) {
}
-BeatGrid::BeatGrid(const BeatGrid& other)
- : BeatGrid(other, other.m_grid, other.m_beatLengthFrames) {
+BeatGrid::BeatGrid(
+ MakeSharedTag,
+ const BeatGrid& other)
+ : BeatGrid(MakeSharedTag{}, other, other.m_grid, other.m_beatLengthFrames) {
}
// static
@@ -98,7 +103,8 @@ BeatsPointer BeatGrid::makeBeatGrid(
// Calculate beat length as sample offsets
const audio::FrameDiff_t beatLengthFrames = 60.0 * sampleRate / bpm.value();
- return BeatsPointer(new BeatGrid(sampleRate, subVersion, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(
+ MakeSharedTag{}, sampleRate, subVersion, grid, beatLengthFrames);
}
// static
@@ -109,12 +115,16 @@ BeatsPointer BeatGrid::fromByteArray(
mixxx::track::io::BeatGrid grid;
if (grid.ParseFromArray(byteArray.constData(), byteArray.length())) {
const audio::FrameDiff_t beatLengthFrames = (60.0 * sampleRate / grid.bpm().bpm());
- return BeatsPointer(new BeatGrid(sampleRate, subVersion, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{},
+ sampleRate,
+ subVersion,
+ grid,
+ beatLengthFrames);
}
// Legacy fallback for BeatGrid-1.0
if (byteArray.size() != sizeof(BeatGridData)) {
- return BeatsPointer(new BeatGrid(sampleRate, QString(), grid, 0));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, sampleRate, QString(), grid, 0);
}
const BeatGridData* blob = reinterpret_cast<const BeatGridData*>(byteArray.constData());
const auto firstBeat = mixxx::audio::FramePos(blob->firstBeat);
@@ -248,27 +258,28 @@ mixxx::Bpm BeatGrid::getBpm() const {
mixxx::Bpm BeatGrid::getBpmAroundPosition(audio::FramePos position, int n) const {
Q_UNUSED(position);
Q_UNUSED(n);
-
- if (!isValid()) {
- return {};
- }
- return bpm();
+ return getBpm();
}
BeatsPointer BeatGrid::translate(audio::FrameDiff_t offset) const {
- if (!isValid()) {
- return BeatsPointer(new BeatGrid(*this));
+ VERIFY_OR_DEBUG_ASSERT(isValid()) {
+ return clonePointer();
}
+
mixxx::track::io::BeatGrid grid = m_grid;
const audio::FramePos newFirstBeatPosition = firstBeatPosition() + offset;
grid.mutable_first_beat()->set_frame_position(
static_cast<google::protobuf::int32>(
newFirstBeatPosition.toLowerFrameBoundary().value()));
- return BeatsPointer(new BeatGrid(*this, grid, m_beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, *this, grid, m_beatLengthFrames);
}
BeatsPointer BeatGrid::scale(BpmScale scale) const {
+ VERIFY_OR_DEBUG_ASSERT(isValid()) {
+ return clonePointer();
+ }
+
mixxx::track::io::BeatGrid grid = m_grid;
auto bpm = mixxx::Bpm(grid.bpm().bpm());
@@ -293,27 +304,28 @@ BeatsPointer BeatGrid::scale(BpmScale scale) const {
break;
default:
DEBUG_ASSERT(!"scale value invalid");
- return BeatsPointer(new BeatGrid(*this));
+ return clonePointer();
}
if (!bpm.isValid()) {
- return BeatsPointer(new BeatGrid(*this));
+ return clonePointer();
}
bpm = BeatUtils::roundBpmWithinRange(bpm - kBpmScaleRounding, bpm, bpm + kBpmScaleRounding);
grid.mutable_bpm()->set_bpm(bpm.value());
const mixxx::audio::FrameDiff_t beatLengthFrames = (60.0 * m_sampleRate / bpm.value());
- return BeatsPointer(new BeatGrid(*this, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, *this, grid, beatLengthFrames);
}
-BeatsPointer BeatGrid::setBpm(mixxx::Bpm bpm) {
+BeatsPointer BeatGrid::setBpm(mixxx::Bpm bpm) const {
VERIFY_OR_DEBUG_ASSERT(bpm.isValid()) {
- return nullptr;
+ return clonePointer();
}
+
mixxx::track::io::BeatGrid grid = m_grid;
grid.mutable_bpm()->set_bpm(bpm.value());
const mixxx::audio::FrameDiff_t beatLengthFrames = (60.0 * m_sampleRate / bpm.value());
- return BeatsPointer(new BeatGrid(*this, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, *this, grid, beatLengthFrames);
}
} // namespace mixxx