def setfreq(self, freq): freq = (freq * 16) / 1000 try: val = struct.pack( FREQUENCY_ST, long(0), long(0), freq) r = ioctl.ioctl(self.devfd, long(SETFREQ_NO), val) except: val = struct.pack( "L", freq) r = ioctl.ioctl(self.devfd, long(SETFREQ_NO_V4L), val)
def set_gop_end(self, gop=1): """ End Encoding at GOP Ending Call 0=StopNOW, 1=GOPwait """ r = ioctl(self.devfd, IVTV_IOC_S_GOP_END, struct.pack(IVTV_IOC_S_GOP_END_ST, gop)) if r < 0: log.error('ioctl: IVTV_IOC_S_GOP_END failed')
def stop_encoding(self): """ stop capture """ r = ioctl(self.devfd, VIDIOC_STREAMOFF, struct.pack(VIDIOC_STREAMOFF_ST, 0)) if r < 0: log.error('ioctl: VIDIOC_STREAMOFF failed')
def start_encoding(self): """ start capture """ r = ioctl(self.devfd, VIDIOC_STREAMON, struct.pack(VIDIOC_STREAMON_ST, V4L2_BUF_TYPE_VIDEO_CAPTURE)) if r < 0: log.error('ioctl: VIDIOC_STREAMON failed')
def getfmt(self): val = struct.pack( FMT_ST, 1L,0,0,0,0,0,0,0) try: r = ioctl.ioctl(self.devfd,GET_FMT_NO,val) return struct.unpack( FMT_ST, r ) except IOError: log.warn('Failed to get format, not supported by device?') return (-1, -1, -1, -1, -1, -1, -1, -1)
def getfreq(self): val = struct.pack( FREQUENCY_ST, 0,0,0 ) try: r = ioctl.ioctl(self.devfd, GETFREQ_NO, val) (junk,junk, freq, ) = struct.unpack(FREQUENCY_ST, r) return freq except IOError: log.warn('Failed to get frequency, not supported by device?') return -1
def setCodecInfo(self, codec): val = struct.pack( CODEC_ST, codec.aspect, codec.audio_bitmask, codec.bframes, codec.bitrate_mode, codec.bitrate, codec.bitrate_peak, codec.dnr_mode, codec.dnr_spatial, codec.dnr_temporal, codec.dnr_type, codec.framerate, codec.framespergop, codec.gop_closure, codec.pulldown, codec.stream_type) r = ioctl(self.devfd, IVTV_IOC_S_CODEC, val)
def get_devices(): global _devices if _devices is not None: return _devices _devices = {} for adapter in range(5): frontend = "/dev/dvb/adapter%s/frontend0" % adapter if not os.path.exists(frontend): continue # read frontend0 for aditional information INFO_ST = "128s10i" val = ioctl.pack(INFO_ST, "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) devfd = os.open(frontend, os.O_TRUNC) r = ioctl.ioctl(devfd, ioctl.IOR("o", 61, INFO_ST), val) os.close(devfd) val = ioctl.unpack(INFO_ST, r) name = val[0].strip() if val[1] == 2: _devices["dvb%s" % adapter] = DVB_T(adapter) return _devices
def __init__(self, number): super(DVBCard, self).__init__('dvb', number) # get adapter based on number self.adapter = '/dev/dvb/adapter%s' % number # read frontend0 for aditional information INFO_ST = '128s10i' val = pack( INFO_ST, "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) devfd = os.open(self.adapter + '/frontend0', os.O_TRUNC) r = ioctl(devfd, IOR('o', 61, INFO_ST), val) os.close(devfd) val = unpack( INFO_ST, r ) name = val[0] if val[1] == 0: self.type = 'DVB-S' self._cfg_set_default('priority', 10) elif val[1] == 1: self.type = 'DVB-C' self._cfg_set_default('priority', 9) elif val[1] == 2: self.type = 'DVB-T' self._cfg_set_default('priority', 8) elif val[1] == 3: self.type = 'ATSC' self._cfg_set_default('priority', 7) else: # What is that? raise SystemError('unknown (%s)' % val[1]) # special dvb config plugin = 'mplayer' if kaa.utils.which('dvbstreamer'): plugin = 'dvbstreamer' self._cfg_add( Var(name='plugin', default=plugin, desc='plugin to use for this device')) # fix name if name.find('\0') > 0: name = name[:name.find('\0')] self.name = name log.debug('register dvb device %s' % self.adapter)
def setfmt(self, width, height): val = struct.pack( FMT_ST, 1L, width, height, 0L, 4L, 0L, 131072L, 0L) r = ioctl.ioctl(self.devfd,SET_FMT_NO,val)
def enuminput(self,index): val = struct.pack( ENUMINPUT_ST, index, "", 0,0,0,0,0) r = ioctl.ioctl(self.devfd,ENUMINPUT_NO,val) return struct.unpack( ENUMINPUT_ST, r )
def setstd(self, value): val = struct.pack( STANDARD_ST, value ) r = ioctl.ioctl(self.devfd,SETSTD_NO, val)
def getstd(self): val = struct.pack( STANDARD_ST, 0 ) r = ioctl.ioctl(self.devfd,GETSTD_NO, val) return struct.unpack( STANDARD_ST, r )[0]
def enumstd(self, no): val = struct.pack( ENUMSTD_ST, no, 0, "", 0, 0, 0) r = ioctl.ioctl(self.devfd,ENUMSTD_NO,val) return struct.unpack( ENUMSTD_ST, r )
def querycap(self): val = struct.pack( QUERYCAP_ST, "", "", "", 0, 0 ) r = ioctl.ioctl(self.devfd, QUERYCAP_NO, val) return struct.unpack( QUERYCAP_ST, r )
def setfreq(self, freq): val = struct.pack( FREQUENCY_ST, long(0), long(0), freq) r = ioctl(self.devfd, long(SETFREQ_NO), val)
def getaudio(self,index): val = struct.pack( AUDIO_ST, index, "", 0,0) r = ioctl.ioctl(self.devfd,GET_AUDIO_NO,val) return struct.unpack( AUDIO_ST, r )
def gettuner(self, index): val = struct.pack( TUNER_ST, index, "", 0,0,0,0,0,0,0,0) r = ioctl.ioctl(self.devfd,GET_TUNER_NO,val) return unpack_dict( TUNER_ST, TUNER_VARS, r)
def getvbifmt(self): val = struct.pack( FMT_VBI_ST, 3L,0,0,0,0,0,0,0,0,0,0,0) r = ioctl.ioctl(self.devfd,GET_FMT_NO,val) return unpack_dict(FMT_VBI_ST, FMT_VBI_VARS, r)
def mspSetMatrix(self, input=None, output=None): if not input: input = 3 if not output: output = 1 val = struct.pack(MSP_MATRIX_ST, input, output) r = ioctl(self.devfd, IVTV_IOC_S_MSP_MATRIX, val)
def getCodecInfo(self): val = struct.pack( CODEC_ST, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ) r = ioctl(self.devfd, IVTV_IOC_G_CODEC, val) codec_list = struct.unpack(CODEC_ST, r) return IVTVCodec(codec_list)
def setvbifmt(self, d): val = pack_dict( FMT_VBI_ST, FMT_VBI_VARS, d) r = ioctl.ioctl(self.devfd,GET_FMT_NO,val) return unpack_dict(FMT_VBI_ST, FMT_VBI_VARS, r)
def getinput(self): r = ioctl.ioctl(self.devfd, GETINPUT_NO, struct.pack(INPUT_ST,0)) return struct.unpack(INPUT_ST,r)[0]
def settuner(self,index,audmode): val = struct.pack( TUNER_ST, index, "", 0,0,0,0,0,audmode,0,0) r = ioctl.ioctl(self.devfd,SET_TUNER_NO,val)
def setinput(self,value): r = ioctl.ioctl(self.devfd, SETINPUT_NO, struct.pack(INPUT_ST,value))
def setaudio(self,index,mode): val = struct.pack( AUDIO_ST, index, "", mode, 0) r = ioctl.ioctl(self.devfd,SET_AUDIO_NO,val)
def setfreq_old(self, freq): val = struct.pack( "L", freq) r = ioctl(self.devfd, long(SETFREQ_NO_V4L), val)