X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FDVB%2FDVBDemuxHandles.cc;h=3a66a06246f2306c037323f2f08b2e0d57ca5ac9;hb=34199e3d9e56891d51d497fc2367d14258fa0c37;hp=3016a52dcc4169ee165beb8e30994f1128a7a113;hpb=25fe79f266e7583750d8e761abec4022d87972b8;p=senf.git diff --git a/Socket/Protocols/DVB/DVBDemuxHandles.cc b/Socket/Protocols/DVB/DVBDemuxHandles.cc index 3016a52..3a66a06 100644 --- a/Socket/Protocols/DVB/DVBDemuxHandles.cc +++ b/Socket/Protocols/DVB/DVBDemuxHandles.cc @@ -46,8 +46,9 @@ prefix_ void senf::DVBDemuxSectionSocketProtocol::init_client(unsigned short ada std::string devDemux = str( boost::format( "/dev/dvb/adapter%d/demux%d") % adapter % device); int f = open(devDemux.c_str(), O_RDONLY | O_NONBLOCK); - if (f < 0) - throw SystemException(); + if (f < 0){ + SENF_THROW_SYSTEM_EXCEPTION("Could not open demux device of DVB adapter ") << devDemux << "."; + } fd(f); } @@ -57,11 +58,20 @@ prefix_ unsigned senf::DVBDemuxSectionSocketProtocol::available() return 4096; } -prefix_ void senf::DVBDemuxSectionSocketProtocol::setSectionFilter(struct dmx_sct_filter_params *filter) +prefix_ void senf::DVBDemuxSectionSocketProtocol::setSectionFilter(unsigned short int pid, unsigned int timeout, unsigned int flags, unsigned char filter, unsigned char mask, unsigned char mode) const { - if (::ioctl(fd(), DMX_SET_FILTER, filter) < 0) - throw SystemException(); + struct dmx_sct_filter_params sec_filter; + ::memset(&sec_filter, 0, sizeof(struct dmx_sct_filter_params)); + + sec_filter.pid = pid; + sec_filter.filter.filter[0] = filter; + sec_filter.filter.mask[0] = mask; + sec_filter.filter.mode[0] = mode; + sec_filter.flags = flags; + + if (::ioctl(fd(), DMX_SET_FILTER, filter) < 0) + SENF_THROW_SYSTEM_EXCEPTION("Could not set section filter of DVB adapter."); } // ---------------------------------------------------------------- @@ -73,7 +83,7 @@ prefix_ void senf::DVBDemuxPESSocketProtocol::init_client(unsigned short adapter "/dev/dvb/adapter%d/demux%d") % adapter % device); int f = open(devDemux.c_str(), O_RDONLY | O_NONBLOCK); if (f < 0) - throw SystemException(); + SENF_THROW_SYSTEM_EXCEPTION("Could not open demux device of DVB adapter ") << devDemux << "."; fd(f); } @@ -87,7 +97,7 @@ prefix_ void senf::DVBDemuxPESSocketProtocol::setPESFilter(struct dmx_pes_filter const { if (::ioctl(fd(), DMX_SET_PES_FILTER, filter) < 0) - throw SystemException(); + SENF_THROW_SYSTEM_EXCEPTION("Could not set PES filter of DVB adapter."); } // ---------------------------------------------------------------- @@ -99,7 +109,7 @@ prefix_ void senf::DVBDvrSocketProtocol::init_client(unsigned short adapter, uns "/dev/dvb/adapter%d/dvr%d") % adapter % device); int f = open(devDvr.c_str(), O_RDONLY | O_NONBLOCK); if (f < 0) - throw SystemException(); + SENF_THROW_SYSTEM_EXCEPTION("Could not open dvr device of DVB adapter ") << devDvr << "."; fd(f); }