summaryrefslogtreecommitdiff
path: root/src/eFilePumpThread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/eFilePumpThread.cpp')
-rw-r--r--src/eFilePumpThread.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/eFilePumpThread.cpp b/src/eFilePumpThread.cpp
new file mode 100644
index 0000000..7659a4d
--- /dev/null
+++ b/src/eFilePumpThread.cpp
@@ -0,0 +1,69 @@
+/*
+ * eFilePumpThread.cpp
+ *
+ * Created on: 2013. 9. 12.
+ * Author: kos
+ */
+
+//#include "uLogger.h"
+
+//#include "uDemux.h"
+
+#include <poll.h>
+#include <stdio.h>
+
+#include "ePreDefine.h"
+#include "eFilePumpThread.h"
+//-------------------------------------------------------------------------------
+
+#ifdef DEBUG_LOG
+//#undef LOG
+//#define LOG(X,...) { do{}while(0); }
+#endif
+
+eFilePumpThread::eFilePumpThread(int aDeviceFd, std::string aFileName)
+ : mDeviceFd(aDeviceFd), mFileName(aFileName), mTermFlag(false), uThread("FilePumpThread", TYPE_DETACHABLE)
+{
+}
+//-------------------------------------------------------------------------------
+
+eFilePumpThread::~eFilePumpThread()
+{
+}
+//-------------------------------------------------------------------------------
+
+void eFilePumpThread::Run()
+{
+ int rc = 0;
+ unsigned char buffer[BUFFER_SIZE];
+ FILE* mediafilefd = fopen(mFileName.c_str(), "rb");
+ struct pollfd pollevt;
+
+ pollevt.fd = mDeviceFd;
+ pollevt.events = POLLOUT;
+ pollevt.revents = 0;
+
+ mTermFlag = true;
+ while(mTermFlag) {
+ rc = poll((struct pollfd*)&pollevt, 1, 1000);
+
+ if (pollevt.revents & POLLOUT) {
+ rc = fread(buffer, 1, BUFFER_SIZE, mediafilefd);
+ if(!rc) break;
+#ifdef DEBUG_LOG
+ LOG("%d byte write.", rc);
+#endif
+ rc = write(mDeviceFd, buffer, rc);
+ }
+ }
+ fclose(mediafilefd);
+ mTermFlag = false;
+}
+//-------------------------------------------------------------------------------
+
+void eFilePumpThread::Terminate()
+{
+ mTermFlag = false;
+}
+//-------------------------------------------------------------------------------
+