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
......@@ -78,6 +78,7 @@ struct ndi_ctx
int pending_requests;
ndi_data_callback callback;
void *user_data;
/* options */
char *ip;
......@@ -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.height = height;
ndi_ctx->callback(&ndi_data);
ndi_ctx->callback(&ndi_data, ndi_ctx->user_data);
return 0;
}
......@@ -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:
for(uint32_t i = 0; i < num_channels; i++)
......@@ -560,9 +561,10 @@ static void system_Init(void) {
static void system_Init(void) { return; }
#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->user_data = user_data;
/* connect to socket */
int ret;
......
......@@ -83,9 +83,9 @@ static inline void libndi_discovery_item_destroy(ndi_discovery_item_t *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_stop(ndi_discovery_ctx_t *ctx);
void libndi_discovery_destroy(ndi_discovery_ctx_t *ctx);
......@@ -101,8 +101,8 @@ typedef struct
int libndi_setup(ndi_ctx *ndi_ctx, ndi_opts *ndi_opts);
typedef void (*ndi_data_callback)(ndi_data *ndi_data);
void libndi_receive_data(ndi_ctx *ndi_ctx, ndi_data_callback callback);
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 *user_data);
void libndi_close(ndi_ctx *ndi_ctx);
......
......@@ -35,9 +35,10 @@ struct ndi_discovery_ctx {
pthread_t thread;
pthread_mutex_t mutex;
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));
if (!ctx)
......@@ -57,6 +58,7 @@ ndi_discovery_ctx_t *libndi_discovery_init(libndi_discovery_cb callback)
}
ctx->cb = callback;
ctx->user_data = user_data;
ctx->stopped = true;
return ctx;
......@@ -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) {
......
......@@ -46,7 +46,7 @@ AVCodecContext *avctx;
AVPacket *pkt;
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;
printf("Got data. Type: %s \n", ndi_data->data_type == NDI_DATA_VIDEO ? "video": "audio");
......@@ -87,7 +87,7 @@ end:
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);
}
......@@ -99,7 +99,7 @@ int main(int argc, char *argv[])
ndi_opts ndi_opts = {0};
if(argc == 2) {
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);
sleep(5);
libndi_discovery_stop(ndi_discovery);
......@@ -145,7 +145,7 @@ int main(int argc, char *argv[])
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);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment