Lines Matching refs:ring
278 * Audio Ring Buffer.
282 #define DIAGNOSTIC_ring(ring) audio_diagnostic_ring(__func__, (ring))
285 #define DIAGNOSTIC_ring(ring)
311 auring_round(const audio_ring_t *ring, int idx)
313 DIAGNOSTIC_ring(ring);
315 KASSERTMSG(idx < ring->capacity * 2,
316 "idx=%d ring->capacity=%d", idx, ring->capacity);
318 if (idx < ring->capacity) {
321 return idx - ring->capacity;
326 * Return ring's tail (= head + used) position.
330 auring_tail(const audio_ring_t *ring)
332 return auring_round(ring, ring->head + ring->used);
336 * Return ring's head pointer.
337 * This function can be used only if the stride of the 'ring' is equal to
341 auring_headptr_aint(const audio_ring_t *ring)
343 KASSERTMSG(ring->fmt.stride == sizeof(aint_t) * NBBY,
344 "ring->fmt.stride=%d sizeof(aint_t)*NBBY=%zd",
345 ring->fmt.stride, sizeof(aint_t) * NBBY);
347 return (aint_t *)ring->mem + ring->head * ring->fmt.channels;
351 * Return ring's tail (= head + used) pointer.
352 * This function can be used only if the stride of the 'ring' is equal to
356 auring_tailptr_aint(const audio_ring_t *ring)
358 KASSERTMSG(ring->fmt.stride == sizeof(aint_t) * NBBY,
359 "ring->fmt.stride=%d sizeof(aint_t)*NBBY=%zd",
360 ring->fmt.stride, sizeof(aint_t) * NBBY);
362 return (aint_t *)ring->mem + auring_tail(ring) * ring->fmt.channels;
366 * Return ring's head pointer.
367 * This function can be used even if the stride of the 'ring' is equal to
371 auring_headptr(const audio_ring_t *ring)
373 return (uint8_t *)ring->mem +
374 ring->head * ring->fmt.channels * ring->fmt.stride / NBBY;
378 * Return ring's tail pointer.
380 * This function can be used even if the stride of the 'ring' is equal to
384 auring_tailptr(audio_ring_t *ring)
386 return (uint8_t *)ring->mem +
387 auring_tail(ring) * ring->fmt.channels * ring->fmt.stride / NBBY;
391 * Return ring's capacity in bytes.
394 auring_bytelen(const audio_ring_t *ring)
396 return frametobyte(&ring->fmt, ring->capacity);
400 * Take out n frames from head of ring.
404 #define auring_take(ring, n) auring_take_(__func__, __LINE__, ring, n)
406 auring_take_(const char *func, int line, audio_ring_t *ring, int n)
408 DIAGNOSTIC_ring(ring);
410 KASSERTMSG(ring->used >= n, "called from %s:%d: ring->used=%d n=%d",
411 func, line, ring->used, n);
413 ring->head = auring_round(ring, ring->head + n);
414 ring->used -= n;
418 * Append n frames into tail of ring.
422 #define auring_push(ring, n) auring_push_(__func__, __LINE__, ring, n)
424 auring_push_(const char *func, int line, audio_ring_t *ring, int n)
426 DIAGNOSTIC_ring(ring);
428 KASSERTMSG(ring->used + n <= ring->capacity,
429 "called from %s:%d: ring->used=%d n=%d ring->capacity=%d",
430 func, line, ring->used, n, ring->capacity);
432 ring->used += n;
439 auring_get_contig_used(const audio_ring_t *ring)
441 DIAGNOSTIC_ring(ring);
443 if (ring->head + ring->used <= ring->capacity) {
444 return ring->used;
446 return ring->capacity - ring->head;
454 auring_get_contig_free(const audio_ring_t *ring)
456 DIAGNOSTIC_ring(ring);
458 if (ring->head + ring->used < ring->capacity) {
459 return ring->capacity - (ring->head + ring->used);
461 return ring->capacity - ring->used;