#include #include #include #include #include #include #include #include #include #include #define BUFFY (188*20) int stop=0; void sigcatch(int sig){ stop=-1; } int add_filter(uint32_t pid, dmx_pes_type_t type){ int dmx; struct dmx_pes_filter_params pesFilterParams; if((dmx=open("/dev/dvb/adapter0/demux0", O_RDWR|O_NONBLOCK))<0){ perror("failed to open demux"); return -1; } pesFilterParams.pid=pid; pesFilterParams.input=DMX_IN_FRONTEND; pesFilterParams.output=DMX_OUT_TS_TAP; pesFilterParams.pes_type=type; pesFilterParams.flags=DMX_IMMEDIATE_START; if(ioctl(dmx,DMX_SET_PES_FILTER, &pesFilterParams)<0){ perror("demux set pes filter failed"); return -1; } return 0; } main(int argc, char *argv[]){ int front,dvr,fd; struct dvb_frontend_parameters frp; struct pollfd pfd[1]; uint8_t buf[BUFFY]; int length=0,len,i; if (SIG_ERR==signal(SIGHUP,sigcatch)){ perror("failed to set signal handler\n"); return -1; } if((front=open("/dev/dvb/adapter0/frontend0",O_RDWR))<0){ perror("FRONTEND OPEN FAILED"); return -1; } // TBS 527143000 // NHKE 551.143 // NHKG 557.143 // Fuji 521.143 // Asahi 539.143 // Tokyo 533.143 // NTV 545.143 int chan=atoi(argv[1]); char list[][10]={"TBS", "NHKE", "NHKG", "Fuji", "Asahi","NTV"}; int freq[]={ 527, 551, 557, 521, 539, 545}; int vid[] ={ 0x281, 0x581, 0x581, 0x151, 0x181, 0x151}; int aud[] ={ 0x283, 0x583, 0x583, 0x152, 0x182, 0x152}; int pcr[]={ 0x287, 0x587, 0x587, 0x154, 0x184, 0x156}; fprintf(stderr,"tuning to %s\n",list[chan]); frp.frequency=freq[chan]*1000000+143000; frp.inversion=INVERSION_AUTO; frp.u.ofdm.bandwidth=BANDWIDTH_6_MHZ; frp.u.ofdm.code_rate_HP=FEC_AUTO; frp.u.ofdm.code_rate_LP=FEC_AUTO; frp.u.ofdm.constellation=QPSK; frp.u.ofdm.transmission_mode=TRANSMISSION_MODE_8K; frp.u.ofdm.guard_interval=GUARD_INTERVAL_AUTO; frp.u.ofdm.hierarchy_information=HIERARCHY_AUTO; if(ioctl(front, FE_SET_FRONTEND, &frp) < 0){ perror("set frontend failed"); return -1; } add_filter(0x2000,DMX_PES_OTHER); pfd[0].fd=dvr; pfd[0].events = POLLIN; while(!stop){ sleep(1); } return 0; close(fd); close(dvr); close(front); }