Lines Matching refs:pb
50 pa_raop_packet_buffer *pb = pa_xnew0(pa_raop_packet_buffer, 1);
55 pb->count = 0;
56 pb->size = size;
57 pb->mempool = mempool;
58 pb->packets = pa_xnew0(pa_memchunk, size);
59 pb->seq = pb->pos = 0;
61 return pb;
64 void pa_raop_packet_buffer_free(pa_raop_packet_buffer *pb) {
67 pa_assert(pb);
69 for (i = 0; pb->packets && i < pb->size; i++) {
70 if (pb->packets[i].memblock)
71 pa_memblock_unref(pb->packets[i].memblock);
72 pa_memchunk_reset(&pb->packets[i]);
75 pa_xfree(pb->packets);
76 pb->packets = NULL;
77 pa_xfree(pb);
80 void pa_raop_packet_buffer_reset(pa_raop_packet_buffer *pb, uint16_t seq) {
83 pa_assert(pb);
84 pa_assert(pb->packets);
86 pb->pos = 0;
87 pb->count = 0;
88 pb->seq = (!seq) ? UINT16_MAX : seq - 1;
89 for (i = 0; i < pb->size; i++) {
90 if (pb->packets[i].memblock)
91 pa_memblock_unref(pb->packets[i].memblock);
92 pa_memchunk_reset(&pb->packets[i]);
96 pa_memchunk *pa_raop_packet_buffer_prepare(pa_raop_packet_buffer *pb, uint16_t seq, const size_t size) {
100 pa_assert(pb);
101 pa_assert(pb->packets);
105 pa_assert(pb->seq == UINT16_MAX);
106 pb->seq = 0;
109 pa_assert(seq == pb->seq + 1);
110 pb->seq++;
113 i = (pb->pos + 1) % pb->size;
115 if (pb->packets[i].memblock)
116 pa_memblock_unref(pb->packets[i].memblock);
117 pa_memchunk_reset(&pb->packets[i]);
119 pb->packets[i].memblock = pa_memblock_new(pb->mempool, size);
120 pb->packets[i].length = size;
121 pb->packets[i].index = 0;
123 packet = &pb->packets[i];
125 if (pb->count < pb->size)
126 pb->count++;
127 pb->pos = i;
132 pa_memchunk *pa_raop_packet_buffer_retrieve(pa_raop_packet_buffer *pb, uint16_t seq) {
136 pa_assert(pb);
137 pa_assert(pb->packets);
139 if (seq == pb->seq)
140 packet = &pb->packets[pb->pos];
142 if (seq < pb->seq) {
143 /* Regular case: pb->seq did not wrapped since seq. */
144 delta = pb->seq - seq;
146 /* Tricky case: pb->seq wrapped since seq! */
147 delta = pb->seq + (UINT16_MAX - seq);
151 if (delta > pb->count)
154 i = (pb->size + pb->pos - delta) % pb->size;
156 if (delta < pb->size && pb->packets[i].memblock)
157 packet = &pb->packets[i];