diff options
author | notsecure <notsecure@marek.ca> | 2014-07-07 16:10:10 -0400 |
---|---|---|
committer | notsecure <notsecure@marek.ca> | 2014-07-07 16:10:10 -0400 |
commit | 3d4de767fe8fefb5eb2456674be9930388564ee8 (patch) | |
tree | a423434166b07578be929c8b3d93dde877130d02 /toxav/rtp.c | |
parent | 738bc56da7fc9d80fa4cb1d0a442bd74b3284bfe (diff) |
use callbacks for a/v
Diffstat (limited to 'toxav/rtp.c')
-rw-r--r-- | toxav/rtp.c | 132 |
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> |
31 | void 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 | */ | ||
479 | int 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 | */ | ||
511 | void 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 | */ | ||
537 | RTPMessage *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 */ |