mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
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.
This commit is contained in:
parent
b77e407b6f
commit
2d84681529
|
@ -99,7 +99,7 @@ cc_library(
|
||||||
srcs = ["groupav.c"],
|
srcs = ["groupav.c"],
|
||||||
hdrs = ["groupav.h"],
|
hdrs = ["groupav.h"],
|
||||||
deps = [
|
deps = [
|
||||||
"//c-toxcore/toxcore:group",
|
"//c-toxcore/toxcore:toxcore",
|
||||||
"@opus",
|
"@opus",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -163,6 +163,7 @@ static Group_Audio_Packet *dequeue(Group_JitterBuffer *q, int *success)
|
||||||
|
|
||||||
typedef struct Group_AV {
|
typedef struct Group_AV {
|
||||||
const Logger *log;
|
const Logger *log;
|
||||||
|
Tox *tox;
|
||||||
Group_Chats *g_c;
|
Group_Chats *g_c;
|
||||||
OpusEncoder *audio_encoder;
|
OpusEncoder *audio_encoder;
|
||||||
|
|
||||||
|
@ -231,7 +232,8 @@ static int recreate_encoder(Group_AV *group_av)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Group_AV *new_group_av(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata)
|
static Group_AV *new_group_av(const Logger *log, Tox *tox, Group_Chats *g_c, audio_data_cb *audio_callback,
|
||||||
|
void *userdata)
|
||||||
{
|
{
|
||||||
if (!g_c) {
|
if (!g_c) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -244,6 +246,7 @@ static Group_AV *new_group_av(const Logger *log, Group_Chats *g_c, audio_data_cb
|
||||||
}
|
}
|
||||||
|
|
||||||
group_av->log = log;
|
group_av->log = log;
|
||||||
|
group_av->tox = tox;
|
||||||
group_av->g_c = g_c;
|
group_av->g_c = g_c;
|
||||||
|
|
||||||
group_av->audio_data = audio_callback;
|
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
|
||||||
if (out_audio) {
|
if (out_audio) {
|
||||||
|
|
||||||
if (group_av->audio_data) {
|
if (group_av->audio_data) {
|
||||||
group_av->audio_data(group_av->g_c->m, groupnumber, friendgroupnumber, out_audio, out_audio_samples,
|
group_av->audio_data(group_av->tox, groupnumber, friendgroupnumber, out_audio, out_audio_samples,
|
||||||
peer_av->decoder_channels, sample_rate, group_av->userdata);
|
peer_av->decoder_channels, sample_rate, group_av->userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -433,10 +436,10 @@ static int handle_group_audio_packet(void *object, uint32_t groupnumber, uint32_
|
||||||
* return 0 on success.
|
* return 0 on success.
|
||||||
* return -1 on failure.
|
* return -1 on failure.
|
||||||
*/
|
*/
|
||||||
static int groupchat_enable_av(const Logger *log, Group_Chats *g_c, uint32_t groupnumber,
|
static int groupchat_enable_av(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t groupnumber,
|
||||||
audio_data_cb *audio_callback, void *userdata)
|
audio_data_cb *audio_callback, void *userdata)
|
||||||
{
|
{
|
||||||
Group_AV *group_av = new_group_av(log, g_c, audio_callback, userdata);
|
Group_AV *group_av = new_group_av(log, tox, g_c, audio_callback, userdata);
|
||||||
|
|
||||||
if (group_av == nullptr) {
|
if (group_av == nullptr) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -459,7 +462,7 @@ static int groupchat_enable_av(const Logger *log, Group_Chats *g_c, uint32_t gro
|
||||||
* return group number on success.
|
* return group number on success.
|
||||||
* return -1 on failure.
|
* return -1 on failure.
|
||||||
*/
|
*/
|
||||||
int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata)
|
int add_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata)
|
||||||
{
|
{
|
||||||
int groupnumber = add_groupchat(g_c, GROUPCHAT_TYPE_AV);
|
int groupnumber = add_groupchat(g_c, GROUPCHAT_TYPE_AV);
|
||||||
|
|
||||||
|
@ -467,7 +470,7 @@ int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_c
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (groupchat_enable_av(log, g_c, groupnumber, audio_callback, userdata) == -1) {
|
if (groupchat_enable_av(log, tox, g_c, groupnumber, audio_callback, userdata) == -1) {
|
||||||
del_groupchat(g_c, groupnumber);
|
del_groupchat(g_c, groupnumber);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -480,8 +483,8 @@ int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_c
|
||||||
* returns group number on success
|
* returns group number on success
|
||||||
* returns -1 on failure.
|
* returns -1 on failure.
|
||||||
*/
|
*/
|
||||||
int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, uint16_t length,
|
int join_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data,
|
||||||
audio_data_cb *audio_callback, void *userdata)
|
uint16_t length, audio_data_cb *audio_callback, void *userdata)
|
||||||
{
|
{
|
||||||
int groupnumber = join_groupchat(g_c, friendnumber, GROUPCHAT_TYPE_AV, data, length);
|
int groupnumber = join_groupchat(g_c, friendnumber, GROUPCHAT_TYPE_AV, data, length);
|
||||||
|
|
||||||
|
@ -489,7 +492,7 @@ int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (groupchat_enable_av(log, g_c, groupnumber, audio_callback, userdata) == -1) {
|
if (groupchat_enable_av(log, tox, g_c, groupnumber, audio_callback, userdata) == -1) {
|
||||||
del_groupchat(g_c, groupnumber);
|
del_groupchat(g_c, groupnumber);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,12 +21,16 @@
|
||||||
#define C_TOXCORE_TOXAV_GROUPAV_H
|
#define C_TOXCORE_TOXAV_GROUPAV_H
|
||||||
|
|
||||||
#include "../toxcore/group.h"
|
#include "../toxcore/group.h"
|
||||||
|
#include "../toxcore/tox.h"
|
||||||
|
|
||||||
/* Audio encoding/decoding */
|
/* Audio encoding/decoding */
|
||||||
#include <opus.h>
|
#include <opus.h>
|
||||||
|
|
||||||
#define GROUP_AUDIO_PACKET_ID 192
|
#define GROUP_AUDIO_PACKET_ID 192
|
||||||
|
|
||||||
|
// TODO(iphydf): Use this better typed one instead of the void-pointer one below.
|
||||||
|
// typedef void audio_data_cb(Tox *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm,
|
||||||
|
// uint32_t samples, uint8_t channels, uint32_t sample_rate, void *userdata);
|
||||||
typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm,
|
typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm,
|
||||||
uint32_t samples, uint8_t channels, uint32_t sample_rate, void *userdata);
|
uint32_t samples, uint8_t channels, uint32_t sample_rate, void *userdata);
|
||||||
|
|
||||||
|
@ -35,14 +39,15 @@ typedef void audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber,
|
||||||
* return group number on success.
|
* return group number on success.
|
||||||
* return -1 on failure.
|
* return -1 on failure.
|
||||||
*/
|
*/
|
||||||
int add_av_groupchat(const Logger *log, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata);
|
int add_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, audio_data_cb *audio_callback, void *userdata);
|
||||||
|
|
||||||
/* Join a AV group (you need to have been invited first.)
|
/* Join a AV group (you need to have been invited first.)
|
||||||
*
|
*
|
||||||
* returns group number on success
|
* returns group number on success
|
||||||
* returns -1 on failure.
|
* returns -1 on failure.
|
||||||
*/
|
*/
|
||||||
int join_av_groupchat(const Logger *log, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data, uint16_t length,
|
int join_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t friendnumber, const uint8_t *data,
|
||||||
|
uint16_t length,
|
||||||
audio_data_cb *audio_callback, void *userdata);
|
audio_data_cb *audio_callback, void *userdata);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,7 @@ typedef struct ToxAVCall_s {
|
||||||
} ToxAVCall;
|
} ToxAVCall;
|
||||||
|
|
||||||
struct ToxAV {
|
struct ToxAV {
|
||||||
|
Tox *tox;
|
||||||
Messenger *m;
|
Messenger *m;
|
||||||
MSISession *msi;
|
MSISession *msi;
|
||||||
|
|
||||||
|
@ -166,6 +167,7 @@ ToxAV *toxav_new(Tox *tox, TOXAV_ERR_NEW *error)
|
||||||
goto END;
|
goto END;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
av->tox = tox;
|
||||||
av->m = m;
|
av->m = m;
|
||||||
av->msi = msi_new(av->m);
|
av->msi = msi_new(av->m);
|
||||||
|
|
||||||
|
@ -230,7 +232,7 @@ void toxav_kill(ToxAV *av)
|
||||||
}
|
}
|
||||||
Tox *toxav_get_tox(const ToxAV *av)
|
Tox *toxav_get_tox(const ToxAV *av)
|
||||||
{
|
{
|
||||||
return (Tox *) av->m;
|
return av->tox;
|
||||||
}
|
}
|
||||||
uint32_t toxav_iteration_interval(const ToxAV *av)
|
uint32_t toxav_iteration_interval(const ToxAV *av)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,8 +37,9 @@
|
||||||
*/
|
*/
|
||||||
int toxav_add_av_groupchat(Tox *tox, audio_data_cb *audio_callback, void *userdata)
|
int toxav_add_av_groupchat(Tox *tox, audio_data_cb *audio_callback, void *userdata)
|
||||||
{
|
{
|
||||||
Messenger *m = (Messenger *)tox;
|
// TODO(iphydf): Don't rely on toxcore internals.
|
||||||
return add_av_groupchat(m->log, m->conferences_object, audio_callback, userdata);
|
Messenger *m = *(Messenger **)tox;
|
||||||
|
return add_av_groupchat(m->log, tox, m->conferences_object, audio_callback, userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Join a AV group (you need to have been invited first.)
|
/* 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
|
||||||
int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data, uint16_t length,
|
int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data, uint16_t length,
|
||||||
audio_data_cb *audio_callback, void *userdata)
|
audio_data_cb *audio_callback, void *userdata)
|
||||||
{
|
{
|
||||||
Messenger *m = (Messenger *)tox;
|
// TODO(iphydf): Don't rely on toxcore internals.
|
||||||
return join_av_groupchat(m->log, m->conferences_object, friendnumber, data, length, audio_callback, userdata);
|
Messenger *m = *(Messenger **)tox;
|
||||||
|
return join_av_groupchat(m->log, tox, m->conferences_object, friendnumber, data, length, audio_callback, userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send audio to the group chat.
|
/* Send audio to the group chat.
|
||||||
|
@ -74,6 +76,7 @@ int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data
|
||||||
int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
||||||
uint32_t sample_rate)
|
uint32_t sample_rate)
|
||||||
{
|
{
|
||||||
Messenger *m = (Messenger *)tox;
|
// TODO(iphydf): Don't rely on toxcore internals.
|
||||||
|
Messenger *m = *(Messenger **)tox;
|
||||||
return group_send_audio(m->conferences_object, groupnumber, pcm, samples, channels, sample_rate);
|
return group_send_audio(m->conferences_object, groupnumber, pcm, samples, channels, sample_rate);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user