Changeset 1995


Ignore:
Timestamp:
04/07/10 13:05:26 (12 years ago)
Author:
merek
Message:

From Alno: Enable EMM demux filter, see http://streamboard.gmc.to/wbb2/thread.php?postid=330231#post330231

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-dvbapi.c

    r1983 r1995  
    339339
    340340void dvbapi_start_emm_filter(int demux_index, int emmtype, int type) {
    341     int dmx_fd,i,n=-1;
     341    int dmx_fd, i, n=-1;
    342342    uchar filter[32];
     343    uchar *reader_filter;
     344    char *typtext[]={"UNKNOWN", "UNIQUE", "SHARED", "GLOBAL"};
    343345
    344346    if (demux[demux_index].pidindex==-1) return;
     
    349351    int found=0;
    350352    for (i=0;i<CS_MAXREADER;i++) {
    351         if (reader[i].caid[0] == demux[demux_index].ECMpids[demux[demux_index].pidindex].CA_System_ID) {
     353        if (reader[i].aucaid == caid) {
    352354            client[cs_idx].au=i;
    353355            found=1;
     
    356358    }
    357359
    358     switch(reader[client[cs_idx].au].card_system) {
    359         default:
    360             if (emmtype!=GLOBAL) return;
    361             memset(filter,0,32);
    362             filter[0]=0x80;
    363             filter[0+16]=0xF0;
    364             break;
    365     }
    366 
    367     for (i=0;i<MAX_FILTER;i++) {
    368         if (demux[demux_index].demux_fd[i].fd<=0) {
    369             n=i;
    370             break;
    371         }
    372     }
    373 
    374     if (n==-1) {
    375         cs_log("dvbapi: no free filter");
    376         return;
    377     }
    378 
    379     dmx_fd=dvbapi_open_device(demux_index, 0);
    380 
    381     demux[demux_index].demux_fd[n].fd=dmx_fd;
    382     demux[demux_index].demux_fd[n].CA_System_ID=caid;
    383     demux[demux_index].demux_fd[n].PID=pid;
    384     demux[demux_index].demux_fd[n].type=type;
    385 
    386     cs_ddump(filter, 32, "demux filter:");
    387     dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0);
     360    if (!found) {
     361        cs_log("emm dmx filter - no AU reader found");
     362    } else {
     363        reader_filter = get_emm_filter(&reader[client[cs_idx].au], emmtype);
     364        memcpy(filter, reader_filter, 32);
     365        cs_log("emm dmx filter %s \t set to: %s",typtext[emmtype], cs_hexdump(0, filter, 32));
     366   
     367   
     368        for (i=0;i<MAX_FILTER;i++) {
     369            if (demux[demux_index].demux_fd[i].fd<=0) {
     370                n=i;
     371                break;
     372            }
     373        }
     374   
     375        if (n==-1) {
     376            cs_log("dvbapi: no free filter");
     377            return;
     378        }
     379   
     380        dmx_fd=dvbapi_open_device(demux_index, 0);
     381   
     382        demux[demux_index].demux_fd[n].fd=dmx_fd;
     383        demux[demux_index].demux_fd[n].CA_System_ID=caid;
     384        demux[demux_index].demux_fd[n].PID=pid;
     385        demux[demux_index].demux_fd[n].type=type;
     386   
     387        cs_ddump(filter, 32, "demux filter:");
     388        dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0);
     389    }
    388390}
    389391
Note: See TracChangeset for help on using the changeset viewer.