summaryrefslogtreecommitdiff
path: root/toxav
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2018-08-11 14:11:55 +0000
committeriphydf <iphydf@users.noreply.github.com>2018-08-13 22:11:48 +0000
commit2d84681529161fd6add331286483ec58c034ba45 (patch)
tree3c70c1cd84371637856b567e28719b0e889757a2 /toxav
parentb77e407b6fe4800eb9c7abce405f804429884643 (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.bazel2
-rw-r--r--toxav/groupav.c21
-rw-r--r--toxav/groupav.h9
-rw-r--r--toxav/toxav.c4
-rw-r--r--toxav/toxav_old.c13
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
164typedef struct Group_AV { 164typedef 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
234static Group_AV *new_group_av(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata) 235static 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 */
436static int groupchat_enable_av(const Logger *log, Group_Chats *g_c, uint32_t groupnumber, 439static 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 */
462int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata) 465int 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 */
483int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, uint16_t length, 486int 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);
30typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm, 34typedef 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 */
38int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata); 42int 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 */
45int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, uint16_t length, 49int 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
82struct ToxAV { 82struct 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}
231Tox *toxav_get_tox(const ToxAV *av) 233Tox *toxav_get_tox(const ToxAV *av)
232{ 234{
233 return (Tox *) av->m; 235 return av->tox;
234} 236}
235uint32_t toxav_iteration_interval(const ToxAV *av) 237uint32_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 */
38int toxav_add_av_groupchat(Tox *tox, audio_data_cb *audio_callback, void *userdata) 38int 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
54int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data, uint16_t length, 55int 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
74int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels, 76int 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}