Seems to be compiling and linking properly, and we are able to get a

context up. It crashes or deadlocks on release. Nothing else tested, but
promising progress.
This commit is contained in:
casey langen 2020-01-26 15:54:52 -08:00
parent 149ee87dca
commit dc340265e3
6 changed files with 84 additions and 43 deletions

View File

@ -94,6 +94,7 @@ endif()
add_subdirectory(src/core) add_subdirectory(src/core)
add_subdirectory(src/core_c) add_subdirectory(src/core_c)
add_subdirectory(src/core_c_demo)
add_subdirectory(src/musikcube) add_subdirectory(src/musikcube)
add_subdirectory(src/musikcubed) add_subdirectory(src/musikcubed)
add_subdirectory(src/plugins/taglib_plugin) add_subdirectory(src/plugins/taglib_plugin)

View File

@ -8,6 +8,8 @@ include_directories(
.. ..
) )
add_definitions(-DDEFINE_EXPORTS)
add_library(musikcore_c SHARED ${CORE_C_SOURCES}) add_library(musikcore_c SHARED ${CORE_C_SOURCES})
set_target_properties(musikcore_c PROPERTIES set_target_properties(musikcore_c PROPERTIES

View File

@ -185,11 +185,11 @@ mcsdk_export void mcsdk_context_release(mcsdk_context** context) {
delete internal->playback; delete internal->playback;
internal->playback = nullptr; internal->playback = nullptr;
internal->library->Indexer()->Stop(); internal->library->Indexer()->Stop();
internal->message_queue.SignalQuit();
internal->thread.join();
internal->library.reset(); internal->library.reset();
internal->preferences.reset(); internal->preferences.reset();
delete internal->metadata; delete internal->metadata;
internal->message_queue.SignalQuit();
internal->thread.join();
delete internal; delete internal;
delete c; delete c;
if (plugin_context == c) { if (plugin_context == c) {

View File

@ -37,12 +37,17 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
#include <string.h> #include <string.h>
#ifdef WIN32 #ifdef DEFINE_EXPORTS
#define mcsdk_export extern "C" __declspec(dllexport) #ifdef WIN32
#define mcsdk_export extern "C" __declspec(dllexport)
#else
#define mcsdk_export extern "C"
#endif
#else #else
#define mcsdk_export extern "C" #define mcsdk_export extern
#endif #endif
/* /*
@ -59,14 +64,14 @@ static const int mcsdk_version = 18;
* *
*/ */
enum mcsdk_playback_state { typedef enum mcsdk_playback_state {
mcsdk_playback_stopped = 1, mcsdk_playback_stopped = 1,
mcsdk_playback_paused = 2, mcsdk_playback_paused = 2,
mcsdk_playback_prepared = 3, mcsdk_playback_prepared = 3,
mcsdk_playback_playing = 4, mcsdk_playback_playing = 4,
}; } mcsdk_playback_state;
enum mcsdk_stream_event { typedef enum mcsdk_stream_event {
mcsdk_stream_scheduled = 1, mcsdk_stream_scheduled = 1,
mcsdk_stream_prepared = 2, mcsdk_stream_prepared = 2,
mcsdk_stream_playing = 3, mcsdk_stream_playing = 3,
@ -74,64 +79,64 @@ enum mcsdk_stream_event {
mcsdk_stream_finished = 5, mcsdk_stream_finished = 5,
mcsdk_stream_stopped = 6, mcsdk_stream_stopped = 6,
mcsdk_stream_error = -1 mcsdk_stream_error = -1
}; } mcsdk_stream_event;
enum mcsdk_repeat_mode { typedef enum mcsdk_repeat_mode {
mcsdk_repeat_none = 0, mcsdk_repeat_none = 0,
mcsdk_repeat_track = 1, mcsdk_repeat_track = 1,
mcsdk_repeat_list = 2 mcsdk_repeat_list = 2
}; } mcsdk_repeat_mode;
enum mcsdk_output_code { typedef enum mcsdk_output_code {
mcsdk_output_error_invalid_format = -4, mcsdk_output_error_invalid_format = -4,
mcsdk_output_error_invalid_state = -3, mcsdk_output_error_invalid_state = -3,
mcsdk_output_error_buffer_full = -2, mcsdk_output_error_buffer_full = -2,
mcsdk_output_error_buffer_written = -1 mcsdk_output_error_buffer_written = -1
}; } mcsdk_output_code;
enum mcsdk_time_change_mode { typedef enum mcsdk_time_change_mode {
mcsdk_time_change_mode_seek = 0, mcsdk_time_change_mode_seek = 0,
mcsdk_time_change_mode_scrub = 1 mcsdk_time_change_mode_scrub = 1
}; } mcsdk_time_change_mode;
enum mcsdk_path_type { typedef enum mcsdk_path_type {
mcsdk_path_user_home = 0, mcsdk_path_user_home = 0,
mcsdk_path_data = 1, mcsdk_path_data = 1,
mcsdk_path_application = 2, mcsdk_path_application = 2,
mcsdk_path_plugins = 3, mcsdk_path_plugins = 3,
mcsdk_path_library = 4 mcsdk_path_library = 4
}; } mcsdk_path_type;
enum mcsdk_stream_capability { typedef enum mcsdk_stream_capability {
mcsdk_stream_capability_prebuffer = 0x01 mcsdk_stream_capability_prebuffer = 0x01
}; } mcsdk_stream_capability;
enum mcsdk_indexer_scan_result { typedef enum mcsdk_indexer_scan_result {
mcsdk_indexer_scan_result_commit = 1, mcsdk_indexer_scan_result_commit = 1,
mcsdk_indexer_scan_result_rollback = 2 mcsdk_indexer_scan_result_rollback = 2
}; } mcsdk_indexer_scan_result;
enum class mcsdk_replay_gain_mode { typedef enum mcsdk_replay_gain_mode {
mcsdk_replay_gain_mode_disabled = 0, mcsdk_replay_gain_mode_disabled = 0,
mcsdk_replay_gain_mode_track = 1, mcsdk_replay_gain_mode_track = 1,
mcsdk_replay_gain_mode_album = 2 mcsdk_replay_gain_mode_album = 2
}; } mcsdk_replay_gain_mode;
enum class mcsdk_transport_type { typedef enum mcsdk_transport_type {
mcsdk_transport_type_gapless = 0, mcsdk_transport_type_gapless = 0,
mcsdk_transport_type_crossfade = 1 mcsdk_transport_type_crossfade = 1
}; } mcsdk_transport_type;
enum mcsdk_stream_open_flags { typedef enum mcsdk_stream_open_flags {
mcsdk_stream_open_flags_none = 0, mcsdk_stream_open_flags_none = 0,
mcsdk_stream_open_flags_read = 1, mcsdk_stream_open_flags_read = 1,
mcsdk_stream_open_flags_write = 2 mcsdk_stream_open_flags_write = 2
}; } mcsdk_stream_open_flags;
enum mcsdk_resource_class { typedef enum mcsdk_resource_class {
mcsdk_resource_type_value = 0, mcsdk_resource_type_value = 0,
mcsdk_resource_type_map = 1 mcsdk_resource_type_map = 1
}; } mcsdk_resource_class;
static const size_t mcsdk_equalizer_band_count = 18; static const size_t mcsdk_equalizer_band_count = 18;
@ -177,18 +182,18 @@ static const char* mcsdk_track_field_external_id = "external_id";
* *
*/ */
mcsdk_export typedef void* mcsdk_handle; typedef void* mcsdk_handle;
mcsdk_export typedef mcsdk_handle mcsdk_resource; typedef mcsdk_handle mcsdk_resource;
mcsdk_export typedef mcsdk_handle mcsdk_value; typedef mcsdk_handle mcsdk_value;
mcsdk_export typedef mcsdk_handle mcsdk_value_list; typedef mcsdk_handle mcsdk_value_list;
mcsdk_export typedef mcsdk_handle mcsdk_map; typedef mcsdk_handle mcsdk_map;
mcsdk_export typedef mcsdk_handle mcsdk_track; typedef mcsdk_handle mcsdk_track;
mcsdk_export typedef mcsdk_handle mcsdk_map_list; typedef mcsdk_handle mcsdk_map_list;
mcsdk_export typedef mcsdk_handle mcsdk_track_list; typedef mcsdk_handle mcsdk_track_list;
mcsdk_export typedef mcsdk_handle mcsdk_track_list_editor; typedef mcsdk_handle mcsdk_track_list_editor;
mcsdk_export typedef mcsdk_handle mcsdk_svc_metadata; typedef mcsdk_handle mcsdk_svc_metadata;
mcsdk_export typedef mcsdk_handle mcsdk_svc_playback; typedef mcsdk_handle mcsdk_svc_playback;
mcsdk_export typedef mcsdk_handle mcsdk_preferences; typedef mcsdk_handle mcsdk_preferences;
/* /*
* *
@ -196,12 +201,12 @@ mcsdk_export typedef mcsdk_handle mcsdk_preferences;
* *
*/ */
struct mcsdk_context { typedef struct mcsdk_context {
mcsdk_svc_metadata metadata; mcsdk_svc_metadata metadata;
mcsdk_svc_playback playback; mcsdk_svc_playback playback;
mcsdk_preferences preferences; mcsdk_preferences preferences;
mcsdk_handle internal; mcsdk_handle internal;
}; } mcsdk_context;
mcsdk_export void mcsdk_context_init(mcsdk_context** context); mcsdk_export void mcsdk_context_init(mcsdk_context** context);
mcsdk_export void mcsdk_context_release(mcsdk_context** context); mcsdk_export void mcsdk_context_release(mcsdk_context** context);

View File

@ -0,0 +1,19 @@
set (CORE_C_DEMO_SRCS
./main.c
)
set(musikcube_INSTALL_DIR ${HOMEBREW_PREFIX})
if (NOT DEFINED musikcube_INSTALL_DIR)
set(musikcube_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
endif()
add_executable(core_c_demo ${CORE_C_DEMO_SRCS})
set_target_properties(core_c_demo PROPERTIES LINK_FLAGS "-Wl,-rpath,./")
if (${LINK_STATICALLY} MATCHES "true")
find_library(EVLIB NAMES libev.a ev)
target_link_libraries(core_c_demo ${musikcube_LINK_LIBS} ${EVLIB} musikcore musikcore_c)
else()
target_link_libraries(core_c_demo ${musikcube_LINK_LIBS} musikcore musikcore_c ev)
endif()

14
src/core_c_demo/main.c Normal file
View File

@ -0,0 +1,14 @@
#include <stdio.h>
#include <core_c/musikcore_c.h>
int main(int argc, char** argv) {
mcsdk_context* context = NULL;
mcsdk_context_init(&context);
if (context) {
printf("omg");
}
mcsdk_context_release(&context);
return 0;
}