Exemplo n.º 1
0
int streamxmit_close(STREAM_RTP_DEST_T *pDest, int lock) {
  int rc = 0;
  STREAM_XMIT_QUEUE_T *pAsyncQ;

  if(!pDest) {
    return -1;
  }

  pAsyncQ = &pDest->asyncQ;

  if(lock) {
    pthread_mutex_lock(&pDest->pRtpMulti->mtx);
  }
 
  if(pAsyncQ->pQ) {
    pktqueue_destroy(pAsyncQ->pQ);
    pAsyncQ->doAsyncXmit = 0;
    pAsyncQ->doRtcpNack = 0;
    pAsyncQ->pQ = NULL;
    pthread_mutex_destroy(&pAsyncQ->mtx);
  }

  burstmeter_close(&pAsyncQ->retransmissionMeter);

  if(lock) {
    pthread_mutex_unlock(&pDest->pRtpMulti->mtx);
  }

  return rc;
}
Exemplo n.º 2
0
int stream_stats_destroy(STREAM_STATS_T **ppStats, pthread_mutex_t *pmtx) {
    unsigned int idx;
    unsigned int throughputIdx;

    if(pmtx) {
        pthread_mutex_lock(pmtx);
    }

    if(!ppStats || !(*ppStats)) {
        if(pmtx) {
            pthread_mutex_unlock(pmtx);
        }
        return -1;
    }

    pthread_mutex_lock(&(*ppStats)->mtx);

    (*ppStats)->active = 0;

    //
    // Automatically detach from monitor linked list
    //
    if((*ppStats)->pMonitor) {
        stream_monitor_detach( (*ppStats)->pMonitor, *ppStats);
    }

    for(idx = 0; idx < THROUGHPUT_STATS_BURSTRATES_MAX; idx++) {
        for(throughputIdx = 0; throughputIdx < 2; throughputIdx++) {
            burstmeter_close(&(*ppStats)->throughput_rt[throughputIdx].bitratesWr[idx]);
            burstmeter_close(&(*ppStats)->throughput_rt[throughputIdx].bitratesRd[idx]);
        }
    }

    pthread_mutex_unlock(&(*ppStats)->mtx);
    pthread_mutex_destroy(&(*ppStats)->mtx);
    avc_free((void **) ppStats);

    if(pmtx) {
        pthread_mutex_unlock(pmtx);
    }

    return 0;
}