Ejemplo n.º 1
0
// Returns 0 when no valid packet is inside the cache.
int
packet_cache_find_latency( packet_cache *pcache, jack_nframes_t expected_framecnt, jack_nframes_t *framecnt )
{
    int i;
    jack_nframes_t best_offset = 0;
    int retval = 0;

    for (i = 0; i < pcache->size; i++)
    {
        cache_packet *cpack = &(pcache->packets[i]);
        //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );

        if (!cpack->valid || !cache_packet_is_complete( cpack )) {
            //printf( "invalid\n" );
            continue;
	}

	if ((cpack->framecnt - expected_framecnt) < best_offset) {
	    continue;
	}

	best_offset = cpack->framecnt - expected_framecnt;
	retval = 1;

	if( best_offset == 0 )
	    break;
    }
    if (retval && framecnt)
        *framecnt = JACK_MAX_FRAMES - best_offset;

    return retval;
}
Ejemplo n.º 2
0
int
packet_cache_get_highest_available_framecnt( packet_cache *pcache, jack_nframes_t *framecnt )
{
    int i;
    jack_nframes_t best_value = 0;
    int retval = 0;

    for (i = 0; i < pcache->size; i++)
    {
        cache_packet *cpack = &(pcache->packets[i]);
        //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );

        if (!cpack->valid || !cache_packet_is_complete( cpack )) {
            //printf( "invalid\n" );
            continue;
	}

	if (cpack->framecnt < best_value) {
	    continue;
	}

	best_value = cpack->framecnt;
	retval = 1;

    }
    if (retval && framecnt)
        *framecnt = best_value;

    return retval;
}
Ejemplo n.º 3
0
int
packet_cache_retreive_packet_pointer( packet_cache *pcache, jack_nframes_t framecnt, char **packet_buf, int pkt_size, jack_time_t *timestamp )
{
    int i;
    cache_packet *cpack = NULL;


    for (i = 0; i < pcache->size; i++) {
        if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
            cpack = &(pcache->packets[i]);
            break;
        }
    }

    if( cpack == NULL ) {
        //printf( "retreive packet: %d....not found\n", framecnt );
        return -1;
    }

    if( !cache_packet_is_complete( cpack ) ) {
        return -1;
    }

    // ok. cpack is the one we want and its complete.
    *packet_buf = cpack->packet_buf;
    if( timestamp )
        *timestamp = cpack->recv_timestamp;

    pcache->last_framecnt_retreived_valid = 1;
    pcache->last_framecnt_retreived = framecnt;

    return pkt_size;
}
Ejemplo n.º 4
0
int
packet_cache_release_packet( packet_cache *pcache, jack_nframes_t framecnt )
{
    int i;
    cache_packet *cpack = NULL;


    for (i = 0; i < pcache->size; i++) {
        if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
            cpack = &(pcache->packets[i]);
            break;
        }
    }

    if( cpack == NULL ) {
        //printf( "retreive packet: %d....not found\n", framecnt );
        return -1;
    }

    if( !cache_packet_is_complete( cpack ) ) {
        return -1;
    }

    cache_packet_reset (cpack);
    packet_cache_clear_old_packets( pcache, framecnt );

    return 0;
}
Ejemplo n.º 5
0
float
packet_cache_get_fill( packet_cache *pcache, jack_nframes_t expected_framecnt )
{
    int num_packets_before_us = 0;
    int i;

    for (i = 0; i < pcache->size; i++) {
        cache_packet *cpack = &(pcache->packets[i]);
        if (cpack->valid && cache_packet_is_complete( cpack ))
            if( cpack->framecnt >= expected_framecnt )
                num_packets_before_us += 1;
    }

    return 100.0 * (float)num_packets_before_us / (float)( pcache->size );
}