Skip to content
Snippets Groups Projects
Commit 82351ba8 authored by Sebastian Dröge's avatar Sebastian Dröge
Browse files

Add user_data pointer to the callbacks

Fixes #3
parent fb63394c
No related branches found
No related tags found
1 merge request!9Add user_data pointer to the callbacks
...@@ -78,6 +78,7 @@ struct ndi_ctx ...@@ -78,6 +78,7 @@ struct ndi_ctx
int pending_requests; int pending_requests;
ndi_data_callback callback; ndi_data_callback callback;
void *user_data;
/* options */ /* options */
char *ip; char *ip;
...@@ -226,7 +227,7 @@ static int process_video_message(ndi_ctx *ndi_ctx, uint8_t *data, int header_len ...@@ -226,7 +227,7 @@ static int process_video_message(ndi_ctx *ndi_ctx, uint8_t *data, int header_len
ndi_data.width = width; ndi_data.width = width;
ndi_data.height = height; ndi_data.height = height;
ndi_ctx->callback(&ndi_data); ndi_ctx->callback(&ndi_data, ndi_ctx->user_data);
return 0; return 0;
} }
...@@ -301,7 +302,7 @@ static int process_audio_message(ndi_ctx *ndi_ctx, uint8_t *data, int header_len ...@@ -301,7 +302,7 @@ static int process_audio_message(ndi_ctx *ndi_ctx, uint8_t *data, int header_len
} }
} }
ndi_ctx->callback(&ndi_data); ndi_ctx->callback(&ndi_data, ndi_ctx->user_data);
end: end:
for(uint32_t i = 0; i < num_channels; i++) for(uint32_t i = 0; i < num_channels; i++)
...@@ -560,9 +561,10 @@ static void system_Init(void) { ...@@ -560,9 +561,10 @@ static void system_Init(void) {
static void system_Init(void) { return; } static void system_Init(void) { return; }
#endif #endif
void libndi_receive_data(ndi_ctx *ndi_ctx, ndi_data_callback callback) void libndi_receive_data(ndi_ctx *ndi_ctx, ndi_data_callback callback, void *user_data)
{ {
ndi_ctx->callback = callback; ndi_ctx->callback = callback;
ndi_ctx->user_data = user_data;
/* connect to socket */ /* connect to socket */
int ret; int ret;
......
...@@ -83,9 +83,9 @@ static inline void libndi_discovery_item_destroy(ndi_discovery_item_t *item) { ...@@ -83,9 +83,9 @@ static inline void libndi_discovery_item_destroy(ndi_discovery_item_t *item) {
free(item); free(item);
} }
typedef void (*libndi_discovery_cb)(ndi_discovery_item_t *item); typedef void (*libndi_discovery_cb)(ndi_discovery_item_t *item, void *user_data);
ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback); ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback, void *user_data);
int libndi_discovery_start(ndi_discovery_ctx_t *ctx); int libndi_discovery_start(ndi_discovery_ctx_t *ctx);
int libndi_discovery_stop(ndi_discovery_ctx_t *ctx); int libndi_discovery_stop(ndi_discovery_ctx_t *ctx);
void libndi_discovery_destroy(ndi_discovery_ctx_t *ctx); void libndi_discovery_destroy(ndi_discovery_ctx_t *ctx);
...@@ -101,8 +101,8 @@ typedef struct ...@@ -101,8 +101,8 @@ typedef struct
int libndi_setup(ndi_ctx *ndi_ctx, ndi_opts *ndi_opts); int libndi_setup(ndi_ctx *ndi_ctx, ndi_opts *ndi_opts);
typedef void (*ndi_data_callback)(ndi_data *ndi_data); typedef void (*ndi_data_callback)(ndi_data *ndi_data, void *user_data);
void libndi_receive_data(ndi_ctx *ndi_ctx, ndi_data_callback callback); void libndi_receive_data(ndi_ctx *ndi_ctx, ndi_data_callback callback, void *user_data);
void libndi_close(ndi_ctx *ndi_ctx); void libndi_close(ndi_ctx *ndi_ctx);
......
...@@ -35,9 +35,10 @@ struct ndi_discovery_ctx { ...@@ -35,9 +35,10 @@ struct ndi_discovery_ctx {
pthread_t thread; pthread_t thread;
pthread_mutex_t mutex; pthread_mutex_t mutex;
bool stopped; bool stopped;
void *user_data;
}; };
ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback) ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback, void *user_data)
{ {
ndi_discovery_ctx_t *ctx = calloc(1, sizeof(ndi_discovery_ctx_t)); ndi_discovery_ctx_t *ctx = calloc(1, sizeof(ndi_discovery_ctx_t));
if (!ctx) if (!ctx)
...@@ -57,6 +58,7 @@ ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback) ...@@ -57,6 +58,7 @@ ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback)
} }
ctx->cb = callback; ctx->cb = callback;
ctx->user_data = user_data;
ctx->stopped = true; ctx->stopped = true;
return ctx; return ctx;
...@@ -102,7 +104,7 @@ static void cb_mdns(void *p_cookie, int status, const struct rr_entry *entries) ...@@ -102,7 +104,7 @@ static void cb_mdns(void *p_cookie, int status, const struct rr_entry *entries)
} }
} }
ctx->cb(item); ctx->cb(item, ctx->user_data);
} }
void *discovery_thread_func(void *data) { void *discovery_thread_func(void *data) {
......
...@@ -46,7 +46,7 @@ AVCodecContext *avctx; ...@@ -46,7 +46,7 @@ AVCodecContext *avctx;
AVPacket *pkt; AVPacket *pkt;
AVFrame *frame; AVFrame *frame;
void ndi_data_callback_func(ndi_data *ndi_data) void ndi_data_callback_func(ndi_data *ndi_data, void *user_data)
{ {
int ret = 0; int ret = 0;
printf("Got data. Type: %s \n", ndi_data->data_type == NDI_DATA_VIDEO ? "video": "audio"); printf("Got data. Type: %s \n", ndi_data->data_type == NDI_DATA_VIDEO ? "video": "audio");
...@@ -87,7 +87,7 @@ end: ...@@ -87,7 +87,7 @@ end:
av_packet_unref(pkt); av_packet_unref(pkt);
} }
void ndi_mdns_callback_func(ndi_discovery_item_t *item) void ndi_mdns_callback_func(ndi_discovery_item_t *item, void *user_data)
{ {
printf("Discovered Source: Name: %s IP: %s Port: %s \n", item->name, item->ip, item->port); printf("Discovered Source: Name: %s IP: %s Port: %s \n", item->name, item->ip, item->port);
} }
...@@ -99,7 +99,7 @@ int main(int argc, char *argv[]) ...@@ -99,7 +99,7 @@ int main(int argc, char *argv[])
ndi_opts ndi_opts = {0}; ndi_opts ndi_opts = {0};
if(argc == 2) { if(argc == 2) {
if(!strcmp(argv[1], "list")) { if(!strcmp(argv[1], "list")) {
ndi_discovery_ctx_t *ndi_discovery = libndi_discovery_init(ndi_mdns_callback_func); ndi_discovery_ctx_t *ndi_discovery = libndi_discovery_init(ndi_mdns_callback_func, NULL);
libndi_discovery_start(ndi_discovery); libndi_discovery_start(ndi_discovery);
sleep(5); sleep(5);
libndi_discovery_stop(ndi_discovery); libndi_discovery_stop(ndi_discovery);
...@@ -145,7 +145,7 @@ int main(int argc, char *argv[]) ...@@ -145,7 +145,7 @@ int main(int argc, char *argv[])
libndi_setup(ndi_ctx, &ndi_opts); libndi_setup(ndi_ctx, &ndi_opts);
libndi_receive_data(ndi_ctx, ndi_data_callback_func); libndi_receive_data(ndi_ctx, ndi_data_callback_func, NULL);
libndi_close(ndi_ctx); libndi_close(ndi_ctx);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment