X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FDVB%2FDVBDemuxHandles.cc;h=f71251e0d3f0a10c2f2a7e90609bec0696ab4004;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=a8f33a726a4deaf9682a2aa7c7e98f190ed2cccd;hpb=6e4cfeb813b1da364395b2da6e3762e0abd2ac70;p=senf.git diff --git a/Socket/Protocols/DVB/DVBDemuxHandles.cc b/Socket/Protocols/DVB/DVBDemuxHandles.cc index a8f33a7..f71251e 100644 --- a/Socket/Protocols/DVB/DVBDemuxHandles.cc +++ b/Socket/Protocols/DVB/DVBDemuxHandles.cc @@ -33,6 +33,7 @@ #include #include "../../../Utils/Exception.hh" + //#include "DVBDemuxHandles.mpp" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// @@ -43,11 +44,10 @@ prefix_ void senf::DVBDemuxSectionSocketProtocol::init_client(unsigned short adapter, unsigned short device) const { - std::string devDemux = str( boost::format( - "/dev/dvb/adapter%d/demux%d") % adapter % device); + 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( "Could not open demux device of DVB adapter ") << devDemux; + SENF_THROW_SYSTEM_EXCEPTION("Could not open demux device of DVB adapter ") << devDemux << "."; } fd(f); } @@ -58,11 +58,19 @@ 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 char filter, unsigned int flags, unsigned char mask, unsigned char mode, unsigned int timeout) const { - if (::ioctl(fd(), DMX_SET_FILTER, filter) < 0) - throw SystemException("Could not set section filter of DVB adapter"); + 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, &sec_filter) < 0) + SENF_THROW_SYSTEM_EXCEPTION("Could not set section filter of DVB adapter."); } // ---------------------------------------------------------------- @@ -74,7 +82,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( "Could not open demux device of DVB adapter ") << devDemux; + SENF_THROW_SYSTEM_EXCEPTION("Could not open demux device of DVB adapter ") << devDemux << "."; fd(f); } @@ -84,11 +92,20 @@ prefix_ unsigned senf::DVBDemuxPESSocketProtocol::available() return 4096; //??? } -prefix_ void senf::DVBDemuxPESSocketProtocol::setPESFilter(struct dmx_pes_filter_params *filter) +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) const { - if (::ioctl(fd(), DMX_SET_PES_FILTER, filter) < 0) - throw SystemException("Could not set PES filter of DVB adapter"); + + struct dmx_pes_filter_params pes_filter; + ::memset(&pes_filter, 0, sizeof(struct dmx_pes_filter_params)); + pes_filter.pid = pid; + pes_filter.input = input; + pes_filter.output = output; + pes_filter.pes_type = pesType; + pes_filter.flags = flags; + + if (::ioctl(fd(), DMX_SET_PES_FILTER, &pes_filter) < 0) + SENF_THROW_SYSTEM_EXCEPTION("Could not set PES filter of DVB adapter."); } // ---------------------------------------------------------------- @@ -100,7 +117,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( "Could not open dvr device of DVB adapter ") << devDvr; + SENF_THROW_SYSTEM_EXCEPTION("Could not open dvr device of DVB adapter ") << devDvr << "."; fd(f); }