OSDN Git Service

tunerec: make buf malloc-ed instead of fixed array
[rec10/rec10-git.git] / tunerec / tunerec.c
index 3224b35..822200a 100755 (executable)
@@ -1,3 +1,5 @@
+#define _FILE_OFFSET_BITS 64
+
 #include <linux/dvb/frontend.h>
 #include <linux/dvb/dmx.h>
 #include <linux/dvb/audio.h>
@@ -42,6 +44,8 @@ typedef struct {
 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;
@@ -92,12 +96,13 @@ bool mrb_get(mrb* rb, char *target, size_t size) {
                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);
@@ -230,7 +235,7 @@ void record(int adapter_nr, char* output, int rectime) {
 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);
@@ -267,7 +272,7 @@ void * record_read(void * priv) {
 
 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 ) {
@@ -297,7 +302,7 @@ void * record_write(void * priv) {
                }
                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;
                }
        }
@@ -315,7 +320,8 @@ int main(int argc, char *argv[]) {
        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);