Migrates AudioVideoManagement to generated rtiddsgen API

Converts accessor calls to plain member access across avm service and plugin.
This commit is contained in:
berrux-dev committed 2026-09-21 02:45:51 +02:00
1 parent 82356f23e5
commit 40f767fc4d
29 files changed
+308 -295

No files matched your search

@@ -34,20 +34,20 @@ MainStructureElement createBuilding()
static int mseId = 0;
static int seId = 0;
MainStructureElement building;
building.id(++mseId);
building.name("Building");
building.structureElementId(++seId);
building.properties("{}");
building.id = ++mseId;
building.name = "Building";
building.structureElementId = ++seId;
building.properties = "{}";
StructureElement mountingPoint;
mountingPoint.id(++seId);
mountingPoint.name("MP_OUT0001");
mountingPoint.displayName("Outdoor Camera 1");
mountingPoint.mainStructureElementId(building.id());
mountingPoint.structureElementTypeId(StructureElementType::MountingPoint);
mountingPoint.mountingPointTypeId(MountingPointType::OutdoorCamera);
mountingPoint.properties("{}");
building.elements().push_back(mountingPoint);
mountingPoint.id = ++seId;
mountingPoint.name = "MP_OUT0001";
mountingPoint.displayName = "Outdoor Camera 1";
mountingPoint.mainStructureElementId = building.id;
mountingPoint.structureElementTypeId = StructureElementType::MountingPoint;
mountingPoint.mountingPointTypeId = MountingPointType::OutdoorCamera;
mountingPoint.properties = "{}";
building.elements.push_back(mountingPoint);
return building;
}
@@ -57,9 +57,9 @@ InstrumentationAsset createAsset()
static int id = 0;
InstrumentationAsset asset;
asset.id(++id);
asset.name(QStringLiteral("CAM_UBEOCE000%1").arg(id).toUtf8().constData());
asset.mountingPointTypeId(MountingPointType::OutdoorCamera);
asset.id = ++id;
asset.name = QStringLiteral("CAM_UBEOCE000%1").arg(id).toUtf8().constData();
asset.mountingPointTypeId = MountingPointType::OutdoorCamera;
return asset;
}
@@ -68,41 +68,41 @@ MountingPointAsset createMount(InstrumentationAsset &asset, const StructureEleme
{
static int id = 0;
MountingPointAsset mount;
mount.id(++id);
mount.assetId(asset.id());
mount.structureElementId(mountingPoint.id());
mount.id = ++id;
mount.assetId = asset.id;
mount.structureElementId = mountingPoint.id;
asset.assetStateId(InstrumentationAssetState::Mounted);
asset.assetStateId = InstrumentationAssetState::Mounted;
return mount;
}
void unmount(InstrumentationAsset &asset)
{
asset.assetStateId(InstrumentationAssetState::Unmounted);
asset.assetStateId = InstrumentationAssetState::Unmounted;
}
void assign(MainStructureElement &building, int exerciseId)
{
building.properties(QStringLiteral("{\"available_in_exercise\": [%1]}").arg(exerciseId).toUtf8().constData());
building.properties = QStringLiteral("{\"available_in_exercise\": [%1]}").arg(exerciseId).toUtf8().constData();
}
void unassign(MainStructureElement &building)
{
building.properties("{}");
building.properties = "{}";
}
void assign(InstrumentationAsset &asset, int exerciseId)
{
Q_ASSERT(asset.assetStateId() == InstrumentationAssetState::Mounted);
Q_ASSERT(asset.assetStateId == InstrumentationAssetState::Mounted);
std::vector<int> exercises{exerciseId};
asset.availableInExercise(exercises);
asset.availableInExercise = exercises;
}
void unassign(InstrumentationAsset &asset)
{
Q_ASSERT(asset.assetStateId() == InstrumentationAssetState::Mounted);
asset.availableInExercise().clear();
Q_ASSERT(asset.assetStateId == InstrumentationAssetState::Mounted);
asset.availableInExercise.clear();
}
class AssignmentSpy : public QObject
@@ -196,7 +196,7 @@ void AssetAssignmentManagerTest::testStartMountedAssigned()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(building, EXERCISE_42);
assign(asset1, EXERCISE_42);
@@ -236,7 +236,7 @@ void AssetAssignmentManagerTest::testRuntimeMountAssign()
// create the mount, building still unassigned
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
notifications.push_back(std::bind(&AssetAssignmentManager::onAssetChanged, &mgr, asset1, DataModification::eModified));
notifications.push_back(std::bind(&AssetAssignmentManager::onMountingChanged, &mgr, mount, DataModification::eAdded));
fireRandomly(notifications);
@@ -290,7 +290,7 @@ void AssetAssignmentManagerTest::testRuntimeAssignMount()
// mount the asset and assign it as the building is assigned already
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(asset1, EXERCISE_42);
notifications.push_back(std::bind(&AssetAssignmentManager::onMountingChanged, &mgr, mount, DataModification::eAdded));
notifications.push_back(std::bind(&AssetAssignmentManager::onAssetChanged, &mgr, asset1, DataModification::eModified));
@@ -316,7 +316,7 @@ void AssetAssignmentManagerTest::testStartMountedRuntimeAssign()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
notifications.push_back(std::bind(&AssetAssignmentManager::onMainStructureElementChanged, &mgr, building, DataModification::eAdded));
notifications.push_back(std::bind(&AssetAssignmentManager::onAssetChanged, &mgr, asset1, DataModification::eAdded));
notifications.push_back(std::bind(&AssetAssignmentManager::onAssetChanged, &mgr, asset2, DataModification::eAdded));
@@ -365,7 +365,7 @@ void AssetAssignmentManagerTest::testStartAssignedRuntimeMount()
// mount asset1 and assign it as the building is assigned already
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(asset1, EXERCISE_42);
notifications.push_back(std::bind(&AssetAssignmentManager::onAssetChanged, &mgr, asset1, DataModification::eModified));
notifications.push_back(std::bind(&AssetAssignmentManager::onMountingChanged, &mgr, mount, DataModification::eAdded));
@@ -390,7 +390,7 @@ void AssetAssignmentManagerTest::testRuntimeUnmountUnassign()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(building, EXERCISE_42);
assign(asset1, EXERCISE_42);
@@ -440,7 +440,7 @@ void AssetAssignmentManagerTest::testRuntimeUnassignUnmount()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(building, EXERCISE_42);
assign(asset1, EXERCISE_42);
@@ -490,7 +490,7 @@ void AssetAssignmentManagerTest::testRuntimeReassign()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(building, EXERCISE_42);
assign(asset1, EXERCISE_42);
@@ -535,7 +535,7 @@ void AssetAssignmentManagerTest::testShutdownMountedAssigned()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(building, EXERCISE_42);
assign(asset1, EXERCISE_42);
@@ -576,7 +576,7 @@ void AssetAssignmentManagerTest::testDoublePendingAssign()
MainStructureElement building = createBuilding();
InstrumentationAsset asset1 = createAsset();
InstrumentationAsset asset2 = createAsset();
MountingPointAsset mount = createMount(asset1, building.elements()[0]);
MountingPointAsset mount = createMount(asset1, building.elements[0]);
assign(building, EXERCISE_42);
assign(asset1, EXERCISE_42);
@@ -50,7 +50,7 @@ public:
const Streams &findStreams(Asset *asset) override
{
Q_ASSERT(asset);
return findStreams(asset->data().id());
return findStreams(asset->data().id);
}
bool isEmpty() const { return m_cache.empty(); }
@@ -100,7 +100,7 @@ public:
void remove(Asset *asset) override
{
Q_ASSERT(asset);
auto count = m_cache.erase(asset->data().id());
auto count = m_cache.erase(asset->data().id);
Q_ASSERT(count == 1);
}
@@ -151,11 +151,11 @@ public:
Asset *createAsset(int id, MountingPointType mpType, const std::string &properties)
{
InstrumentationAsset data;
data.id(id);
data.name(QStringLiteral("ASSET_000%1").arg(id).toUtf8().constData());
data.hostname(QStringLiteral("host_000%1").arg(id).toUtf8().constData());
data.mountingPointTypeId(mpType);
data.properties(properties);
data.id = id;
data.name = QStringLiteral("ASSET_000%1").arg(id).toUtf8().constData();
data.hostname = QStringLiteral("host_000%1").arg(id).toUtf8().constData();
data.mountingPointTypeId = mpType;
data.properties = properties;
return new Asset(data);
}
@@ -163,12 +163,12 @@ Asset *createAsset(int id, MountingPointType mpType, const std::string &properti
MountingPoint *createMountingPoint(int id, MountingPointType mpType)
{
StructureElement data;
data.id(id);
data.name(QStringLiteral("MP_000%1").arg(id).toUtf8().constData());
data.displayName(QStringLiteral("display name %1").arg(id).toUtf8().constData());
data.structureElementTypeId(StructureElementType::MountingPoint);
data.mountingPointTypeId(mpType);
data.properties("{}");
data.id = id;
data.name = QStringLiteral("MP_000%1").arg(id).toUtf8().constData();
data.displayName = QStringLiteral("display name %1").arg(id).toUtf8().constData();
data.structureElementTypeId = StructureElementType::MountingPoint;
data.mountingPointTypeId = mpType;
data.properties = "{}";
return new MountingPoint(data);
}
@@ -177,7 +177,7 @@ void setProperties(Asset *asset, const std::string &newProperties)
{
Q_ASSERT(asset);
InstrumentationAsset data = asset->data();
data.properties(newProperties);
data.properties = newProperties;
asset->update(data);
}
@@ -185,7 +185,7 @@ void setDisplayName(MountingPoint *mp, const std::string &newDisplayName)
{
Q_ASSERT(mp);
StructureElement data = mp->data();
data.displayName(newDisplayName);
data.displayName = newDisplayName;
mp->update(data);
}
@@ -194,9 +194,9 @@ void setRecording(MountingPoint *mp, bool on)
Q_ASSERT(mp);
StructureElement data = mp->data();
if (on)
data.properties(R"({"record": true})");
data.properties = R"({"record": true})";
else
data.properties(R"({"record": false})");
data.properties = R"({"record": false})";
mp->update(data);
}
@@ -204,7 +204,7 @@ void mount(Asset *asset, MountingPoint *mp)
{
Q_ASSERT(asset);
InstrumentationAsset data = asset->data();
data.assetStateId(InstrumentationAssetState::Mounted);
data.assetStateId = InstrumentationAssetState::Mounted;
asset->update(data);
asset->mount(mp);
}
@@ -222,7 +222,21 @@ Database::AvmDeviceConfig dcEntry(int64_t id, const std::string &context, cons
return dc;
}
bool operator==(const Database::AvmDeviceConfig &lhs, const Database::AvmDeviceConfig &rhs)
} // anonymous namespace
namespace AudioVideoManagement
{
namespace Database
{
// rtiddsgen 4.7 emits the generated Database structs without any comparison
// operators and also declares 30 unreleated free operator== overloads directly
// in namespace AudioVideoManagement (avm.hpp). Unqualified lookup from that
// namespace stops at the first enclosing declaration found, so an operator
// defined at global scope is never reached, and ADL cannot see it either
// because the anonymous namespace is not associated with these operands.
// Declaring it in the namespace of the operands is what makes it findable.
bool operator==(const AvmDeviceConfig &lhs, const AvmDeviceConfig &rhs)
{
if (lhs.id != rhs.id)
return false;
@@ -242,7 +256,8 @@ bool operator==(const Database::AvmDeviceConfig &lhs, const Database::AvmDeviceC
return true;
}
} // anonymous namespace
} // namespace Database
} // namespace AudioVideoManagement
namespace AudioVideoManagement
@@ -307,12 +322,12 @@ void AudioVideoHandlerImplTest::testAssignCameraVideo()
QVERIFY(dtsSpy.m_removed.empty());
// verify DB
const Streams &streams = dbMock.findStreams(m_indoorCam->data().id());
const Streams &streams = dbMock.findStreams(m_indoorCam->data().id);
QVERIFY(!streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_VIDEO_CHANNEL", "av_0001", "EXCAVS01", "url=rtsp://root:root@host_0001:554;mode=1;", 0));
// verify DDS
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id()));
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id));
}
/**
@@ -356,16 +371,16 @@ void AudioVideoHandlerImplTest::testAssignCameraVideoAudio(const std::string &ca
QVERIFY(dtsSpy.m_removed.empty());
// verfiy DB
const Streams &streams = dbMock.findStreams(m_outdoorCam->data().id());
const Streams &streams = dbMock.findStreams(m_outdoorCam->data().id);
QVERIFY(streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_VIDEO_CHANNEL", "av_0002", "EXCAVS01", "url=rtsp://root:root@host_0002:554;mode=1;", 2));
QVERIFY(*streams.second == dcEntry(2, "ex_42", "AXIS_AUDIO_CHANNEL", "av_0002", "EXCAVS01", "url=http://root:root@host_0002:80;mode=1;", 1));
// verify DDS
const Stream &videoStream = dtsSpy.m_published[0];
QCOMPARE(videoStream, Stream(1, "av_0002", StreamType::Video, m_mpOutdoor->data().id()));
QCOMPARE(videoStream, Stream(1, "av_0002", StreamType::Video, m_mpOutdoor->data().id));
const Stream &audioStream = dtsSpy.m_published[1];
QCOMPARE(audioStream, Stream(2, "av_0002", expectedStreamType, m_mpOutdoor->data().id()));
QCOMPARE(audioStream, Stream(2, "av_0002", expectedStreamType, m_mpOutdoor->data().id));
}
/**
@@ -385,12 +400,12 @@ void AudioVideoHandlerImplTest::testAssignAnnouncementUnit()
QVERIFY(dtsSpy.m_removed.empty());
// verfiy DB
const Streams &streams = dbMock.findStreams(m_announcementUnit->data().id());
const Streams &streams = dbMock.findStreams(m_announcementUnit->data().id);
QVERIFY(!streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_AUDIO_CHANNEL", "av_0003", "EXCAVS01", "url=http://root:root@host_0003:80;codec=aac;mode=1;", 0));
// verify DDS
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0003", StreamType::AudioOut, m_mpAnnouncementUnit->data().id()));
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0003", StreamType::AudioOut, m_mpAnnouncementUnit->data().id));
}
/**
@@ -463,14 +478,14 @@ void AudioVideoHandlerImplTest::testUpdateRemoveAssignedAsset()
QVERIFY(dtsSpy.m_removed.empty());
// verify DB
Streams streams = dbMock.findStreams(m_indoorCam->data().id());
Streams streams = dbMock.findStreams(m_indoorCam->data().id);
QVERIFY(streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_VIDEO_CHANNEL", "av_0001", "EXCAVS01", "url=rtsp://root:root@host_0001:554;mode=1;", 2));
QVERIFY(*streams.second == dcEntry(2, "ex_42", "AXIS_AUDIO_CHANNEL", "av_0001", "EXCAVS01", "url=http://root:root@host_0001:80;mode=1;", 1));
// verify DDS
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id()));
QCOMPARE(dtsSpy.m_published[1], Stream(2, "av_0001", StreamType::AudioIn, m_mpIndoor->data().id()));
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id));
QCOMPARE(dtsSpy.m_published[1], Stream(2, "av_0001", StreamType::AudioIn, m_mpIndoor->data().id));
// remove microphone again => removal of audio stream
@@ -482,12 +497,12 @@ void AudioVideoHandlerImplTest::testUpdateRemoveAssignedAsset()
QCOMPARE(static_cast<int>(dtsSpy.m_removed.size()), 1);
// verify DB
streams = dbMock.findStreams(m_indoorCam->data().id());
streams = dbMock.findStreams(m_indoorCam->data().id);
QVERIFY(!streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_VIDEO_CHANNEL", "av_0001", "EXCAVS01", "url=rtsp://root:root@host_0001:554;mode=1;", 0));
// verify DDS
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id()));
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id));
QCOMPARE(static_cast<int>(dtsSpy.m_removed[0]), 2);
@@ -529,12 +544,12 @@ void AudioVideoHandlerImplTest::testUpdateAssignedMountingPoint()
QVERIFY(dtsSpy.m_removed.empty());
// verify DB
Streams streams = dbMock.findStreams(m_indoorCam->data().id());
Streams streams = dbMock.findStreams(m_indoorCam->data().id);
QVERIFY(!streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_VIDEO_CHANNEL", "av_0001", "EXCAVS01", "url=rtsp://root:root@host_0001:554;mode=1;", 0));
// verify DDS
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id()));
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id));
// set recording-flag on MountingPoint
@@ -546,12 +561,12 @@ void AudioVideoHandlerImplTest::testUpdateAssignedMountingPoint()
QVERIFY(dtsSpy.m_removed.empty());
// verify DB
streams = dbMock.findStreams(m_indoorCam->data().id());
streams = dbMock.findStreams(m_indoorCam->data().id);
QVERIFY(!streams.second);
QVERIFY(streams.first == dcEntry(1, "ex_42", "AXIS_VIDEO_CHANNEL", "av_0001", "EXCAVS01", "url=rtsp://root:root@host_0001:554;mode=1;recording=ECRS@EXCAVS01;recordcontrol=prealarm;", 0));
// verify DDS
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id())); // no change here
QCOMPARE(dtsSpy.m_published[0], Stream(1, "av_0001", StreamType::Video, m_mpIndoor->data().id)); // no change here
}
void AudioVideoHandlerImplTest::testDeviceDefinitionCameraVideo()