Changeset 2099
- Timestamp:
- 04/15/10 21:51:09 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-dvbapi.c
r2095 r2099 5 5 #include <sys/un.h> 6 6 7 extern int ridx;8 7 extern struct s_reader * reader; 9 8 … … 32 31 int pid; 33 32 ushort type; 33 int count; 34 34 } FILTERTYPE; 35 35 … … 303 303 } 304 304 305 int dvbapi_stop_filternum(int demux_index, int num) { 306 307 if (demux[demux_index].demux_fd[num].fd>0) { 308 ioctl(demux[demux_index].demux_fd[num].fd,DMX_STOP); 309 close(demux[demux_index].demux_fd[num].fd); 310 demux[demux_index].demux_fd[num].fd=0; 311 } 312 313 return 1; 314 } 315 305 316 void dvbapi_start_filter(int demux_index, int pidindex, unsigned short pid, uchar table, uchar mask, int type) { 306 317 int dmx_fd,i,n=-1; … … 327 338 demux[demux_index].demux_fd[n].pid = pid; 328 339 demux[demux_index].demux_fd[n].type = type; 340 demux[demux_index].demux_fd[n].count = 0; 329 341 330 342 memset(filter,0,32); … … 337 349 338 350 void dvbapi_start_emm_filter(int demux_index) { 339 int dmx_fd, i, n=-1;351 int dmx_fd, i, j, n; 340 352 uchar nullserial[8]; 341 342 353 char *typtext[]={"UNKNOWN", "UNIQUE", "SHARED", "GLOBAL"}; 343 354 344 355 if (demux[demux_index].pidindex==-1) return; 345 356 346 ushort caid = demux[demux_index].ECMpids[demux[demux_index].pidindex].CAID; 347 ushort pid = demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID; 348 349 if (pid==0 || !demux[demux_index].rdr) 357 if (demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID==0 || !demux[demux_index].rdr) 350 358 return; 351 359 … … 366 374 367 375 if (demux[demux_index].rdr->card_system==0) 368 demux[demux_index].rdr->card_system=get_cardsystem( caid);376 demux[demux_index].rdr->card_system=get_cardsystem(demux[demux_index].ECMpids[demux[demux_index].pidindex].CAID); 369 377 370 378 uchar dmx_filter[256]; … … 374 382 375 383 int filter_count=dmx_filter[1]; 376 int j;377 384 378 385 for (j=1;j<=filter_count && j < 8;j++) { … … 385 392 memcpy(filter, dmx_filter+startpos+2, 32); 386 393 int emmtype=dmx_filter[startpos]; 394 int count=dmx_filter[startpos+1]; 387 395 n=-1; 388 396 … … 403 411 demux[demux_index].demux_fd[n].fd = dmx_fd; 404 412 demux[demux_index].demux_fd[n].pidindex = demux[demux_index].pidindex; 405 demux[demux_index].demux_fd[n].pid = pid;413 demux[demux_index].demux_fd[n].pid = demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID; 406 414 demux[demux_index].demux_fd[n].type = TYPE_EMM; 415 demux[demux_index].demux_fd[n].count = count; 407 416 408 417 cs_log("dvbapi: starting emm filter %s",typtext[emmtype]); 409 418 cs_dump(filter, 32, "demux filter:"); 410 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0);419 dvbapi_set_filter(dmx_fd, selected_api, demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID, filter, filter+16, 0); 411 420 } 412 421 … … 507 516 508 517 if (demux[demux_index].pidindex==-1) return; 518 509 519 cs_ddump(buffer, 16, "emm:"); 510 520 511 521 //force emm output 512 reader[ridx].logemm=9999;522 demux[demux_index].rdr->logemm=9999; 513 523 514 524 memset(&epg, 0, sizeof(epg)); … … 542 552 for (i=0;i<CS_MAXREADER;i++) { 543 553 for (j=0;j<CS_MAXREADER;j++) { 544 if (reader[i].caid[j] != 0 && reader[i].card_s ystem >0) {554 if (reader[i].caid[j] != 0 && reader[i].card_status == 0) { 545 555 if (k+1>=MAX_CAID) break; 546 556 global_caid_list[k++]=reader[i].caid[j]; … … 1101 1111 continue; 1102 1112 1103 dvbapi_stop_filter (demux_index, TYPE_EMM);1113 dvbapi_stop_filternum(demux_index, n); 1104 1114 continue; 1105 1115 } … … 1107 1117 dvbapi_process_emm(demux_index, mbuf, len); 1108 1118 } 1119 if (demux[demux_index].demux_fd[n].count==1) { 1120 //stop filter 1121 dvbapi_stop_filternum(demux_index, n); 1122 } 1123 if (demux[demux_index].demux_fd[n].count>1) 1124 demux[demux_index].demux_fd[n].count--; 1109 1125 } 1110 1126 }
Note:
See TracChangeset
for help on using the changeset viewer.