openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
encoder.h
Go to the documentation of this file.
1 #ifndef __DVB_ENCODER_H_
2 #define __DVB_ENCODER_H_
3 
4 #include <vector>
5 
6 #include <lib/nav/core.h>
7 #include <lib/dvb/streamserver.h>
8 
9 class eEncoder
10 {
11  private:
12 
13  DECLARE_REF(eEncoder);
14 
15  enum
16  {
17  IOCTL_BROADCOM_SET_VPID_MIPS = 1,
18  IOCTL_BROADCOM_SET_VPID_ARM = 11,
19  IOCTL_BROADCOM_SET_APID_MIPS = 2,
20  IOCTL_BROADCOM_SET_APID_ARM = 12,
21  IOCTL_BROADCOM_SET_PMTPID_MIPS = 3,
22  IOCTL_BROADCOM_SET_PMTPID_ARM = 13,
23  IOCTL_BROADCOM_START_TRANSCODING = 100,
24  IOCTL_BROADCOM_STOP_TRANSCODING = 200,
25  };
26 
27  class EncoderContext : public eThread
28  {
29  public:
30 
31  EncoderContext(eNavigation *navigation_instance_normal_in, eNavigation *navigation_instance_alternative_in)
32  {
33  file_fd = -1;
34  encoder_fd = -1;
35  state = state_idle;
36  navigation_instance = nullptr;
37  navigation_instance_normal = navigation_instance_normal_in;
38  navigation_instance_alternative = navigation_instance_alternative_in;
39  stream_thread = nullptr;
40  }
41 
42  int encoder_fd;
43  int file_fd;
44  eDVBRecordStreamThread *stream_thread;
45 
46  enum
47  {
48  state_idle,
49  state_wait_pmt,
50  state_running,
51  state_finishing,
52  state_destroyed,
53  } state;
54 
55  eNavigation *navigation_instance;
56  eNavigation *navigation_instance_normal;
57  eNavigation *navigation_instance_alternative;
58 
59  void thread(void);
60  };
61 
62  std::vector<EncoderContext> encoder;
63  bool bcm_encoder;
64  ePtr<eConnection> m_nav_event_connection_0;
65  ePtr<eConnection> m_nav_event_connection_1;
66 
67  static eEncoder *instance;
68 
69  void navigation_event_0(int);
70  void navigation_event_1(int);
71  void navigation_event(int, int);
72 
73  public:
74 
75  eEncoder();
76  ~eEncoder();
77 
78  int allocateEncoder(const std::string &serviceref, int &buffersize, int bitrate, int width, int height, int framerate, int interlaced, int aspectratio,
79  const std::string &vcodec = "", const std::string &acodec = "");
80  void freeEncoder(int encoderfd);
81  int getUsedEncoderCount();
82 
83  static eEncoder *getInstance();
84 };
85 
86 #endif /* __DVB_ENCODER_H_ */
Definition: demux.h:141
Definition: encoder.h:10
int getUsedEncoderCount()
Definition: encoder.cpp:356
eEncoder()
Definition: encoder.cpp:28
int allocateEncoder(const std::string &serviceref, int &buffersize, int bitrate, int width, int height, int framerate, int interlaced, int aspectratio, const std::string &vcodec="", const std::string &acodec="")
Definition: encoder.cpp:106
~eEncoder()
Definition: encoder.cpp:93
static eEncoder * getInstance()
Definition: encoder.cpp:23
void freeEncoder(int encoderfd)
Definition: encoder.cpp:295
Definition: core.h:58
Definition: thread.h:27
const char int int int height
Definition: epng.h:39
const char int int width
Definition: epng.h:39
static int bitrate[3][3][16]
Definition: radiotext.cpp:72