Lines Matching refs:rb
212 ring_buffer *rb;
215 if ((rb = (ring_buffer *)malloc(sizeof(*rb))) == NULL)
218 free(rb);
221 rb->base = buff;
222 rb->size = initial_size;
223 rb->initial_size = initial_size;
225 rb->bpl = bpl;
226 rb->ppl = ppl;
228 rb->tail_red = 0;
229 rb->tail_green = 1;
230 rb->tail_blue = 2;
231 rb->head_complete = 0;
233 rb->red_extra = 0;
234 rb->green_extra = 0;
235 rb->blue_extra = 0;
236 rb->complete_count = 0;
238 return rb;
246 ring_expand (ring_buffer *rb, size_t amount)
251 if (rb == NULL) return SANE_STATUS_INVAL;
252 buff = (uint8_t *)realloc(rb->base, (rb->size + amount) * sizeof(*buff));
255 rb->base = buff;
256 oldsize = rb->size;
257 rb->size += amount;
260 (u_long)oldsize, (u_long)rb->size, (u_long)amount);
262 (u_long)rb->tail_red, (u_long)rb->tail_green,
263 (u_long)rb->tail_blue, (u_long)rb->head_complete);
267 if (((rb->complete_count) ||
268 (rb->red_extra) ||
269 (rb->green_extra) ||
270 (rb->blue_extra)) && ((rb->tail_red <= rb->head_complete) ||
271 (rb->tail_green <= rb->head_complete) ||
272 (rb->tail_blue <= rb->head_complete))) {
273 memmove(rb->base + rb->head_complete + amount,
274 rb->base + rb->head_complete,
275 oldsize - rb->head_complete);
276 if ((rb->tail_red > rb->head_complete) ||
277 ((rb->tail_red == rb->head_complete) &&
278 !(rb->complete_count) && !(rb->red_extra)))
279 rb->tail_red += amount;
280 if ((rb->tail_green > rb->head_complete) ||
281 ((rb->tail_green == rb->head_complete) &&
282 !(rb->complete_count) && !(rb->green_extra)))
283 rb->tail_green += amount;
284 if ((rb->tail_blue > rb->head_complete) ||
285 ((rb->tail_blue == rb->head_complete) &&
286 !(rb->complete_count) && !(rb->blue_extra)))
287 rb->tail_blue += amount;
288 rb->head_complete += amount;
291 (u_long)rb->tail_red, (u_long)rb->tail_green,
292 (u_long)rb->tail_blue, (u_long)rb->head_complete);
301 ring_free (ring_buffer *rb)
303 free(rb->base);
304 free(rb);
2226 if (s->rb != NULL) {
2227 ring_free(s->rb);
2228 s->rb = NULL;
2580 ring_buffer *rb = s->rb;
2581 size_t nbytes = nlines * rb->bpl;
2583 size_t start = (rb->head_complete + rb->complete_count) % rb->size;
2585 (start < rb->head_complete) ?
2586 (rb->head_complete - start) :
2587 (rb->size - start + rb->head_complete);
2592 (u_long)rb->size, (u_long)(nbytes - max_xfer));
2593 status = ring_expand(rb, (nbytes - max_xfer));
2604 db = rb->base;
2612 i < rb->bpl;
2629 if (++pos >= rb->size) pos = 0;
2645 if (++pos >= rb->size) pos = 0;
2652 if ((start + length) < rb->size) {
2653 memcpy(rb->base + start, s->scsi_buffer, length);
2655 size_t chunk1 = rb->size - start;
2657 memcpy(rb->base + start, s->scsi_buffer, chunk1);
2658 memcpy(rb->base, s->scsi_buffer + chunk1, chunk2);
2661 rb->complete_count += length;
2672 ring_buffer *rb = s->rb;
2674 SANE_Byte *db = rb->base;
2685 dr = dg = db = nlines * rb->bpl;
2686 ar = rb->size - (rb->complete_count + rb->red_extra * 3);
2687 ag = rb->size - (rb->complete_count + rb->green_extra * 3);
2688 ab = rb->size - (rb->complete_count + rb->blue_extra * 3);
2701 (u_long)rb->size, (u_long)increase);
2702 status = ring_expand(rb, increase);
2709 case 0: spot = rb->tail_red; break;
2710 case 1: spot = rb->tail_green; break;
2711 case 2: spot = rb->tail_blue; break;
2728 if ((spot += 3) >= rb->size) spot -= rb->size;
2733 for (i=0; i < rb->ppl; i++) {
2736 if ((spot += 3) >= rb->size) spot -= rb->size;
2741 case 0: rb->tail_red = spot; rb->red_extra += rb->ppl; break;
2742 case 1: rb->tail_green = spot; rb->green_extra += rb->ppl; break;
2743 case 2: rb->tail_blue = spot; rb->blue_extra += rb->ppl; break;
2747 completed = MIN(rb->red_extra, MIN(rb->green_extra, rb->blue_extra));
2748 rb->complete_count += completed * 3; /* 3 complete bytes per pixel! */
2749 rb->red_extra -= completed;
2750 rb->green_extra -= completed;
2751 rb->blue_extra -= completed;
2754 (u_long)rb->red_extra,
2755 (u_long)rb->green_extra,
2756 (u_long)rb->blue_extra);
2758 (u_long)completed, (u_long)rb->complete_count);
2770 ring_buffer *rb = s->rb;
2789 case 'R': dr += rb->bpl; break;
2790 case 'G': dg += rb->bpl; break;
2791 case 'B': db += rb->bpl; break;
2794 ar = rb->size - (rb->complete_count + rb->red_extra * 3);
2795 ag = rb->size - (rb->complete_count + rb->green_extra * 3);
2796 ab = rb->size - (rb->complete_count + rb->blue_extra * 3);
2810 (u_long)rb->size, (u_long)increase);
2811 status = ring_expand(rb, increase);
2816 db = rb->base;
2821 case 'R': spot = rb->tail_red; break;
2822 case 'G': spot = rb->tail_green; break;
2823 case 'B': spot = rb->tail_blue; break;
2841 if ((spot += 3) >= rb->size) spot -= rb->size;
2846 for (i=0; i < rb->ppl; i++) {
2849 if ((spot += 3) >= rb->size) spot -= rb->size;
2853 case 'R': rb->tail_red = spot; rb->red_extra += rb->ppl; break;
2854 case 'G': rb->tail_green = spot; rb->green_extra += rb->ppl; break;
2855 case 'B': rb->tail_blue = spot; rb->blue_extra += rb->ppl; break;
2859 completed = MIN(rb->red_extra, MIN(rb->green_extra, rb->blue_extra));
2860 rb->complete_count += completed * 3; /* 3 complete bytes per pixel! */
2861 rb->red_extra -= completed;
2862 rb->green_extra -= completed;
2863 rb->blue_extra -= completed;
2866 (u_long)rb->red_extra,
2867 (u_long)rb->green_extra,
2868 (u_long)rb->blue_extra);
2870 (u_long)completed, (u_long)rb->complete_count);
2885 ring_buffer *rb = s->rb;
2886 size_t nbytes = nlines * rb->bpl;
2888 size_t start = (rb->head_complete + rb->complete_count) % rb->size;
2890 (start < rb->head_complete) ?
2891 (rb->head_complete - start) :
2892 (rb->size - start + rb->head_complete);
2897 (u_long)rb->size, (u_long)(nbytes - max_xfer));
2898 status = ring_expand(rb, (nbytes - max_xfer));
2906 SANE_Byte *db = rb->base;
2912 if (++pos >= rb->size) pos = 0; /* watch out for ringbuff end? */
2914 if (++pos >= rb->size) pos = 0;
2916 if (++pos >= rb->size) pos = 0;
2919 if (++pos >= rb->size) pos = 0;
2921 if (++pos >= rb->size) pos = 0;
2923 if (++pos >= rb->size) pos = 0;
2928 rb->complete_count += length;
3016 pack_into_dest(SANE_Byte *dest_buffer, size_t dest_length, ring_buffer *rb)
3018 size_t ret_length = MIN(rb->complete_count, dest_length);
3022 (u_long)ret_length, (u_long)rb->size, (u_long)rb->head_complete);
3024 if ((rb->head_complete + ret_length) < rb->size) {
3025 memcpy(dest_buffer, rb->base + rb->head_complete, ret_length);
3026 rb->head_complete += ret_length;
3028 size_t chunk1 = rb->size - rb->head_complete;
3030 memcpy(dest_buffer, rb->base + rb->head_complete, chunk1);
3031 memcpy(dest_buffer + chunk1, rb->base, chunk2);
3032 rb->head_complete = chunk2;
3034 rb->complete_count -= ret_length;
4025 s->rb = ring_alloc(s->max_scsi_lines * s->dest_pixel_bpl,
4066 ring_buffer *rb = s->rb;
4079 while (rb->complete_count == 0) {
4090 *ret_length = pack_into_dest(dest_buffer, dest_length, rb);