DVBDemuxHandles.cc
Go to the documentation of this file.
1 //
2 // Copyright (c) 2020 Fraunhofer Institute for Applied Information Technology (FIT)
3 // Network Research Group (NET)
4 // Schloss Birlinghoven, 53754 Sankt Augustin, GERMANY
5 // Contact: support@wiback.org
6 //
7 // This file is part of the SENF code tree.
8 // It is licensed under the 3-clause BSD License (aka New BSD License).
9 // See LICENSE.txt in the top level directory for details or visit
10 // https://opensource.org/licenses/BSD-3-Clause
11 //
12 
13 
17 #include "DVBDemuxHandles.hh"
18 //#include "DVBDemuxHandles.ih"
19 
20 // Custom includes
21 #include <boost/format.hpp>
22 #include <sys/socket.h>
23 #include <sys/ioctl.h>
24 #include <fcntl.h>
25 #include <senf/Utils/Exception.hh>
26 
27 
28 //#include "DVBDemuxHandles.mpp"
29 #define prefix_
30 //-/////////////////////////////////////////////////////////////////////////////////////////////////
31 
32 //-/////////////////////////////////////////////////////////////////////////////////////////////////
33 // senf::DVBDemuxHandles
34 
35 prefix_ void senf::DVBDemuxSectionSocketProtocol::init_client(unsigned short adapter, unsigned short device)
36  const
37 {
38  std::string devDemux = str( boost::format("/dev/dvb/adapter%d/demux%d") % adapter % device);
39  int f = open(devDemux.c_str(), O_RDONLY | O_NONBLOCK);
40  if (f < 0) {
41  SENF_THROW_SYSTEM_EXCEPTION("Could not open demux device of DVB adapter ") << devDemux << ".";
42  }
43  fd(f);
44 }
45 
47  const
48 {
49  return 4096;
50 }
51 
52 prefix_ void senf::DVBDemuxSectionSocketProtocol::setSectionFilter(unsigned short int pid, unsigned char filter, unsigned int flags, unsigned char mask, unsigned char mode, unsigned int timeout)
53  const
54 {
55  struct dmx_sct_filter_params sec_filter;
56  ::memset(&sec_filter, 0, sizeof(struct dmx_sct_filter_params));
57  sec_filter.pid = pid;
58  sec_filter.filter.filter[0] = filter;
59  sec_filter.filter.mask[0] = mask;
60  sec_filter.filter.mode[0] = mode;
61  sec_filter.flags = flags;
62 
63  if (::ioctl(fd(), DMX_SET_FILTER, &sec_filter) < 0)
64  SENF_THROW_SYSTEM_EXCEPTION("Could not set section filter of DVB adapter.");
65 }
66 
67 // ----------------------------------------------------------------
68 
69 prefix_ void senf::DVBDemuxPESSocketProtocol::init_client(unsigned short adapter, unsigned short device)
70  const
71 {
72  std::string devDemux = str( boost::format(
73  "/dev/dvb/adapter%d/demux%d") % adapter % device);
74  int f = open(devDemux.c_str(), O_RDONLY | O_NONBLOCK);
75  if (f < 0)
76  SENF_THROW_SYSTEM_EXCEPTION("Could not open demux device of DVB adapter ") << devDemux << ".";
77  fd(f);
78 }
79 
81  const
82 {
83  return 4096; //???
84 }
85 
86 prefix_ void senf::DVBDemuxPESSocketProtocol::setPESFilter(unsigned short int pid, dmx_input_t input, dmx_output_t output, dmx_pes_type_t pesType, unsigned int flags)
87  const
88 {
89 
90  struct dmx_pes_filter_params pes_filter;
91  ::memset(&pes_filter, 0, sizeof(struct dmx_pes_filter_params));
92  pes_filter.pid = pid;
93  pes_filter.input = input;
94  pes_filter.output = output;
95  pes_filter.pes_type = pesType;
96  pes_filter.flags = flags;
97 
98  if (::ioctl(fd(), DMX_SET_PES_FILTER, &pes_filter) < 0)
99  SENF_THROW_SYSTEM_EXCEPTION("Could not set PES filter of DVB adapter.");
100 }
101 
102 // ----------------------------------------------------------------
103 
104 prefix_ void senf::DVBDvrSocketProtocol::init_client(unsigned short adapter, unsigned short device)
105  const
106 {
107  std::string devDvr = str( boost::format(
108  "/dev/dvb/adapter%d/dvr%d") % adapter % device);
109  int f = open(devDvr.c_str(), O_RDONLY | O_NONBLOCK);
110  if (f < 0)
111  SENF_THROW_SYSTEM_EXCEPTION("Could not open dvr device of DVB adapter ") << devDvr << ".";
112  fd(f);
113 }
114 
116  const
117 {
118  return 188;
119 }
120 
121 //-/////////////////////////////////////////////////////////////////////////////////////////////////
122 #undef prefix_
123 //#include "DVBDemuxHandles.mpp"
124 
125 
126 // Local Variables:
127 // mode: c++
128 // fill-column: 100
129 // c-file-style: "senf"
130 // indent-tabs-mode: nil
131 // ispell-local-dictionary: "american"
132 // compile-command: "scons -u test"
133 // comment-column: 40
134 // End:
#define SENF_THROW_SYSTEM_EXCEPTION(desc)
unsigned available() const
Return (maximum) number of bytes available for reading without < blocking.
#define prefix_
std::string str(T const &t)
int fd() const
Get file descriptor.
void setPESFilter(unsigned short int pid, dmx_input_t input, dmx_output_t output, dmx_pes_type_t pesType, unsigned int flags) const
unsigned available() const
Return (maximum) number of bytes available for reading without < blocking.
void init_client(unsigned short adapter=0, unsigned short device=0) const
xxx
void init_client(unsigned short adapter=0, unsigned short device=0) const
xxx
void init_client(unsigned short adapter=0, unsigned short device=0) const
xxx
DVBDemuxHandles public header.
void setSectionFilter(unsigned short int pid, unsigned char filter=0x3e, unsigned int flags=DMX_IMMEDIATE_START|DMX_CHECK_CRC, unsigned char mask=0xff, unsigned char mode=0x00, unsigned int timeout=0x00) const
unsigned available() const
Return (maximum) number of bytes available for reading without < blocking.