// ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- Filter::Filter() { fc = 0; res = 0; filt = 0; voice3off = 0; hp_bp_lp = 0; vol = 0; // State of filter. Vhp = 0; Vbp = 0; Vlp = 0; Vnf = 0; enable_filter(true); // Create mappings from FC to cutoff frequency. interpolate(f0_points_6581, f0_points_6581 + sizeof(f0_points_6581)/sizeof(*f0_points_6581) - 1, PointPlotter<sound_sample>(f0_6581), 1.0); interpolate(f0_points_8580, f0_points_8580 + sizeof(f0_points_8580)/sizeof(*f0_points_8580) - 1, PointPlotter<sound_sample>(f0_8580), 1.0); set_chip_model(MOS6581); }
RESID_NAMESPACE_START // ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- ExternalFilter::ExternalFilter() { reset(); enable_filter(true); set_sampling_parameter(15915.6); set_chip_model(MOS6581); }
// ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- ExternalFilter::ExternalFilter() { reset(); enable_filter(true); // Low-pass: R = 10 kOhm, C = 1000 pF; w0l = 1/RC = 1/(1e4*1e-9) = 100 000 // High-pass: R = 1 kOhm, C = 10 uF; w0h = 1/RC = 1/(1e3*1e-5) = 100 // Assume a 1MHz clock. // Cutoff frequency accuracy (4 bits) is traded off for filter signal // accuracy (27 bits). This is crucial since w0lp and w0hp are so far apart. w0lp_1_s7 = int(100000*1.0e-6*(1 << 7) + 0.5); w0hp_1_s17 = int(100*1.0e-6*(1 << 17) + 0.5); }
// ---------------------------------------------------------------------------- // Constructor. // ---------------------------------------------------------------------------- ExternalFilter::ExternalFilter() { reset(); enable_filter(true); set_chip_model(MOS6581); // Low-pass: R = 10kOhm, C = 1000pF; w0l = 1/RC = 1/(1e4*1e-9) = 100000 // High-pass: R = 1kOhm, C = 10uF; w0h = 1/RC = 1/(1e3*1e-5) = 100 // Multiply with 1.048576 to facilitate division by 1 000 000 by right- // shifting 20 times (2 ^ 20 = 1048576). w0lp = 104858; w0hp = 105; }
int8_t tsi_initial_interface() { if(inited==1) return 0; #ifdef TSI_LIVE tsi_err_e err; memset(&init, 0, sizeof(tsi_t)); memset(&en, 0, sizeof(fen_t)); memset(&cfg, 0, sizeof(fcfg_t)); memset((void*)pid_val,-1,sizeof(uint32_t)*PID_NUM); //memset(packet_number_pre_interrupt,0,sizeof(uint32_t)*PID_NUM); fid_bitmap = 0; //memset(node_len,0,sizeof(uint8_t)*12); init.reg = (void *)0x04200000;//register address init.pkt_sz = TS_188; init.mode = MODE; init.filter = FT_MODE; init.circular_buffer_length[TSI_CTRL_BUFFINDEX] = TSI_CTRL_BUFFLEN; init.circular_buffer_length[TSI_MEDIA_DATA_BUFFINDEX] = TSI_MEDIADATA_BUFFLEN; init.circular_buffer_length[TSI_SUBTITLE_BUFFINDEX] = TSI_SUBTITLE_BUFFLEN; init.circular_buffer_length[TSI_EPG_BUFFINDEX] = TSI_EPG_BUFFLEN; init.circular_buffer_length[TSI_TIME_BUFFINDEX] = TSI_TIME_BUFFLEN; // init.pio_buffer_length = (188*16); //only in pio mode : PACKAGE SIZE * NUMBER OF PACKAGE....for number of package, please assign a multiple of 16 for now.. init.pio_buffer_length = 0; err = tsi_init(test); if(err <0) { printf("init: tsi_init(test) err: %i\n", err); return err; } enable_filter(fid_bitmap); inited = 1; tsi_remove_pid_from_filter(-1); #endif return 0; }
VALUE bm_enable_filter(VALUE self) { Bitmapper* map; Data_Get_Struct(self, Bitmapper, map); enable_filter(map); return self; }
int8_t tsi_add_pid_to_filter(int pid,int8_t type,int8_t buff_idx) { int32_t index; tsi_err_e err; if(inited==0) return -1; for(index=0;index<MAX_NUM_PIDS_SUPPORTED;index++) { /* check for the index to be free */ if(-1 == pid_val[index]) { INTERFACE_DEBUG("pid_val[%d]:%d\n",index,pid_val[index]); pid_val[index] = pid; break; } } if(MAX_NUM_PIDS_SUPPORTED == index) { INTERFACE_DEBUG("add pid - MAX pid's reached :%d\n",pid); for(index=0;index<MAX_NUM_PIDS_SUPPORTED;index++) INTERFACE_DEBUG("%d ",pid_val[index]); return -1; } // printf("tsi_add_pid_to_filter:%d\n",pid); /* add bit into fid bitmap */ fid_bitmap |= (1<<index); pid_val[index] = pid; pid_number++; cfg.buffer_index = buff_idx; if(PSI == type) { cfg.pkts_per_intr = TSI_CTRL_PKTSPERINTR; } else if(AUDIO == type) { cfg.pkts_per_intr = TSI_MEDIADATA_AUD_PKTSPERINTR; } else if(VIDEO == type) { cfg.pkts_per_intr = TSI_MEDIADATA_VID_PKTSPERINTR; } else if(SUB_TITLE == type) { cfg.pkts_per_intr = TSI_SUBTITLE_PKTSPERINTR; } else { /* should not enter here */ INTERFACE_DEBUG("invalid type inp params %d %d\n",buff_idx,pid); return -1; } INTERFACE_DEBUG("add pid to filter config %d %d %d %d %d %d %d\n",cfg.fid,cfg.pid,cfg.pkts_per_intr,cfg.buffer_index,fid_bitmap,pid_val[index],index); cfg.fid = index; cfg.pid = pid_val[index]; err = tsi_filter_cfg(test_cfg); if(err) { INTERFACE_DEBUG("add pid into filter config error %d\n",err); return err; } tsi_clear_buffer(buff_idx); enable_filter(fid_bitmap); //INTERFACE_DEBUG("cfg.fid:%d cfg.pid:%d interrupt:%d\n",cfg.fid,cfg.pid, packet_number_pre_interrupt[index]); //tsi_clear_buffer(buff_idx); err=tsi_filter_en(test_en); return err; }
int8_t tsi_remove_pid_from_filter(int pid) { int index; tsi_err_e err; if(inited==0) return -1; if(pid>=0) { if(pid_number<=0) { return -1; } for(index=0;index<MAX_NUM_PIDS_SUPPORTED;index++) { /* check for the index to be free */ if(pid == pid_val[index]) { INTERFACE_DEBUG("remove pid_val[%d]:%d\n",index,pid_val[index]); pid_val[index] = -1; break; } } if(MAX_NUM_PIDS_SUPPORTED == index) { INTERFACE_DEBUG("remove pid - MAX pid's reached :%d\n",pid); for(index=0;index<MAX_NUM_PIDS_SUPPORTED;index++) INTERFACE_DEBUG("%d ",pid_val[index]); return -1; } /* update the fid number */ fid_bitmap &= (~(1<<index)); pid_number--; INTERFACE_DEBUG("remove pid:remove tsi_exit %d \n",fid_bitmap); enable_filter(fid_bitmap); err=tsi_filter_en(test_en); } else { INTERFACE_DEBUG("remove pid:remove all pid\n"); pid_number = 0; memset((void*)pid_val,-1,sizeof(uint32_t)*PID_NUM); //memset(packet_number_pre_interrupt,0,sizeof(int)*PID_NUM); fid_bitmap = 0; INTERFACE_DEBUG("remove pid:remove tsi_exit %d \n",fid_bitmap); enable_filter(fid_bitmap); err=tsi_filter_en(test_en); INTERFACE_DEBUG("remove pid:tsi_clear %d \n",fid_bitmap); tsi_clear_buffer(TSI_CTRL_BUFFINDEX); tsi_clear_buffer(TSI_MEDIA_DATA_BUFFINDEX); tsi_clear_buffer(TSI_EPG_BUFFINDEX); tsi_clear_buffer(TSI_TIME_BUFFINDEX); } return err; }