Merge commit '9ace11a0e2843cbde4af2b6ff7b49bcc6d429f78'
This commit is contained in:
6
external/toxcore/c-toxcore/toxav/audio.c
vendored
6
external/toxcore/c-toxcore/toxav/audio.c
vendored
@ -196,13 +196,13 @@ void ac_iterate(ACSession *ac)
|
||||
|
||||
int ac_queue_message(Mono_Time *mono_time, void *acp, struct RTPMessage *msg)
|
||||
{
|
||||
if (acp == nullptr || msg == nullptr) {
|
||||
ACSession *ac = (ACSession *)acp;
|
||||
|
||||
if (ac == nullptr || msg == nullptr) {
|
||||
free(msg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ACSession *ac = (ACSession *)acp;
|
||||
|
||||
if ((msg->header.pt & 0x7f) == (RTP_TYPE_AUDIO + 2) % 128) {
|
||||
LOGGER_WARNING(ac->log, "Got dummy!");
|
||||
free(msg);
|
||||
|
@ -208,6 +208,8 @@ static int bwc_send_custom_lossy_packet(Tox *tox, int32_t friendnumber, const ui
|
||||
|
||||
static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object)
|
||||
{
|
||||
BWController *bwc = (BWController *)object;
|
||||
|
||||
if (length - 1 != sizeof(struct BWCMessage)) {
|
||||
return -1;
|
||||
}
|
||||
@ -218,5 +220,5 @@ static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *d
|
||||
offset += net_unpack_u32(data + offset, &msg.recv);
|
||||
assert(offset == length);
|
||||
|
||||
return on_update((BWController *)object, &msg);
|
||||
return on_update(bwc, &msg);
|
||||
}
|
||||
|
14
external/toxcore/c-toxcore/toxav/groupav.c
vendored
14
external/toxcore/c-toxcore/toxav/groupav.c
vendored
@ -290,8 +290,9 @@ static void group_av_peer_delete(void *object, uint32_t groupnumber, void *peer_
|
||||
|
||||
static void group_av_groupchat_delete(void *object, uint32_t groupnumber)
|
||||
{
|
||||
if (object != nullptr) {
|
||||
kill_group_av((Group_AV *)object);
|
||||
Group_AV *group_av = (Group_AV *)object;
|
||||
if (group_av != nullptr) {
|
||||
kill_group_av(group_av);
|
||||
}
|
||||
}
|
||||
|
||||
@ -404,12 +405,13 @@ static int decode_audio_packet(Group_AV *group_av, Group_Peer_AV *peer_av, uint3
|
||||
static int handle_group_audio_packet(void *object, uint32_t groupnumber, uint32_t friendgroupnumber, void *peer_object,
|
||||
const uint8_t *packet, uint16_t length)
|
||||
{
|
||||
if (peer_object == nullptr || object == nullptr || length <= sizeof(uint16_t)) {
|
||||
Group_AV *group_av = (Group_AV *)object;
|
||||
Group_Peer_AV *peer_av = (Group_Peer_AV *)peer_object;
|
||||
|
||||
if (group_av == nullptr || peer_av == nullptr || length <= sizeof(uint16_t)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
Group_Peer_AV *peer_av = (Group_Peer_AV *)peer_object;
|
||||
|
||||
Group_Audio_Packet *pk = (Group_Audio_Packet *)calloc(1, sizeof(Group_Audio_Packet));
|
||||
|
||||
if (pk == nullptr) {
|
||||
@ -433,7 +435,7 @@ static int handle_group_audio_packet(void *object, uint32_t groupnumber, uint32_
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (decode_audio_packet((Group_AV *)object, peer_av, groupnumber, friendgroupnumber) == 0) {
|
||||
while (decode_audio_packet(group_av, peer_av, groupnumber, friendgroupnumber) == 0) {
|
||||
/* Continue. */
|
||||
}
|
||||
|
||||
|
10
external/toxcore/c-toxcore/toxav/msi.c
vendored
10
external/toxcore/c-toxcore/toxav/msi.c
vendored
@ -60,7 +60,7 @@ typedef struct MSIMessage {
|
||||
|
||||
static void msg_init(MSIMessage *dest, MSIRequest request);
|
||||
static int msg_parse_in(const Logger *log, MSIMessage *dest, const uint8_t *data, uint16_t length);
|
||||
static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const void *value, uint8_t value_len,
|
||||
static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const uint8_t *value, uint8_t value_len,
|
||||
uint16_t *length);
|
||||
static int send_message(const Messenger *m, uint32_t friend_number, const MSIMessage *msg);
|
||||
static int send_error(const Messenger *m, uint32_t friend_number, MSIError error);
|
||||
@ -425,7 +425,7 @@ static int msg_parse_in(const Logger *log, MSIMessage *dest, const uint8_t *data
|
||||
|
||||
return 0;
|
||||
}
|
||||
static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const void *value, uint8_t value_len,
|
||||
static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const uint8_t *value, uint8_t value_len,
|
||||
uint16_t *length)
|
||||
{
|
||||
/* Parse a single header for sending */
|
||||
@ -657,12 +657,13 @@ CLEAR_CONTAINER:
|
||||
}
|
||||
static void on_peer_status(Messenger *m, uint32_t friend_number, uint8_t status, void *data)
|
||||
{
|
||||
MSISession *session = (MSISession *)data;
|
||||
|
||||
if (status != 0) {
|
||||
// Friend is online.
|
||||
return;
|
||||
}
|
||||
|
||||
MSISession *session = (MSISession *)data;
|
||||
LOGGER_DEBUG(m->log, "Friend %d is now offline", friend_number);
|
||||
|
||||
pthread_mutex_lock(session->mutex);
|
||||
@ -851,9 +852,10 @@ static void handle_pop(MSICall *call, const MSIMessage *msg)
|
||||
}
|
||||
static void handle_msi_packet(Messenger *m, uint32_t friend_number, const uint8_t *data, uint16_t length, void *object)
|
||||
{
|
||||
MSISession *session = (MSISession *)object;
|
||||
|
||||
LOGGER_DEBUG(m->log, "Got msi message");
|
||||
|
||||
MSISession *session = (MSISession *)object;
|
||||
MSIMessage msg;
|
||||
|
||||
if (msg_parse_in(m->log, &msg, data, length) == -1) {
|
||||
|
55
external/toxcore/c-toxcore/toxav/toxav.h
vendored
55
external/toxcore/c-toxcore/toxav/toxav.h
vendored
@ -65,15 +65,17 @@ extern "C" {
|
||||
/**
|
||||
* External Tox type.
|
||||
*/
|
||||
#ifndef APIGEN_IGNORE
|
||||
#ifndef TOX_DEFINED
|
||||
#define TOX_DEFINED
|
||||
typedef struct Tox Tox;
|
||||
#endif /* TOX_DEFINED */
|
||||
#endif /* !TOX_DEFINED */
|
||||
#endif /* !APIGEN_IGNORE */
|
||||
|
||||
/**
|
||||
* @brief The ToxAV instance type.
|
||||
*
|
||||
* Each ToxAV instance can be bound to only one Tox instance, and Tox instance
|
||||
* Each ToxAV instance can be bound to only one Tox instance, and Tox instance
|
||||
* can have only one ToxAV instance. One must make sure to close ToxAV instance
|
||||
* prior closing Tox instance otherwise undefined behaviour occurs. Upon
|
||||
* closing of ToxAV instance, all active calls will be forcibly terminated
|
||||
@ -605,7 +607,7 @@ typedef enum Toxav_Err_Send_Frame {
|
||||
* @param sampling_rate Audio sampling rate used in this frame. Valid sampling
|
||||
* rates are 8000, 12000, 16000, 24000, or 48000.
|
||||
*/
|
||||
bool toxav_audio_send_frame(ToxAV *av, uint32_t friend_number, const int16_t *pcm, size_t sample_count,
|
||||
bool toxav_audio_send_frame(ToxAV *av, uint32_t friend_number, const int16_t pcm[], size_t sample_count,
|
||||
uint8_t channels, uint32_t sampling_rate, Toxav_Err_Send_Frame *error);
|
||||
|
||||
/**
|
||||
@ -652,8 +654,12 @@ void toxav_callback_audio_bit_rate(ToxAV *av, toxav_audio_bit_rate_cb *callback,
|
||||
* @param u U (Chroma) plane data.
|
||||
* @param v V (Chroma) plane data.
|
||||
*/
|
||||
bool toxav_video_send_frame(ToxAV *av, uint32_t friend_number, uint16_t width, uint16_t height, const uint8_t *y,
|
||||
const uint8_t *u, const uint8_t *v, Toxav_Err_Send_Frame *error);
|
||||
bool toxav_video_send_frame(
|
||||
ToxAV *av, uint32_t friend_number, uint16_t width, uint16_t height,
|
||||
const uint8_t y[/*! height * width */],
|
||||
const uint8_t u[/*! height/2 * width/2 */],
|
||||
const uint8_t v[/*! height/2 * width/2 */],
|
||||
Toxav_Err_Send_Frame *error);
|
||||
|
||||
/**
|
||||
* Set the bit rate to be used in subsequent video frames.
|
||||
@ -703,7 +709,7 @@ void toxav_callback_video_bit_rate(ToxAV *av, toxav_video_bit_rate_cb *callback,
|
||||
* @param sampling_rate Sampling rate used in this frame.
|
||||
*
|
||||
*/
|
||||
typedef void toxav_audio_receive_frame_cb(ToxAV *av, uint32_t friend_number, const int16_t *pcm, size_t sample_count,
|
||||
typedef void toxav_audio_receive_frame_cb(ToxAV *av, uint32_t friend_number, const int16_t pcm[], size_t sample_count,
|
||||
uint8_t channels, uint32_t sampling_rate, void *user_data);
|
||||
|
||||
|
||||
@ -735,8 +741,13 @@ void toxav_callback_audio_receive_frame(ToxAV *av, toxav_audio_receive_frame_cb
|
||||
* @param ustride U chroma plane stride.
|
||||
* @param vstride V chroma plane stride.
|
||||
*/
|
||||
typedef void toxav_video_receive_frame_cb(ToxAV *av, uint32_t friend_number, uint16_t width, uint16_t height,
|
||||
const uint8_t *y, const uint8_t *u, const uint8_t *v, int32_t ystride, int32_t ustride, int32_t vstride,
|
||||
typedef void toxav_video_receive_frame_cb(
|
||||
ToxAV *av, uint32_t friend_number,
|
||||
uint16_t width, uint16_t height,
|
||||
const uint8_t y[/*! max(width, abs(ystride)) * height */],
|
||||
const uint8_t u[/*! max(width/2, abs(ustride)) * (height/2) */],
|
||||
const uint8_t v[/*! max(width/2, abs(vstride)) * (height/2) */],
|
||||
int32_t ystride, int32_t ustride, int32_t vstride,
|
||||
void *user_data);
|
||||
|
||||
|
||||
@ -746,6 +757,8 @@ typedef void toxav_video_receive_frame_cb(ToxAV *av, uint32_t friend_number, uin
|
||||
*/
|
||||
void toxav_callback_video_receive_frame(ToxAV *av, toxav_video_receive_frame_cb *callback, void *user_data);
|
||||
|
||||
#ifndef APIGEN_IGNORE
|
||||
|
||||
/***
|
||||
* NOTE Compatibility with old toxav group calls. TODO(iphydf): remove
|
||||
*
|
||||
@ -755,10 +768,10 @@ void toxav_callback_video_receive_frame(ToxAV *av, toxav_video_receive_frame_cb
|
||||
*/
|
||||
|
||||
// TODO(iphydf): Use this better typed one instead of the void-pointer one below.
|
||||
typedef void toxav_group_audio_cb(Tox *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm,
|
||||
typedef void toxav_group_audio_cb(Tox *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t pcm[],
|
||||
uint32_t samples, uint8_t channels, uint32_t sample_rate, void *user_data);
|
||||
|
||||
typedef void toxav_audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peernumber, const int16_t *pcm,
|
||||
typedef void toxav_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);
|
||||
|
||||
/** @brief Create a new toxav group.
|
||||
@ -768,7 +781,7 @@ typedef void toxav_audio_data_cb(void *tox, uint32_t groupnumber, uint32_t peern
|
||||
*
|
||||
* Note that total size of pcm in bytes is equal to `samples * channels * sizeof(int16_t)`.
|
||||
*/
|
||||
int toxav_add_av_groupchat(Tox *tox, toxav_audio_data_cb *audio_callback, void *userdata);
|
||||
int32_t toxav_add_av_groupchat(Tox *tox, toxav_audio_data_cb *audio_callback, void *userdata);
|
||||
|
||||
/** @brief Join a AV group (you need to have been invited first).
|
||||
*
|
||||
@ -777,8 +790,9 @@ int toxav_add_av_groupchat(Tox *tox, toxav_audio_data_cb *audio_callback, void *
|
||||
*
|
||||
* Note that total size of pcm in bytes is equal to `samples * channels * sizeof(int16_t)`.
|
||||
*/
|
||||
int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data, uint16_t length,
|
||||
toxav_audio_data_cb *audio_callback, void *userdata);
|
||||
int32_t toxav_join_av_groupchat(
|
||||
Tox *tox, uint32_t friendnumber, const uint8_t data[], uint16_t length,
|
||||
toxav_audio_data_cb *audio_callback, void *userdata);
|
||||
|
||||
/** @brief Send audio to the group chat.
|
||||
*
|
||||
@ -794,8 +808,9 @@ int toxav_join_av_groupchat(Tox *tox, uint32_t friendnumber, const uint8_t *data
|
||||
*
|
||||
* Recommended values are: samples = 960, channels = 1, sample_rate = 48000
|
||||
*/
|
||||
int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
||||
uint32_t sample_rate);
|
||||
int32_t toxav_group_send_audio(
|
||||
Tox *tox, uint32_t groupnumber, const int16_t pcm[], uint32_t samples, uint8_t channels,
|
||||
uint32_t sample_rate);
|
||||
|
||||
/** @brief Enable A/V in a groupchat.
|
||||
*
|
||||
@ -812,19 +827,22 @@ int toxav_group_send_audio(Tox *tox, uint32_t groupnumber, const int16_t *pcm, u
|
||||
*
|
||||
* Note that total size of pcm in bytes is equal to `samples * channels * sizeof(int16_t)`.
|
||||
*/
|
||||
int toxav_groupchat_enable_av(Tox *tox, uint32_t groupnumber,
|
||||
toxav_audio_data_cb *audio_callback, void *userdata);
|
||||
int32_t toxav_groupchat_enable_av(
|
||||
Tox *tox, uint32_t groupnumber,
|
||||
toxav_audio_data_cb *audio_callback, void *userdata);
|
||||
|
||||
/** @brief Disable A/V in a groupchat.
|
||||
*
|
||||
* @retval 0 on success.
|
||||
* @retval -1 on failure.
|
||||
*/
|
||||
int toxav_groupchat_disable_av(Tox *tox, uint32_t groupnumber);
|
||||
int32_t toxav_groupchat_disable_av(Tox *tox, uint32_t groupnumber);
|
||||
|
||||
/** @brief Return whether A/V is enabled in the groupchat. */
|
||||
bool toxav_groupchat_av_enabled(Tox *tox, uint32_t groupnumber);
|
||||
|
||||
#endif /* !APIGEN_IGNORE */
|
||||
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -834,6 +852,7 @@ bool toxav_groupchat_av_enabled(Tox *tox, uint32_t groupnumber);
|
||||
//!TOKSTYLE-
|
||||
#ifndef DOXYGEN_IGNORE
|
||||
|
||||
typedef ToxAV Toxav;
|
||||
typedef Toxav_Err_Call TOXAV_ERR_CALL;
|
||||
typedef Toxav_Err_New TOXAV_ERR_NEW;
|
||||
typedef Toxav_Err_Answer TOXAV_ERR_ANSWER;
|
||||
|
5
external/toxcore/c-toxcore/toxav/video.c
vendored
5
external/toxcore/c-toxcore/toxav/video.c
vendored
@ -345,17 +345,18 @@ void vc_iterate(VCSession *vc)
|
||||
|
||||
int vc_queue_message(Mono_Time *mono_time, void *vcp, struct RTPMessage *msg)
|
||||
{
|
||||
VCSession *vc = (VCSession *)vcp;
|
||||
|
||||
/* This function is called with complete messages
|
||||
* they have already been assembled.
|
||||
* this function gets called from handle_rtp_packet() and handle_rtp_packet_v3()
|
||||
*/
|
||||
if (vcp == nullptr || msg == nullptr) {
|
||||
if (vc == nullptr || msg == nullptr) {
|
||||
free(msg);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
VCSession *vc = (VCSession *)vcp;
|
||||
const struct RTPHeader *const header = &msg->header;
|
||||
|
||||
if (msg->header.pt == (RTP_TYPE_VIDEO + 2) % 128) {
|
||||
|
Reference in New Issue
Block a user