LHCompareAPI.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "LHCompareAPI.h"
  2. #include <QCoreApplication>
  3. #include <QLibrary>
  4. #include <QString>
  5. #include "spdlog/spdlog.h"
  6. // extern "C" CompareResult* compare(const char *source_file, const char *target_file, double compare_sensitivity, ChromaprintAlgorithm algorithm=CHROMAPRINT_ALGORITHM_TEST5_2);
  7. // extern "C" void free_compare_result(CompareResult* result);
  8. using Fncompare = CompareResult* (*)(const char *, const char *, double, ChromaprintAlgorithm);
  9. using FnFreeCompareResult = void (*)(CompareResult*);
  10. Fncompare fnCompare = nullptr;
  11. FnFreeCompareResult fnFreeCompareResult = nullptr;
  12. static bool isLoaded = false;
  13. /* 加载动态库 */
  14. bool LoadCompareLibrary()
  15. {
  16. if(isLoaded)
  17. {
  18. SPDLOG_INFO("libsignalcompare.so 已加载!");
  19. return true;
  20. }
  21. QLibrary lib;
  22. QString strLibPath = QCoreApplication::applicationDirPath() + "/libsignalcompare.so";
  23. lib.setFileName(strLibPath);
  24. if (!lib.load())
  25. {
  26. SPDLOG_ERROR("加载比对动态库失败: {}", strLibPath.toStdString());
  27. SPDLOG_ERROR("错误信息: {}", lib.errorString().toStdString());
  28. return false;
  29. }
  30. fnCompare = reinterpret_cast<Fncompare>(lib.resolve("compare"));
  31. if (fnCompare == nullptr) {
  32. SPDLOG_ERROR("加载比对函数失败: {}", lib.errorString().toStdString());
  33. return false;
  34. }
  35. fnFreeCompareResult = reinterpret_cast<FnFreeCompareResult>(lib.resolve("free_compare_result"));
  36. if (fnFreeCompareResult == nullptr) {
  37. SPDLOG_ERROR("加载释放比对结果函数失败: {}", lib.errorString().toStdString());
  38. return false;
  39. }
  40. SPDLOG_INFO("加载比对动态库成功!");
  41. isLoaded = true;
  42. return true;
  43. }
  44. /* 获取结果 */
  45. CompareResult* LHCompare(const char *source_file, const char *target_file, double compare_sensitivity, ChromaprintAlgorithm algorithm)
  46. {
  47. if(fnCompare == nullptr) {
  48. SPDLOG_ERROR("“compare”函数未初始化!");
  49. return nullptr;
  50. }
  51. return fnCompare(source_file, target_file, compare_sensitivity, algorithm);
  52. }
  53. /* 释放结果数据 */
  54. void LHFreeCompareResult(CompareResult* result)
  55. {
  56. if(fnFreeCompareResult == nullptr) {
  57. SPDLOG_ERROR("“free_compare_result”函数未初始化!");
  58. return;
  59. }
  60. fnFreeCompareResult(result);
  61. result = nullptr;
  62. }