+#define _FILE_OFFSET_BITS 64
+
#include <linux/dvb/frontend.h>
#include <linux/dvb/dmx.h>
#include <linux/dvb/audio.h>
void * record_read(void * priv);
void * record_write(void * priv);
+// TODO: switchable between VRB(virtual ring buffer) and MRB(My Ring Buffer)
+
void mrb_init(mrb* rb, size_t size) {
rb->rb_ptr = malloc(size);
rb->rb_wt = rb->rb_rt = rb->rb_ab = 0;
return false;
}
if ( rb->rb_rt + size <= rb->rb_wt ) {
- // read bytes + newly taken bytes <= written max size
+ // read bytes + newly taken bytes <= buffer max size
memcpy(target, rb->rb_ptr + rb->rb_rt, size);
rb->rb_rt = rb->rb_rt + size;
}
else {
- // Ring Buffer wrapped.
+ // read bytes + newly taken bytes > buffer max size
+ // wrap around.
partial = RING_BUFFER_SIZE - rb->rb_rt;
memcpy(target, rb->rb_ptr + rb->rb_rt, partial);
memcpy(target + partial, rb->rb_ptr, size - partial);
void * record_read(void * priv) {
ssize_t rt;
time_t start_time, current_time;
- char buf[DVB_READ_BUFFER_SIZE];
+ char* buf = malloc(DVB_READ_BUFFER_SIZE);
my_thread_arg* p = (my_thread_arg*)priv;
start_time = time(NULL);
void * record_write(void * priv) {
ssize_t rt = 0, wt, shift;
- char buf[DVB_WRITE_BUFFER_SIZE];
+ char* buf = malloc(DVB_WRITE_BUFFER_SIZE);
my_thread_arg* p = (my_thread_arg*)priv;
while ( 1 ) {
}
if ( rt > 0 ) {
// [buf] is not correctly written to [fout]
- printf("output file write failed\n");
+ printf("output file write failed. err=%d\n", errno);
goto error;
}
}
int rectime;
if (argc != 6) {
- fprintf(stderr, "Usage: %s adapter_nr freq tsid rectime output\n", argv[0]);
+ fprintf(stderr, "Usage : %s adapter_nr freq tsid rectime output\n", argv[0]);
+ fprintf(stderr, "Version: 0.0.1\n");
return 1;
}
adapter_nr = strtol(argv[1], NULL, 0);