summaryrefslogtreecommitdiff
path: root/toxav/rtp.c
diff options
context:
space:
mode:
authornotsecure <notsecure@marek.ca>2014-07-07 16:10:10 -0400
committernotsecure <notsecure@marek.ca>2014-07-07 16:10:10 -0400
commit3d4de767fe8fefb5eb2456674be9930388564ee8 (patch)
treea423434166b07578be929c8b3d93dde877130d02 /toxav/rtp.c
parent738bc56da7fc9d80fa4cb1d0a442bd74b3284bfe (diff)
use callbacks for a/v
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r--toxav/rtp.c132
1 files changed, 2 insertions, 130 deletions
diff --git a/toxav/rtp.c b/toxav/rtp.c
index 653a22df..a6bcaf18 100644
--- a/toxav/rtp.c
+++ b/toxav/rtp.c
@@ -28,6 +28,7 @@
28 28
29#include "rtp.h" 29#include "rtp.h"
30#include <stdlib.h> 30#include <stdlib.h>
31void toxav_handle_packet(RTPSession *_session, RTPMessage *_msg);
31 32
32#define size_32 4 33#define size_32 4
33 34
@@ -372,11 +373,6 @@ int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length )
372 return -1; 373 return -1;
373 } 374 }
374 375
375 if ( _session->queue_limit <= _session->queue_size ) {
376 LOGGER_WARNING("Queue limit reached!");
377 return -1;
378 }
379
380 _msg = msg_parse ( data + 1, length - 1 ); 376 _msg = msg_parse ( data + 1, length - 1 );
381 377
382 if ( !_msg ) { 378 if ( !_msg ) {
@@ -390,18 +386,7 @@ int rtp_handle_packet ( void *object, const uint8_t *data, uint32_t length )
390 _session->timestamp = _msg->header->timestamp; 386 _session->timestamp = _msg->header->timestamp;
391 } 387 }
392 388
393 pthread_mutex_lock(&_session->mutex); 389 toxav_handle_packet(_session, _msg);
394
395 if ( _session->last_msg ) {
396 _session->last_msg->next = _msg;
397 _session->last_msg = _msg;
398 } else {
399 _session->last_msg = _session->oldest_msg = _msg;
400 }
401
402 _session->queue_size++;
403
404 pthread_mutex_unlock(&_session->mutex);
405 390
406 return 0; 391 return 0;
407} 392}
@@ -467,105 +452,6 @@ RTPMessage *rtp_new_message ( RTPSession *session, const uint8_t *data, uint32_t
467} 452}
468 453
469 454
470
471/**
472 * @brief Release all messages held by session.
473 *
474 * @param session The session.
475 * @return int
476 * @retval -1 Error occurred.
477 * @retval 0 Success.
478 */
479int rtp_release_session_recv ( RTPSession *session )
480{
481 if ( !session ) {
482 LOGGER_WARNING("No session!");
483 return -1;
484 }
485
486 RTPMessage *_tmp, * _it;
487
488 pthread_mutex_lock(&session->mutex);
489
490 for ( _it = session->oldest_msg; _it; _it = _tmp ) {
491 _tmp = _it->next;
492 rtp_free_msg( session, _it);
493 }
494
495 session->last_msg = session->oldest_msg = NULL;
496 session->queue_size = 0;
497
498 pthread_mutex_unlock(&session->mutex);
499
500 return 0;
501}
502
503
504/**
505 * @brief Call this to change queue limit
506 *
507 * @param session The session
508 * @param limit new limit
509 * @return void
510 */
511void rtp_queue_adjust_limit(RTPSession *session, uint64_t limit)
512{
513 pthread_mutex_lock(&session->mutex);
514
515 RTPMessage *_tmp, * _it = session->oldest_msg;
516
517 for ( ; session->queue_size > limit; _it = _tmp ) {
518 _tmp = _it->next;
519 rtp_free_msg( session, _it);
520 session->queue_size --;
521 }
522
523 session->oldest_msg = _it;
524 session->queue_limit = limit;
525
526 pthread_mutex_unlock(&session->mutex);
527}
528
529
530/**
531 * @brief Gets oldest message in the list.
532 *
533 * @param session Where the list is.
534 * @return RTPMessage* The message. You _must_ call rtp_msg_free() to free it.
535 * @retval NULL No messages in the list, or no list.
536 */
537RTPMessage *rtp_recv_msg ( RTPSession *session )
538{
539 if ( !session ) {
540 LOGGER_WARNING("No session!");
541 return NULL;
542 }
543
544 pthread_mutex_lock(&session->mutex);
545
546 if ( session->queue_size == 0 ) {
547 pthread_mutex_unlock(&session->mutex);
548 return NULL;
549 }
550
551
552 RTPMessage *_retu = session->oldest_msg;
553
554 /*if (_retu)*/
555 session->oldest_msg = _retu->next;
556
557 if ( !session->oldest_msg )
558 session->last_msg = NULL;
559
560 session->queue_size --;
561
562 pthread_mutex_unlock(&session->mutex);
563
564
565 return _retu;
566}
567
568
569/** 455/**
570 * @brief Sends data to _RTPSession::dest 456 * @brief Sends data to _RTPSession::dest
571 * 457 *
@@ -627,7 +513,6 @@ void rtp_free_msg ( RTPSession *session, RTPMessage *msg )
627 free ( msg ); 513 free ( msg );
628} 514}
629 515
630
631/** 516/**
632 * @brief Must be called before calling any other rtp function. It's used 517 * @brief Must be called before calling any other rtp function. It's used
633 * to initialize RTP control session. 518 * to initialize RTP control session.
@@ -682,11 +567,6 @@ RTPSession *rtp_init_session ( int payload_type, Messenger *messenger, int frien
682 /* Also set payload type as prefix */ 567 /* Also set payload type as prefix */
683 _retu->prefix = payload_type; 568 _retu->prefix = payload_type;
684 569
685 _retu->oldest_msg = _retu->last_msg = NULL;
686 _retu->queue_limit = 100; /* Default */
687 _retu->queue_size = 0;
688
689 pthread_mutex_init(&_retu->mutex, NULL);
690 /* 570 /*
691 * 571 *
692 */ 572 */
@@ -709,17 +589,9 @@ void rtp_terminate_session ( RTPSession *session, Messenger *messenger )
709 589
710 custom_lossy_packet_registerhandler(messenger, session->dest, session->prefix, NULL, NULL); 590 custom_lossy_packet_registerhandler(messenger, session->dest, session->prefix, NULL, NULL);
711 591
712 rtp_release_session_recv(session);
713
714 pthread_mutex_lock(&session->mutex);
715
716 free ( session->ext_header ); 592 free ( session->ext_header );
717 free ( session->csrc ); 593 free ( session->csrc );
718 594
719 pthread_mutex_unlock(&session->mutex);
720
721 pthread_mutex_destroy(&session->mutex);
722
723 LOGGER_DEBUG("Terminated RTP session: %p", session); 595 LOGGER_DEBUG("Terminated RTP session: %p", session);
724 596
725 /* And finally free session */ 597 /* And finally free session */