Skip to content

Commit

Permalink
Got getPositionalAudioData working following recommendations (making …
Browse files Browse the repository at this point in the history
…a struct for data transfer)
  • Loading branch information
JordanPlayz158 committed Sep 19, 2024
1 parent bec426b commit 890561f
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 8 deletions.
13 changes: 12 additions & 1 deletion plugins/MumblePlugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,17 @@ struct MumbleStringWrapper {
bool needsReleasing;
};

struct PositionalDataNoQt {
float m_playerPos[3];
float m_playerDir[3];
float m_playerAxis[3];
float m_cameraPos[3];
float m_cameraDir[3];
float m_cameraAxis[3];
char *m_context;
char *m_identity;
};

MUMBLE_EXTERN_C_END

#endif // EXTERNAL_MUMBLE_PLUGIN_TYPES_
Expand Down Expand Up @@ -1526,7 +1537,7 @@ struct MUMBLE_API_STRUCT_NAME {
* @since Plugin interface v1.3.0
*/
mumble_error_t(MUMBLE_PLUGIN_CALLING_CONVENTION *getPositionalAudioData)(mumble_plugin_id_t callerID,
void *positionalData);
PositionalDataNoQt **positionalData);
#endif


Expand Down
2 changes: 1 addition & 1 deletion src/mumble/API.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ public slots:
void getChannelDescription_v_1_0_x(mumble_plugin_id_t callerID, mumble_connection_t connection,
mumble_channelid_t channelID, const char **description,
std::shared_ptr< api_promise_t > promise);
void getPositionalAudioData_v_1_3_x(mumble_plugin_id_t callerID, void* positionalData,
void getPositionalAudioData_v_1_3_x(mumble_plugin_id_t callerID, PositionalDataNoQt **positionalData,
std::shared_ptr< api_promise_t > promise);
void requestUserMove_v_1_0_x(mumble_plugin_id_t callerID, mumble_connection_t connection, mumble_userid_t userID,
mumble_channelid_t channelID, const char *password,
Expand Down
35 changes: 29 additions & 6 deletions src/mumble/API_v_1_x_x.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -895,13 +895,12 @@ void MumbleAPI::getChannelDescription_v_1_0_x(mumble_plugin_id_t callerID, mumbl
}

void MumbleAPI::getPositionalAudioData_v_1_3_x(mumble_plugin_id_t callerID,
void *positionalData,
PositionalDataNoQt **positionalData,
std::shared_ptr< api_promise_t > promise) {
if (QThread::currentThread() != thread()) {
// Invoke in main thread
QMetaObject::invokeMethod(this, "getPositionalAudioData_v_1_3_x",
Qt::QueuedConnection, Q_ARG(mumble_plugin_id_t, callerID),
Q_ARG(void*, positionalData),
QMetaObject::invokeMethod(this, "getPositionalAudioData_v_1_3_x", Qt::QueuedConnection,
Q_ARG(mumble_plugin_id_t, callerID), Q_ARG(PositionalDataNoQt **, positionalData),
Q_ARG(std::shared_ptr< api_promise_t >, promise));
return;
}
Expand All @@ -918,7 +917,31 @@ void MumbleAPI::getPositionalAudioData_v_1_3_x(mumble_plugin_id_t callerID,
EXIT_WITH(MUMBLE_EC_INTERNAL_ERROR);
}

positionalData = const_cast<PositionalData *>(&pluginManager->getPositionalData());
const PositionalData &posData = pluginManager->getPositionalData();

PositionalDataNoQt positionalDataNoQt = PositionalDataNoQt();

for (int i = 0; i < 3; i++) {
Coord coord = static_cast< Coord >(i);

positionalDataNoQt.m_playerPos[i] = posData.getPlayerPos()[coord];
positionalDataNoQt.m_playerDir[i] = posData.getPlayerDir()[coord];
positionalDataNoQt.m_playerAxis[i] = posData.getPlayerAxis()[coord];

positionalDataNoQt.m_cameraPos[i] = posData.getCameraPos()[coord];
positionalDataNoQt.m_cameraDir[i] = posData.getCameraDir()[coord];
positionalDataNoQt.m_cameraAxis[i] = posData.getCameraAxis()[coord];
}

char *context = posData.getContext().toUtf8().data();
positionalDataNoQt.m_context = (char *) malloc(strlen(context) + 1);
std::strcpy(positionalDataNoQt.m_context, context);

char *identity = posData.getPlayerIdentity().toUtf8().data();
positionalDataNoQt.m_identity = (char *) malloc(strlen(identity) + 1);
std::strcpy(positionalDataNoQt.m_identity, identity);

memcpy(*positionalData, &positionalDataNoQt, sizeof(PositionalDataNoQt));
EXIT_WITH(MUMBLE_STATUS_OK);
}

Expand Down Expand Up @@ -1829,7 +1852,7 @@ C_WRAPPER(getChannelDescription_v_1_0_x)
#undef ARG_NAMES

#define TYPED_ARGS \
mumble_plugin_id_t callerID, void *positionalData
mumble_plugin_id_t callerID, PositionalDataNoQt **positionalData
#define ARG_NAMES callerID, positionalData
C_WRAPPER(getPositionalAudioData_v_1_3_x)
#undef TYPED_ARGS
Expand Down

0 comments on commit 890561f

Please sign in to comment.