diff --git a/azbox/record_lib.h b/azbox/record_lib.h
deleted file mode 120000
index 1ec9332..0000000
--- a/azbox/record_lib.h
+++ /dev/null
@@ -1 +0,0 @@
-../libspark/record_lib.h
\ No newline at end of file
diff --git a/generic-pc/record_lib.h b/generic-pc/record_lib.h
deleted file mode 120000
index 1ec9332..0000000
--- a/generic-pc/record_lib.h
+++ /dev/null
@@ -1 +0,0 @@
-../libspark/record_lib.h
\ No newline at end of file
diff --git a/include/record_hal.h b/include/record_hal.h
new file mode 100644
index 0000000..cff8450
--- /dev/null
+++ b/include/record_hal.h
@@ -0,0 +1,41 @@
+/*
+ * (C) 2010-2013 Stefan Seyfried
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#ifndef __record_hal__
+#define __record_hal__
+
+#define REC_STATUS_OK 0
+#define REC_STATUS_SLOW 1
+#define REC_STATUS_OVERFLOW 2
+
+class RecData;
+class cRecord
+{
+public:
+ cRecord(int num = 0);
+ ~cRecord();
+
+ bool Open();
+ bool Start(int fd, unsigned short vpid, unsigned short *apids, int numapids, uint64_t ch = 0);
+ bool Stop(void);
+ bool AddPid(unsigned short pid);
+ int GetStatus();
+ void ResetStatus();
+ bool ChangePids(unsigned short vpid, unsigned short *apids, int numapids);
+private:
+ RecData *pd;
+};
+#endif
diff --git a/include/record_td.h b/include/record_td.h
index 0b63c66..045269a 100644
--- a/include/record_td.h
+++ b/include/record_td.h
@@ -1,16 +1 @@
-#include
-#if HAVE_TRIPLEDRAGON
-#include "../libtriple/record_td.h"
-#elif HAVE_SPARK_HARDWARE
-#include "../libspark/record_lib.h"
-#elif HAVE_AZBOX_HARDWARE
-#include "../azbox/record_lib.h"
-#elif HAVE_GENERIC_HARDWARE
-#if BOXMODEL_RASPI
-#include "../raspi/record_lib.h"
-#else
-#include "../generic-pc/record_lib.h"
-#endif
-#else
-#error neither HAVE_TRIPLEDRAGON nor HAVE_SPARK_HARDWARE defined
-#endif
+#include "record_hal.h"
diff --git a/libspark/record.cpp b/libspark/record.cpp
index ffc8df3..3ec7b0e 100644
--- a/libspark/record.cpp
+++ b/libspark/record.cpp
@@ -1,3 +1,19 @@
+/*
+ * (C) 2010-2013 Stefan Seyfried
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
#include
#include
#include
@@ -7,18 +23,50 @@
#include
#include
+#include
#include
-#include "record_lib.h"
+#include "record_hal.h"
#include "dmx_hal.h"
#include "lt_debug.h"
#define lt_debug(args...) _lt_debug(TRIPLE_DEBUG_RECORD, this, args)
#define lt_info(args...) _lt_info(TRIPLE_DEBUG_RECORD, this, args)
+
+typedef enum {
+ RECORD_RUNNING,
+ RECORD_STOPPED,
+ RECORD_FAILED_READ, /* failed to read from DMX */
+ RECORD_FAILED_OVERFLOW, /* cannot write fast enough */
+ RECORD_FAILED_FILE, /* cannot write to file */
+ RECORD_FAILED_MEMORY /* out of memory */
+} record_state_t;
+
+class RecData
+{
+public:
+ RecData(int num) {
+ dmx = NULL;
+ record_thread_running = false;
+ file_fd = -1;
+ exit_flag = RECORD_STOPPED;
+ dmx_num = num;
+ }
+ int file_fd;
+ int dmx_num;
+ cDemux *dmx;
+ pthread_t record_thread;
+ bool record_thread_running;
+ record_state_t exit_flag;
+ int state;
+ void RecordThread();
+};
+
+
/* helper function to call the cpp thread loop */
void *execute_record_thread(void *c)
{
- cRecord *obj = (cRecord *)c;
+ RecData *obj = (RecData *)c;
obj->RecordThread();
return NULL;
}
@@ -26,24 +74,22 @@ void *execute_record_thread(void *c)
cRecord::cRecord(int num)
{
lt_info("%s %d\n", __func__, num);
- dmx = NULL;
- record_thread_running = false;
- file_fd = -1;
- exit_flag = RECORD_STOPPED;
- dmx_num = num;
+ pd = new RecData(num);
}
cRecord::~cRecord()
{
lt_info("%s: calling ::Stop()\n", __func__);
Stop();
+ delete pd;
+ pd = NULL;
lt_info("%s: end\n", __func__);
}
bool cRecord::Open(void)
{
lt_info("%s\n", __func__);
- exit_flag = RECORD_STOPPED;
+ pd->exit_flag = RECORD_STOPPED;
return true;
}
@@ -60,31 +106,31 @@ bool cRecord::Start(int fd, unsigned short vpid, unsigned short *apids, int nump
lt_info("%s: fd %d, vpid 0x%03x\n", __func__, fd, vpid);
int i;
- if (!dmx)
- dmx = new cDemux(dmx_num);
+ if (!pd->dmx)
+ pd->dmx = new cDemux(pd->dmx_num);
- dmx->Open(DMX_TP_CHANNEL, NULL, 512*1024);
- dmx->pesFilter(vpid);
+ pd->dmx->Open(DMX_TP_CHANNEL, NULL, 512*1024);
+ pd->dmx->pesFilter(vpid);
for (i = 0; i < numpids; i++)
- dmx->addPid(apids[i]);
+ pd->dmx->addPid(apids[i]);
- file_fd = fd;
- exit_flag = RECORD_RUNNING;
- if (posix_fadvise(file_fd, 0, 0, POSIX_FADV_DONTNEED))
+ pd->file_fd = fd;
+ pd->exit_flag = RECORD_RUNNING;
+ if (posix_fadvise(pd->file_fd, 0, 0, POSIX_FADV_DONTNEED))
perror("posix_fadvise");
- i = pthread_create(&record_thread, 0, execute_record_thread, this);
+ i = pthread_create(&pd->record_thread, 0, execute_record_thread, pd);
if (i != 0)
{
- exit_flag = RECORD_FAILED_READ;
+ pd->exit_flag = RECORD_FAILED_READ;
errno = i;
lt_info("%s: error creating thread! (%m)\n", __func__);
- delete dmx;
- dmx = NULL;
+ delete pd->dmx;
+ pd->dmx = NULL;
return false;
}
- record_thread_running = true;
+ pd->record_thread_running = true;
return true;
}
@@ -92,32 +138,33 @@ bool cRecord::Stop(void)
{
lt_info("%s\n", __func__);
- if (exit_flag != RECORD_RUNNING)
- lt_info("%s: status not RUNNING? (%d)\n", __func__, exit_flag);
+ if (pd->exit_flag != RECORD_RUNNING)
+ lt_info("%s: status not RUNNING? (%d)\n", __func__, pd->exit_flag);
- exit_flag = RECORD_STOPPED;
- if (record_thread_running)
- pthread_join(record_thread, NULL);
- record_thread_running = false;
+ pd->exit_flag = RECORD_STOPPED;
+ if (pd->record_thread_running)
+ pthread_join(pd->record_thread, NULL);
+ pd->record_thread_running = false;
/* We should probably do that from the destructor... */
- if (!dmx)
+ if (!pd->dmx)
lt_info("%s: dmx == NULL?\n", __func__);
else
- delete dmx;
- dmx = NULL;
+ delete pd->dmx;
+ pd->dmx = NULL;
- if (file_fd != -1)
- close(file_fd);
+ if (pd->file_fd != -1)
+ close(pd->file_fd);
else
lt_info("%s: file_fd not open??\n", __func__);
- file_fd = -1;
+ pd->file_fd = -1;
return true;
}
bool cRecord::ChangePids(unsigned short /*vpid*/, unsigned short *apids, int numapids)
{
std::vector pids;
+ cDemux *dmx = pd->dmx;
int j;
bool found;
unsigned short pid;
@@ -157,6 +204,7 @@ bool cRecord::ChangePids(unsigned short /*vpid*/, unsigned short *apids, int num
bool cRecord::AddPid(unsigned short pid)
{
std::vector pids;
+ cDemux *dmx = pd->dmx;
lt_info("%s: \n", __func__);
if (!dmx) {
lt_info("%s: DMX = NULL\n", __func__);
@@ -170,7 +218,7 @@ bool cRecord::AddPid(unsigned short pid)
return dmx->addPid(pid);
}
-void cRecord::RecordThread()
+void RecData::RecordThread()
{
lt_info("%s: begin\n", __func__);
#define BUFSIZE (1 << 20) /* 1MB */
diff --git a/libspark/record_lib.h b/libspark/record_lib.h
deleted file mode 100644
index cab59a2..0000000
--- a/libspark/record_lib.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef __RECORD_TD_H
-#define __RECORD_TD_H
-
-#include
-
-#define REC_STATUS_OK 0
-#define REC_STATUS_SLOW 1
-#define REC_STATUS_OVERFLOW 2
-
-typedef enum {
- RECORD_RUNNING,
- RECORD_STOPPED,
- RECORD_FAILED_READ, /* failed to read from DMX */
- RECORD_FAILED_OVERFLOW, /* cannot write fast enough */
- RECORD_FAILED_FILE, /* cannot write to file */
- RECORD_FAILED_MEMORY /* out of memory */
-} record_state_t;
-
-class cDemux;
-class cRecord
-{
- private:
- int file_fd;
- int dmx_num;
- cDemux *dmx;
- pthread_t record_thread;
- bool record_thread_running;
- record_state_t exit_flag;
- int state;
- public:
- cRecord(int num = 0);
- ~cRecord();
-
- bool Open();
- bool Start(int fd, unsigned short vpid, unsigned short *apids, int numapids, uint64_t ch = 0);
- bool Stop(void);
- bool AddPid(unsigned short pid);
- int GetStatus();
- void ResetStatus();
- bool ChangePids(unsigned short vpid, unsigned short *apids, int numapids);
-
- void RecordThread();
-};
-#endif
diff --git a/libtriple/record_td.cpp b/libtriple/record_td.cpp
index 67f7228..dd10e6a 100644
--- a/libtriple/record_td.cpp
+++ b/libtriple/record_td.cpp
@@ -1,3 +1,19 @@
+/*
+ * (C) 2010-2013 Stefan Seyfried
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
#include
#include
#include
@@ -6,16 +22,48 @@
#include
#include
#include
-#include "record_td.h"
+
+#include
+
+#include "record_hal.h"
#include "dmx_hal.h"
#include "lt_debug.h"
#define lt_debug(args...) _lt_debug(TRIPLE_DEBUG_RECORD, this, args)
#define lt_info(args...) _lt_info(TRIPLE_DEBUG_RECORD, this, args)
+
+typedef enum {
+ RECORD_RUNNING,
+ RECORD_STOPPED,
+ RECORD_FAILED_READ, /* failed to read from DMX */
+ RECORD_FAILED_OVERFLOW, /* cannot write fast enough */
+ RECORD_FAILED_FILE, /* cannot write to file */
+ RECORD_FAILED_MEMORY /* out of memory */
+} record_state_t;
+
+class RecData
+{
+public:
+ RecData(void) {
+ dmx = NULL;
+ record_thread_running = false;
+ file_fd = -1;
+ exit_flag = RECORD_STOPPED;
+ }
+ int file_fd;
+ cDemux *dmx;
+ pthread_t record_thread;
+ bool record_thread_running;
+ record_state_t exit_flag;
+ int state;
+ void RecordThread();
+};
+
+
/* helper function to call the cpp thread loop */
void *execute_record_thread(void *c)
{
- cRecord *obj = (cRecord *)c;
+ RecData *obj = (RecData *)c;
obj->RecordThread();
return NULL;
}
@@ -23,23 +71,22 @@ void *execute_record_thread(void *c)
cRecord::cRecord(int /*num*/)
{
lt_info("%s\n", __func__);
- dmx = NULL;
- record_thread_running = false;
- file_fd = -1;
- exit_flag = RECORD_STOPPED;
+ pd = new RecData();
}
cRecord::~cRecord()
{
lt_info("%s: calling ::Stop()\n", __func__);
Stop();
+ delete pd;
+ pd = NULL;
lt_info("%s: end\n", __func__);
}
bool cRecord::Open(void)
{
lt_info("%s\n", __func__);
- exit_flag = RECORD_STOPPED;
+ pd->exit_flag = RECORD_STOPPED;
return true;
}
@@ -56,31 +103,31 @@ bool cRecord::Start(int fd, unsigned short vpid, unsigned short *apids, int nump
lt_info("%s: fd %d, vpid 0x%03x\n", __func__, fd, vpid);
int i;
- if (!dmx)
- dmx = new cDemux(1);
+ if (!pd->dmx)
+ pd->dmx = new cDemux(1);
- dmx->Open(DMX_TP_CHANNEL, NULL, 0);
- dmx->pesFilter(vpid);
+ pd->dmx->Open(DMX_TP_CHANNEL, NULL, 0);
+ pd->dmx->pesFilter(vpid);
for (i = 0; i < numpids; i++)
- dmx->addPid(apids[i]);
+ pd->dmx->addPid(apids[i]);
- file_fd = fd;
- exit_flag = RECORD_RUNNING;
- if (posix_fadvise(file_fd, 0, 0, POSIX_FADV_DONTNEED))
+ pd->file_fd = fd;
+ pd->exit_flag = RECORD_RUNNING;
+ if (posix_fadvise(pd->file_fd, 0, 0, POSIX_FADV_DONTNEED))
perror("posix_fadvise");
- i = pthread_create(&record_thread, 0, execute_record_thread, this);
+ i = pthread_create(&pd->record_thread, 0, execute_record_thread, pd);
if (i != 0)
{
- exit_flag = RECORD_FAILED_READ;
+ pd->exit_flag = RECORD_FAILED_READ;
errno = i;
lt_info("%s: error creating thread! (%m)\n", __func__);
- delete dmx;
- dmx = NULL;
+ delete pd->dmx;
+ pd->dmx = NULL;
return false;
}
- record_thread_running = true;
+ pd->record_thread_running = true;
return true;
}
@@ -88,32 +135,33 @@ bool cRecord::Stop(void)
{
lt_info("%s\n", __func__);
- if (exit_flag != RECORD_RUNNING)
- lt_info("%s: status not RUNNING? (%d)\n", __func__, exit_flag);
+ if (pd->exit_flag != RECORD_RUNNING)
+ lt_info("%s: status not RUNNING? (%d)\n", __func__, pd->exit_flag);
- exit_flag = RECORD_STOPPED;
- if (record_thread_running)
- pthread_join(record_thread, NULL);
- record_thread_running = false;
+ pd->exit_flag = RECORD_STOPPED;
+ if (pd->record_thread_running)
+ pthread_join(pd->record_thread, NULL);
+ pd->record_thread_running = false;
/* We should probably do that from the destructor... */
- if (!dmx)
+ if (!pd->dmx)
lt_info("%s: dmx == NULL?\n", __func__);
else
- delete dmx;
- dmx = NULL;
+ delete pd->dmx;
+ pd->dmx = NULL;
- if (file_fd != -1)
- close(file_fd);
+ if (pd->file_fd != -1)
+ close(pd->file_fd);
else
lt_info("%s: file_fd not open??\n", __func__);
- file_fd = -1;
+ pd->file_fd = -1;
return true;
}
bool cRecord::ChangePids(unsigned short /*vpid*/, unsigned short *apids, int numapids)
{
std::vector pids;
+ cDemux *dmx = pd->dmx;
int j;
bool found;
unsigned short pid;
@@ -153,6 +201,7 @@ bool cRecord::ChangePids(unsigned short /*vpid*/, unsigned short *apids, int num
bool cRecord::AddPid(unsigned short pid)
{
std::vector pids;
+ cDemux *dmx = pd->dmx;
lt_info("%s: \n", __func__);
if (!dmx) {
lt_info("%s: DMX = NULL\n", __func__);
@@ -166,7 +215,7 @@ bool cRecord::AddPid(unsigned short pid)
return dmx->addPid(pid);
}
-void cRecord::RecordThread()
+void RecData::RecordThread()
{
lt_info("%s: begin\n", __func__);
#define BUFSIZE (1 << 19) /* 512 kB */
diff --git a/libtriple/record_td.h b/libtriple/record_td.h
deleted file mode 100644
index b7addb6..0000000
--- a/libtriple/record_td.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef __RECORD_TD_H
-#define __RECORD_TD_H
-
-#include
-
-#define REC_STATUS_OK 0
-#define REC_STATUS_SLOW 1
-#define REC_STATUS_OVERFLOW 2
-
-typedef enum {
- RECORD_RUNNING,
- RECORD_STOPPED,
- RECORD_FAILED_READ, /* failed to read from DMX */
- RECORD_FAILED_OVERFLOW, /* cannot write fast enough */
- RECORD_FAILED_FILE, /* cannot write to file */
- RECORD_FAILED_MEMORY /* out of memory */
-} record_state_t;
-
-class cDemux;
-class cRecord
-{
- private:
- int file_fd;
- cDemux *dmx;
- pthread_t record_thread;
- bool record_thread_running;
- record_state_t exit_flag;
- int state;
- public:
- cRecord(int num = 0);
- ~cRecord();
-
- bool Open();
- bool Start(int fd, unsigned short vpid, unsigned short *apids, int numapids, uint64_t ch = 0);
- bool Stop(void);
- bool AddPid(unsigned short pid);
- int GetStatus();
- void ResetStatus();
- bool ChangePids(unsigned short vpid, unsigned short *apids, int numapids);
-
- void RecordThread();
-};
-#endif
diff --git a/raspi/record_lib.h b/raspi/record_lib.h
deleted file mode 120000
index 1ec9332..0000000
--- a/raspi/record_lib.h
+++ /dev/null
@@ -1 +0,0 @@
-../libspark/record_lib.h
\ No newline at end of file