diff options
Diffstat (limited to 'src/eFilePumpThread.cpp')
-rw-r--r-- | src/eFilePumpThread.cpp | 69 |
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; +} +//------------------------------------------------------------------------------- + |