44 }
catch (
const std::bad_alloc& e) {
45 LOG(VB_GENERAL, LOG_ERR,
"Not enough memory for ringbuffer");
49 LOG(VB_GENERAL, LOG_ERR,
"Wrong size for ringbuffer");
59 if (size > (
int)(rbuf->
size)) {
62 }
catch (
const std::bad_alloc& e) {
67 unsigned int delta = size - rbuf->
size;
92 if (count <=0 )
return 0;
94 int rest = rbuf->
size - pos;
99 LOG(VB_GENERAL, LOG_ERR,
100 QString(
"ringbuffer overflow %1<%2 %3")
101 .arg(free).arg(count).arg(rbuf->
size));
107 memcpy (rbuf->
buffer.data()+pos, data, rest);
109 memcpy (rbuf->
buffer.data(), data+rest, count - rest);
112 memcpy (rbuf->
buffer.data()+pos, data, count);
117 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%")
127 unsigned int rest = rbuf->
size - pos ;
130 if ( avail < count ){
133 LOG(VB_GENERAL, LOG_ERR,
134 QString(
"ringbuffer peek underflow %1<%2 %3 %4")
135 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
141 memcpy(data, rbuf->
buffer.data()+pos, count);
143 memcpy(data, rbuf->
buffer.data()+pos, rest);
145 memcpy(data+rest, rbuf->
buffer.data(), count - rest);
153 return ring_peek(rbuf, data.data(), count, off);
166 unsigned int rest = rbuf->
size - pos ;
169 if ( avail < count ){
172 LOG(VB_GENERAL, LOG_ERR,
173 QString(
"ringbuffer peek underflow %1<%2 %3 %4")
174 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
180 memcpy(rbuf->
buffer.data()+pos, data, count);
182 memcpy(rbuf->
buffer.data()+pos, data, rest);
184 memcpy(rbuf->
buffer.data(), data+rest, count - rest);
192 return ring_poke(rbuf, data.data(), count, off);
202 if (count <=0 )
return 0;
204 int rest = rbuf->
size - pos;
207 if ( avail < count ){
210 LOG(VB_GENERAL, LOG_ERR,
211 QString(
"ringbuffer underflow %1<%2 %3 \n")
212 .arg(avail).arg(count).arg(rbuf->
size));
218 memcpy(data, rbuf->
buffer.data()+pos, count);
221 memcpy(data, rbuf->
buffer.data()+pos, rest);
223 memcpy(data+rest, rbuf->
buffer.data(), count - rest);
228 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%")
235 if (count <=0 )
return -1;
237 int rest = rbuf->
size - pos;
240 if ( avail < count ){
242 LOG(VB_GENERAL, LOG_ERR,
243 QString(
"ringbuffer skip underflow %1<%2 %3 %4\n")
244 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
255 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%")
266 if (count <=0 )
return 0;
268 int rest = rbuf->
size - pos;
273 LOG(VB_GENERAL, LOG_ERR,
274 QString(
"ringbuffer overflow %1<%2 %3 %4\n")
275 .arg(free).arg(count).arg(pos).arg(rbuf->
read_pos));
281 rr =
read (fd, rbuf->
buffer.data()+pos, rest);
282 if (rr == rest && count - rest)
283 rr +=
read (fd, rbuf->
buffer.data(), count - rest);
287 rr =
read (fd, rbuf->
buffer.data()+pos, count);
293 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%")
304 if (count <=0 )
return -1;
306 int rest = rbuf->
size - pos;
309 if ( avail < count ){
312 LOG(VB_GENERAL, LOG_ERR,
313 QString(
"ringbuffer underflow %1<%2 %3 %4")
314 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
321 if (rr == rest && count - rest)
322 rr +=
write (fd, rbuf->
buffer.data(), count - rest);
333 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%")
339static void show(uint8_t *buf,
int length)
343 for (
int i=0; i<length; i+=16){
345 for (j=0; j < 8 && j+i<length; j++)
346 buffer += QString(
"0x%1 ").arg(buf[i+j],16,2,QChar(
'0'));
347 for (
int r=j; r<8; r++)
352 for (j=8; j < 16 && j+i<length; j++)
353 buffer += QString(
"0x%1 ").arg(buf[i+j],16,2,QChar(
'0'));
354 for (
int r=j; r<16; r++)
357 for (j=0; j < 16 && j+i<length; j++){
361 buffer += QString(QChar(buf[i+j]));
367 LOG(VB_GENERAL, LOG_INFO, buffer);
376 unsigned int rest = rbuf->
size - pos ;
379 if ( avail < count ){
382 LOG(VB_GENERAL, LOG_ERR,
383 QString(
"ringbuffer peek underflow %1<%2 %3 %4\n")
384 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
428 LOG(VB_GENERAL, LOG_INFO, QString(
"add %1 ").arg(
dummy_space(dbuf)));
436 LOG(VB_GENERAL, LOG_INFO,
437 QString(
" - %1 = %2").arg(size).arg(
dummy_space(dbuf)));
452 sizeof(uint64_t), 0)<0){
456 if (
ptscmp(rtime,time) < 0){
467 LOG(VB_GENERAL, LOG_INFO, QString(
"delete %1 ").arg(
dummy_space(dbuf)));
471 LOG(VB_GENERAL, LOG_INFO,
472 QString(
" + %1 = %2").arg(dsize).arg(
dummy_space(dbuf)));
484 for (
int i = 0; i < avail; i++) {
486 sizeof(uint64_t), i *
sizeof(uint64_t));
488 sizeof(uint32_t), i *
sizeof(uint32_t));
490 LOG(VB_GENERAL, LOG_INFO, QString(
"%1 : %2 %3").arg(i)
491 .arg(rtime).arg(size));
493 LOG(VB_GENERAL, LOG_INFO, QString(
"Used: %d Free: %d data-free: %d")
494 .arg(avail).arg(1000-avail).arg(dbuf->
size - dbuf->
fill));
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
def read(device=None, features=[])
def write(text, progress=True)
int ptscmp(uint64_t pts1, uint64_t pts2)
int dummy_add(dummy_buffer *dbuf, uint64_t time, uint32_t size)
static void show(uint8_t *buf, int length)
void dummy_destroy(dummy_buffer *dbuf)
int ring_read(ringbuffer *rbuf, uint8_t *data, int count)
int ring_reinit(ringbuffer *rbuf, int size)
int ring_write(ringbuffer *rbuf, uint8_t *data, int count)
int ring_read_file(ringbuffer *rbuf, int fd, int count)
int dummy_init(dummy_buffer *dbuf, int s)
void ring_clear(ringbuffer *rbuf)
void ring_show(ringbuffer *rbuf, unsigned int count, uint32_t off)
int dummy_delete(dummy_buffer *dbuf, uint64_t time)
int ring_peek(ringbuffer *rbuf, uint8_t *data, unsigned int count, uint32_t off)
int ring_write_file(ringbuffer *rbuf, int fd, int count)
int ring_skip(ringbuffer *rbuf, int count)
void dummy_clear(dummy_buffer *dbuf)
int ring_poke(ringbuffer *rbuf, uint8_t *data, unsigned int count, uint32_t off)
int ring_init(ringbuffer *rbuf, int size)
void ring_destroy(ringbuffer *)
static unsigned int ring_avail(ringbuffer *rbuf)
static unsigned int ring_free(ringbuffer *rbuf)
std::vector< uint8_t > peek_poke_vec
static uint32_t dummy_space(dummy_buffer *dbuf)
std::vector< uint8_t > buffer