openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
filepush.h
Go to the documentation of this file.
1 #ifndef __lib_base_filepush_h
2 #define __lib_base_filepush_h
3 
4 #include <lib/base/thread.h>
5 #include <lib/base/ioprio.h>
6 #include <libsig_comp.h>
7 #include <lib/base/message.h>
8 #include <sys/types.h>
9 #include <lib/base/rawfile.h>
10 
12 {
13 public:
14  virtual void getNextSourceSpan(off_t current_offset, size_t bytes_read, off_t &start, size_t &size, int blocksize)=0;
16 #if defined(__sh__)
17  //Changes in this file are cause e2 doesnt tell the player to play reverse
18  virtual int getSkipMode() = 0;
19 #endif
20 };
21 
22 class eFilePushThread: public eThread, public sigc::trackable, public iObject
23 {
24  DECLARE_REF(eFilePushThread);
25 public:
26  eFilePushThread(int prio_class=IOPRIO_CLASS_BE, int prio_level=0, int blocksize=188, size_t buffersize=188*1024);
28  void thread();
29  void stop();
30  void start(ePtr<iTsSource> &source, int destfd);
31 
32  void pause();
33  void resume();
34 
35  void enablePVRCommit(int);
36  /* stream mode will wait on EOF until more data is available. */
37  void setStreamMode(int);
39 
41  sigc::signal1<void,int> m_event;
42 
43  /* you can send private events if you want */
44  void sendEvent(int evt);
45 protected:
46  virtual void filterRecordData(const unsigned char *data, int len);
47 private:
48  int prio_class;
49  int prio;
51  int m_stop;
52  int m_fd_dest;
53  int m_send_pvr_commit;
54  int m_stream_mode;
55  int m_blocksize;
56  size_t m_buffersize;
57  unsigned char* m_buffer;
58  off_t m_current_position;
59 
60  ePtr<iTsSource> m_source;
61 
62  eFixedMessagePump<int> m_messagepump;
63  eSingleLock m_run_mutex;
64  eCondition m_run_cond;
65  int m_run_state;
66 
67  void recvEvent(const int &evt);
68 };
69 
70 class eFilePushThreadRecorder: public eThread, public sigc::trackable
71 {
72 public:
73 #if HAVE_AMLOGIC
74  eFilePushThreadRecorder(unsigned char* buffer, size_t buffersize=10*188*1024);
75 #else
76  eFilePushThreadRecorder(unsigned char* buffer, size_t buffersize=188*1024);
77 #endif
78  void thread();
79  void stop();
80  void start(int sourcefd);
81 
83  sigc::signal1<void,int> m_event;
84 
85  int getProtocol() { return m_protocol;}
86  void setProtocol(int i){ m_protocol = i;}
87  void setSession(int se, int st) { m_session_id = se; m_stream_id = st;}
88  int read_dmx(int fd, void *m_buffer, int size);
89  int pushReply(void *buf, int len);
90  void sendEvent(int evt);
91  static int64_t getTick();
92  static int read_ts(int fd, unsigned char *buf, int size);
93 protected:
94  // This method should write the data out and return the number of bytes written.
95  // If result <0, set 'errno'. The simplest implementation is just "::write(m_buffer, ...)"
96  // The method may freely modify m_buffer and m_buffersize
97  virtual int writeData(int len) = 0;
98  // Called when terminating the recording thread. Allows to clean up memory and
99  // flush buffers, terminate outstanding IO requests.
100  virtual void flush() = 0;
101 
103  size_t m_buffersize;
104  unsigned char* m_buffer;
105  unsigned int m_overflow_count;
106 private:
107  int m_stop;
108  eFixedMessagePump<int> m_messagepump;
109  void recvEvent(const int &evt);
110  int m_protocol, m_session_id, m_stream_id, m_packet_no;
111  std::vector<unsigned char> m_reply;
112 };
113 
114 #endif
Definition: elock.h:107
Definition: filepush.h:23
void setScatterGather(iFilePushScatterGather *)
Definition: filepush.cpp:361
@ evtReadError
Definition: filepush.h:40
@ evtEOF
Definition: filepush.h:40
@ evtUser
Definition: filepush.h:40
@ evtWriteError
Definition: filepush.h:40
@ evtStopped
Definition: filepush.h:40
void thread()
Definition: filepush.cpp:56
void start(ePtr< iTsSource > &source, int destfd)
Definition: filepush.cpp:295
virtual void filterRecordData(const unsigned char *data, int len)
Definition: filepush.cpp:380
void sendEvent(int evt)
Definition: filepush.cpp:366
sigc::signal1< void, int > m_event
Definition: filepush.h:41
void enablePVRCommit(int)
Definition: filepush.cpp:351
eFilePushThread(int prio_class=IOPRIO_CLASS_BE, int prio_level=0, int blocksize=188, size_t buffersize=188 *1024)
Definition: filepush.cpp:19
~eFilePushThread()
Definition: filepush.cpp:37
void setStreamMode(int)
Definition: filepush.cpp:356
void resume()
Definition: filepush.cpp:337
void stop()
Definition: filepush.cpp:305
void pause()
Definition: filepush.cpp:317
Definition: filepush.h:71
unsigned char * m_buffer
Definition: filepush.h:104
static int64_t getTick()
Definition: filepush.cpp:419
virtual int writeData(int len)=0
int pushReply(void *buf, int len)
Definition: filepush.cpp:410
void setSession(int se, int st)
Definition: filepush.h:87
void setProtocol(int i)
Definition: filepush.h:86
void thread()
Definition: filepush.cpp:538
size_t m_buffersize
Definition: filepush.h:103
sigc::signal1< void, int > m_event
Definition: filepush.h:83
int m_fd_source
Definition: filepush.h:102
static int read_ts(int fd, unsigned char *buf, int size)
Definition: filepush.cpp:427
int read_dmx(int fd, void *m_buffer, int size)
Definition: filepush.cpp:457
eFilePushThreadRecorder(unsigned char *buffer, size_t buffersize=188 *1024)
Definition: filepush.cpp:384
void start(int sourcefd)
Definition: filepush.cpp:616
int getProtocol()
Definition: filepush.h:85
unsigned int m_overflow_count
Definition: filepush.h:105
@ evtUser
Definition: filepush.h:82
@ evtReadError
Definition: filepush.h:82
@ evtWriteError
Definition: filepush.h:82
@ evtStopped
Definition: filepush.h:82
@ evtEOF
Definition: filepush.h:82
void sendEvent(int evt)
Definition: filepush.cpp:634
void stop()
Definition: filepush.cpp:623
virtual void flush()=0
Definition: elock.h:81
Definition: thread.h:27
Definition: filepush.h:12
virtual void getNextSourceSpan(off_t current_offset, size_t bytes_read, off_t &start, size_t &size, int blocksize)=0
virtual ~iFilePushScatterGather()
Definition: filepush.h:15
Definition: object.h:15
unsigned char data[256]
Definition: hdmi_cec.h:2
@ IOPRIO_CLASS_BE
Definition: ioprio.h:10
size
Definition: Plugins/SystemPlugins/PositionerSetup/log.py:16
source
Definition: enigma_py_patcher.py:9