diff options
author | iphydf <iphydf@users.noreply.github.com> | 2018-08-11 14:11:55 +0000 |
---|---|---|
committer | iphydf <iphydf@users.noreply.github.com> | 2018-08-13 22:11:48 +0000 |
commit | 2d84681529161fd6add331286483ec58c034ba45 (patch) | |
tree | 3c70c1cd84371637856b567e28719b0e889757a2 /toxav | |
parent | b77e407b6fe4800eb9c7abce405f804429884643 (diff) |
Fix ToxAv's use of `struct Tox`.
* Fix `toxav_get_tox` to return tox, not messenger.
* Fix the casts from Tox* to Messenger* in toxav_old.c.
* Pass Tox instead of Messenger to public group AV callbacks.
Diffstat (limited to 'toxav')
-rw-r--r-- | toxav/BUILD.bazel | 2 | ||||
-rw-r--r-- | toxav/groupav.c | 21 | ||||
-rw-r--r-- | toxav/groupav.h | 9 | ||||
-rw-r--r-- | toxav/toxav.c | 4 | ||||
-rw-r--r-- | toxav/toxav_old.c | 13 |
5 files changed, 31 insertions, 18 deletions
diff --git a/toxav/BUILD.bazel b/toxav/BUILD.bazel index 1c1b3556..151ac48e 100644 --- a/toxav/BUILD.bazel +++ b/toxav/BUILD.bazel | |||
@@ -99,7 +99,7 @@ cc_library( | |||
99 | srcs = ["groupav.c"], | 99 | srcs = ["groupav.c"], |
100 | hdrs = ["groupav.h"], | 100 | hdrs = ["groupav.h"], |
101 | deps = [ | 101 | deps = [ |
102 | "//c-toxcore/toxcore:group", | 102 | "//c-toxcore/toxcore:toxcore", |
103 | "@opus", | 103 | "@opus", |
104 | ], | 104 | ], |
105 | ) | 105 | ) |
diff --git a/toxav/groupav.c b/toxav/groupav.c index 091f1255..b10a7f8e 100644 --- a/toxav/groupav.c +++ b/toxav/groupav.c | |||
@@ -163,6 +163,7 @@ static Group_Audio_Packet *dequeue(Group_JitterBuffer *q, int *success) | |||
163 | 163 | ||
164 | typedef struct Group_AV { | 164 | typedef struct Group_AV { |
165 | const Logger *log; | 165 | const Logger *log; |
166 | Tox *tox; | ||
166 | Group_Chats *g_c; | 167 | Group_Chats *g_c; |
167 | OpusEncoder *audio_encoder; | 168 | OpusEncoder *audio_encoder; |
168 | 169 | ||
@@ -231,7 +232,8 @@ static int recreate_encoder(Group_AV *group_av) | |||
231 | return 0; | 232 | return 0; |
232 | } | 233 | } |
233 | 234 | ||
234 | static Group_AV *new_group_av(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata) | 235 | static Group_AV *new_group_av(const Logger *log, Tox *tox, Group_Chats *g_c, audio_data_cb *audio_callback, |
236 | void *userdata) | ||
235 | { | 237 | { |
236 | if (!g_c) { | 238 | if (!g_c) { |
237 | return nullptr; | 239 | return nullptr; |
@@ -244,6 +246,7 @@ static Group_AV *new_group_av(const Logger *log, Group_Chats *g_c, audio_data_cb | |||
244 | } | 246 | } |
245 | 247 | ||
246 | group_av->log = log; | 248 | group_av->log = log; |
249 | group_av->tox = tox; | ||
247 | group_av->g_c = g_c; | 250 | group_av->g_c = g_c; |
248 | 251 | ||
249 | group_av->audio_data = audio_callback; | 252 | group_av->audio_data = audio_callback; |
@@ -386,7 +389,7 @@ static int decode_audio_packet(Group_AV *group_av, Group_Peer_AV *peer_av, uint3 | |||
386 | if (out_audio) { | 389 | if (out_audio) { |
387 | 390 | ||
388 | if (group_av->audio_data) { | 391 | if (group_av->audio_data) { |
389 | group_av->audio_data(group_av->g_c->m, groupnumber, friendgroupnumber, out_audio, out_audio_samples, | 392 | group_av->audio_data(group_av->tox, groupnumber, friendgroupnumber, out_audio, out_audio_samples, |
390 | peer_av->decoder_channels, sample_rate, group_av->userdata); | 393 | peer_av->decoder_channels, sample_rate, group_av->userdata); |
391 | } | 394 | } |
392 | 395 | ||
@@ -433,10 +436,10 @@ static int handle_group_audio_packet(void *object, uint32_t groupnumber, uint32_ | |||
433 | * return 0 on success. | 436 | * return 0 on success. |
434 | * return -1 on failure. | 437 | * return -1 on failure. |
435 | */ | 438 | */ |
436 | static int groupchat_enable_av(const Logger *log, Group_Chats *g_c, uint32_t groupnumber, | 439 | static int groupchat_enable_av(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t groupnumber, |
437 | audio_data_cb *audio_callback, void *userdata) | 440 | audio_data_cb *audio_callback, void *userdata) |
438 | { | 441 | { |
439 | Group_AV *group_av = new_group_av(log, g_c, audio_callback, userdata); | 442 | Group_AV *group_av = new_group_av(log, tox, g_c, audio_callback, userdata); |
440 | 443 | ||
441 | if (group_av == nullptr) { | 444 | if (group_av == nullptr) { |
442 | return -1; | 445 | return -1; |
@@ -459,7 +462,7 @@ static int groupchat_enable_av(const Logger *log, Group_Chats *g_c, uint32_t gro | |||
459 | * return group number on success. | 462 | * return group number on success. |
460 | * return -1 on failure. | 463 | * return -1 on failure. |
461 | */ | 464 | */ |
462 | int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata) | 465 | int add_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata) |
463 | { | 466 | { |
464 | int groupnumber = add_groupchat(g_c, GROUPCHAT_TYPE_AV); | 467 | int groupnumber = add_groupchat(g_c, GROUPCHAT_TYPE_AV); |
465 | 468 | ||
@@ -467,7 +470,7 @@ int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_c | |||
467 | return -1; | 470 | return -1; |
468 | } | 471 | } |
469 | 472 | ||
470 | if (groupchat_enable_av(log, g_c, groupnumber, audio_callback, userdata) == -1) { | 473 | if (groupchat_enable_av(log, tox, g_c, groupnumber, audio_callback, userdata) == -1) { |
471 | del_groupchat(g_c, groupnumber); | 474 | del_groupchat(g_c, groupnumber); |
472 | return -1; | 475 | return -1; |
473 | } | 476 | } |
@@ -480,8 +483,8 @@ int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_c | |||
480 | * returns group number on success | 483 | * returns group number on success |
481 | * returns -1 on failure. | 484 | * returns -1 on failure. |
482 | */ | 485 | */ |
483 | int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, uint16_t length, | 486 | int join_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, |
484 | audio_data_cb *audio_callback, void *userdata) | 487 | uint16_t length, audio_data_cb *audio_callback, void *userdata) |
485 | { | 488 | { |
486 | int groupnumber = join_groupchat(g_c, friendnumber, GROUPCHAT_TYPE_AV, data, length); | 489 | int groupnumber = join_groupchat(g_c, friendnumber, GROUPCHAT_TYPE_AV, data, length); |
487 | 490 | ||
@@ -489,7 +492,7 @@ int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber | |||
489 | return -1; | 492 | return -1; |
490 | } | 493 | } |
491 | 494 | ||
492 | if (groupchat_enable_av(log, g_c, groupnumber, audio_callback, userdata) == -1) { | 495 | if (groupchat_enable_av(log, tox, g_c, groupnumber, audio_callback, userdata) == -1) { |
493 | del_groupchat(g_c, groupnumber); | 496 | del_groupchat(g_c, groupnumber); |
494 | return -1; | 497 | return -1; |
495 | } | 498 | } |
diff --git a/toxav/groupav.h b/toxav/groupav.h index 4d9efafb..31c9abba 100644 --- a/toxav/groupav.h +++ b/toxav/groupav.h | |||
@@ -21,12 +21,16 @@ | |||
21 | #define C_TOXCORE_TOXAV_GROUPAV_H | 21 | #define C_TOXCORE_TOXAV_GROUPAV_H |
22 | 22 | ||
23 | #include "../toxcore/group.h" | 23 | #include "../toxcore/group.h" |
24 | #include "../toxcore/tox.h" | ||
24 | 25 | ||
25 | /* Audio encoding/decoding */ | 26 | /* Audio encoding/decoding */ |
26 | #include <opus.h> | 27 | #include <opus.h> |
27 | 28 | ||
28 | #define GROUP_AUDIO_PACKET_ID 192 | 29 | #define GROUP_AUDIO_PACKET_ID 192 |
29 | 30 | ||
31 | // TODO(iphydf): Use this better typed one instead of the void-pointer one below. | ||
32 | // typedef void audio_data_cb(Tox *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm, | ||
33 | // uint32_t samples, uint8_t channels, uint32_t sample_rate, void *userdata); | ||
30 | typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm, | 34 | typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm, |
31 | uint32_t samples, uint8_t channels, uint32_t sample_rate, void *userdata); | 35 | uint32_t samples, uint8_t channels, uint32_t sample_rate, void *userdata); |
32 | 36 | ||
@@ -35,14 +39,15 @@ typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, | |||
35 | * return group number on success. | 39 | * return group number on success. |
36 | * return -1 on failure. | 40 | * return -1 on failure. |
37 | */ | 41 | */ |
38 | int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata); | 42 | int add_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata); |
39 | 43 | ||
40 | /* Join a AV group (you need to have been invited first.) | 44 | /* Join a AV group (you need to have been invited first.) |
41 | * | 45 | * |
42 | * returns group number on success | 46 | * returns group number on success |
43 | * returns -1 on failure. | 47 | * returns -1 on failure. |
44 | */ | 48 | */ |
45 | int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, uint16_t length, | 49 | int join_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, |
50 | uint16_t length, | ||
46 | audio_data_cb *audio_callback, void *userdata); | 51 | audio_data_cb *audio_callback, void *userdata); |
47 | 52 | ||
48 | 53 | ||
diff --git a/toxav/toxav.c b/toxav/toxav.c index ad2976d6..6f47a0bc 100644 --- a/toxav/toxav.c +++ b/toxav/toxav.c | |||
@@ -80,6 +80,7 @@ typedef struct ToxAVCall_s { | |||
80 | } ToxAVCall; | 80 | } ToxAVCall; |
81 | 81 | ||
82 | struct ToxAV { | 82 | struct ToxAV { |
83 | Tox *tox; | ||
83 | Messenger *m; | 84 | Messenger *m; |
84 | MSISession *msi; | 85 | MSISession *msi; |
85 | 86 | ||
@@ -166,6 +167,7 @@ ToxAV *toxav_new(Tox *tox, TOXAV_ERR_NEW *error) | |||
166 | goto END; | 167 | goto END; |
167 | } | 168 | } |
168 | 169 | ||
170 | av->tox = tox; | ||
169 | av->m = m; | 171 | av->m = m; |
170 | av->msi = msi_new(av->m); | 172 | av->msi = msi_new(av->m); |
171 | 173 | ||
@@ -230,7 +232,7 @@ void toxav_kill(ToxAV *av) | |||
230 | } | 232 | } |
231 | Tox *toxav_get_tox(const ToxAV *av) | 233 | Tox *toxav_get_tox(const ToxAV *av) |
232 | { | 234 | { |
233 | return (Tox *) av->m; | 235 | return av->tox; |
234 | } | 236 | } |
235 | uint32_t toxav_iteration_interval(const ToxAV *av) | 237 | uint32_t toxav_iteration_interval(const ToxAV *av) |
236 | { | 238 | { |
diff --git a/toxav/toxav_old.c b/toxav/toxav_old.c index 6c9032e7..2ea9def4 100644 --- a/toxav/toxav_old.c +++ b/toxav/toxav_old.c | |||
@@ -37,8 +37,9 @@ | |||
37 | */ | 37 | */ |
38 | int toxav_add_av_groupchat(Tox *tox, audio_data_cb *audio_callback, void *userdata) | 38 | int toxav_add_av_groupchat(Tox *tox, audio_data_cb *audio_callback, void *userdata) |
39 | { | 39 | { |
40 | Messenger *m = (Messenger *)tox; | 40 | // TODO(iphydf): Don't rely on toxcore internals. |
41 | return add_av_groupchat(m->log, m->conferences_object, audio_callback, userdata); | 41 | Messenger *m = *(Messenger **)tox; |
42 | return add_av_groupchat(m->log, tox, m->conferences_object, audio_callback, userdata); | ||
42 | } | 43 | } |
43 | 44 | ||
44 | /* Join a AV group (you need to have been invited first.) | 45 | /* Join a AV group (you need to have been invited first.) |
@@ -54,8 +55,9 @@ int toxav_add_av_groupchat(Tox *tox, audio_data_cb *audio_callback, void *userda | |||
54 | int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data, uint16_t length, | 55 | int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data, uint16_t length, |
55 | audio_data_cb *audio_callback, void *userdata) | 56 | audio_data_cb *audio_callback, void *userdata) |
56 | { | 57 | { |
57 | Messenger *m = (Messenger *)tox; | 58 | // TODO(iphydf): Don't rely on toxcore internals. |
58 | return join_av_groupchat(m->log, m->conferences_object, friendnumber, data, length, audio_callback, userdata); | 59 | Messenger *m = *(Messenger **)tox; |
60 | return join_av_groupchat(m->log, tox, m->conferences_object, friendnumber, data, length, audio_callback, userdata); | ||
59 | } | 61 | } |
60 | 62 | ||
61 | /* Send audio to the group chat. | 63 | /* Send audio to the group chat. |
@@ -74,6 +76,7 @@ int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data | |||
74 | int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels, | 76 | int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels, |
75 | uint32_t sample_rate) | 77 | uint32_t sample_rate) |
76 | { | 78 | { |
77 | Messenger *m = (Messenger *)tox; | 79 | // TODO(iphydf): Don't rely on toxcore internals. |
80 | Messenger *m = *(Messenger **)tox; | ||
78 | return group_send_audio(m->conferences_object, groupnumber, pcm, samples, channels, sample_rate); | 81 | return group_send_audio(m->conferences_object, groupnumber, pcm, samples, channels, sample_rate); |
79 | } | 82 | } |