diff options
Diffstat (limited to 'toxav/av_test.c')
-rw-r--r-- | toxav/av_test.c | 61 |
1 files changed, 57 insertions, 4 deletions
diff --git a/toxav/av_test.c b/toxav/av_test.c index 01484249..46fd97e1 100644 --- a/toxav/av_test.c +++ b/toxav/av_test.c | |||
@@ -39,6 +39,7 @@ | |||
39 | typedef struct { | 39 | typedef struct { |
40 | bool incoming; | 40 | bool incoming; |
41 | uint32_t state; | 41 | uint32_t state; |
42 | uint32_t output_source; | ||
42 | } CallControl; | 43 | } CallControl; |
43 | 44 | ||
44 | const char* stringify_state(TOXAV_CALL_STATE s) | 45 | const char* stringify_state(TOXAV_CALL_STATE s) |
@@ -58,6 +59,8 @@ const char* stringify_state(TOXAV_CALL_STATE s) | |||
58 | }; | 59 | }; |
59 | 60 | ||
60 | 61 | ||
62 | int device_play_frame(uint32_t source, const int16_t* PCM, size_t size); | ||
63 | |||
61 | /** | 64 | /** |
62 | * Callbacks | 65 | * Callbacks |
63 | */ | 66 | */ |
@@ -86,7 +89,7 @@ void t_toxav_receive_audio_frame_cb(ToxAV *av, uint32_t friend_number, | |||
86 | uint32_t sampling_rate, | 89 | uint32_t sampling_rate, |
87 | void *user_data) | 90 | void *user_data) |
88 | { | 91 | { |
89 | printf("Handling AUDIO FRAME callback\n"); | 92 | device_play_frame(((CallControl*)user_data)->output_source, pcm, sample_count); |
90 | } | 93 | } |
91 | void t_accept_friend_request_cb(Tox *m, const uint8_t *public_key, const uint8_t *data, uint16_t length, void *userdata) | 94 | void t_accept_friend_request_cb(Tox *m, const uint8_t *public_key, const uint8_t *data, uint16_t length, void *userdata) |
92 | { | 95 | { |
@@ -173,7 +176,7 @@ int device_read_frame(ALCdevice* device, int32_t frame_dur, int16_t* PCM, size_t | |||
173 | return f_size; | 176 | return f_size; |
174 | } | 177 | } |
175 | 178 | ||
176 | int device_play_frame(uint32_t source, int16_t* PCM, size_t size) | 179 | int device_play_frame(uint32_t source, const int16_t* PCM, size_t size) |
177 | { | 180 | { |
178 | uint32_t bufid; | 181 | uint32_t bufid; |
179 | int32_t processed, queued; | 182 | int32_t processed, queued; |
@@ -604,17 +607,67 @@ int main (int argc, char** argv) | |||
604 | if (TEST_TRANSFER_A) { /* Audio encoding/decoding and transfer */ | 607 | if (TEST_TRANSFER_A) { /* Audio encoding/decoding and transfer */ |
605 | printf("\nTrying audio enc/dec...\n"); | 608 | printf("\nTrying audio enc/dec...\n"); |
606 | 609 | ||
610 | memset(&AliceCC, 0, sizeof(CallControl)); | ||
611 | memset(&BobCC, 0, sizeof(CallControl)); | ||
612 | |||
613 | AliceCC.output_source = BobCC.output_source = source; | ||
614 | |||
615 | { | ||
616 | TOXAV_ERR_CALL rc; | ||
617 | toxav_call(AliceAV, 0, 48, 0, &rc); | ||
618 | |||
619 | if (rc != TOXAV_ERR_CALL_OK) { | ||
620 | printf("toxav_call failed: %d\n", rc); | ||
621 | exit(1); | ||
622 | } | ||
623 | } | ||
624 | |||
625 | while (!BobCC.incoming) | ||
626 | iterate(Bsn, AliceAV, BobAV); | ||
627 | |||
628 | { | ||
629 | TOXAV_ERR_ANSWER rc; | ||
630 | toxav_answer(BobAV, 0, 48, 0, &rc); | ||
631 | |||
632 | if (rc != TOXAV_ERR_ANSWER_OK) { | ||
633 | printf("toxav_answer failed: %d\n", rc); | ||
634 | exit(1); | ||
635 | } | ||
636 | } | ||
637 | |||
638 | iterate(Bsn, AliceAV, BobAV); | ||
639 | |||
607 | int16_t PCM[10000]; | 640 | int16_t PCM[10000]; |
608 | time_t start_time = time(NULL); | 641 | time_t start_time = time(NULL); |
609 | 642 | ||
610 | /* Run for 5 seconds */ | 643 | /* Run for 5 seconds */ |
611 | while ( start_time + 10 > time(NULL) ) { | 644 | while ( start_time + 10 > time(NULL) ) { |
612 | int frame_size = device_read_frame(in_device, 20, PCM, sizeof(PCM)); | 645 | int frame_size = device_read_frame(in_device, 20, PCM, sizeof(PCM)); |
613 | if (frame_size > 0) | 646 | if (frame_size > 0) { |
614 | device_play_frame(source, PCM, frame_size); | 647 | TOXAV_ERR_SEND_FRAME rc; |
648 | if (toxav_send_audio_frame(AliceAV, 0, PCM, frame_size, 2, 48000, &rc) == false) { | ||
649 | printf("Error sending frame of size %d: %d\n", frame_size, rc); | ||
650 | exit (1); | ||
651 | } | ||
652 | } | ||
653 | |||
654 | iterate(Bsn, AliceAV, BobAV); | ||
615 | // c_sleep(20); | 655 | // c_sleep(20); |
616 | } | 656 | } |
617 | 657 | ||
658 | { | ||
659 | TOXAV_ERR_CALL_CONTROL rc; | ||
660 | toxav_call_control(AliceAV, 0, TOXAV_CALL_CONTROL_CANCEL, &rc); | ||
661 | |||
662 | if (rc != TOXAV_ERR_CALL_CONTROL_OK) { | ||
663 | printf("toxav_call_control failed: %d\n", rc); | ||
664 | exit(1); | ||
665 | } | ||
666 | } | ||
667 | |||
668 | iterate(Bsn, AliceAV, BobAV); | ||
669 | assert(BobCC.state == TOXAV_CALL_STATE_END); | ||
670 | |||
618 | printf("Success!"); | 671 | printf("Success!"); |
619 | } | 672 | } |
620 | 673 | ||