Changeset 10654


Ignore:
Timestamp:
05/05/15 13:30:35 (8 years ago)
Author:
theparasol
Message:

dvbapi:

  • fixed reset of current ecmpids and streams right before capmt table parsing
  • fix for "not requesting cw -> ecm filter was killed!" (on capmt update of already descrambling demuxer the er->provid could be zero again for 1 ecm request)
  • some log cosmetics fixes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-dvbapi.c

    r10653 r10654  
    4545                                "",                                                                                         // 07
    4646                                "",                                                                                         // 08
    47                                 "Conditional Access",                                                                       // 09
     47                                "Conditional Access ",                                                                      // 09
    4848                                "",                                                                                         // 0A
    4949                                "",                                                                                         // 0B
     
    6363                                "",                                                                                         // 19
    6464                                "",                                                                                         // 1A
    65                                 "MPEG-4 videostream",                                                                       // 1B
    66                                 "MPEG-4 audiostream",
     65                                "MPEG-4 videostream ",                                                                      // 1B
     66                                "MPEG-4 audiostream ",
    6767                            };
    6868
     
    12481248    demux[demux_id].ECMpids[demux[demux_id].ECMpidcount].table = 0;
    12491249
    1250     cs_log("Demuxer %d added new ecmpid %d CAID: %04X ECM_PID: %04X PROVID: %06X", demux_id, demux[demux_id].ECMpidcount, caid, ecmpid, provid);
     1250    cs_log("Demuxer %d ecmpid %d CAID: %04X ECM_PID: %04X PROVID: %06X", demux_id, demux[demux_id].ECMpidcount, caid, ecmpid, provid);
    12511251    if(caid_is_irdeto(caid)) { demux[demux_id].emmstart.time = 1; }  // marker to fetch emms early irdeto needs them!
    12521252
     
    26102610        for(i = 0; i < MAX_DEMUX; i++)
    26112611        {
    2612             if(cfg.dvbapi_pmtmode == 6 && pmt_stopmarking == 1) { continue; } // already marked -> skip!
     2612            if(cfg.dvbapi_pmtmode == 6 && pmt_stopmarking == 1) { continue; } // already marked channels that need to stop -> skip!
    26132613            if(demux[i].program_number == 0) { continue; }  // skip empty demuxers
    2614             if(demux[i].ECMpidcount != 0 && demux[i].pidindex != -1 ) { demux[i].running = 1; }  // running channel changes from scrambled to fta
     2614            if(demux[i].ECMpidcount != 0 && demux[i].pidindex != -1 ) { demux[i].running = 1; }  // mark if channel is already descrambling and running
    26152615            if(demux[i].socket_fd != connfd) { continue; }  // skip demuxers belonging to other ca pmt connection
    26162616            if(cfg.dvbapi_pmtmode == 6)
     
    26712671        }
    26722672        start_descrambling = 1; // flag that demuxer descrambling is to be executed!
     2673        pmt_stopmarking = 0; // flag that demuxers may be marked for stop decoding again
    26732674    }
    26742675
     
    26952696        cs_strncpy(demux[demux_id].pmt_file, pmtfile, sizeof(demux[demux_id].pmt_file));
    26962697    }
    2697 
     2698   
     2699    for(j = 0; j < demux[demux_id].ECMpidcount; j++) // cleanout demuxer from possible stale info
     2700    { 
     2701        demux[demux_id].ECMpids[j].streams = 0; // reset streams of each ecmpid!
     2702    }
     2703    demux[demux_id].STREAMpidcount = 0; // reset number of streams
    26982704    demux[demux_id].ECMpidcount = 0; // reset number of ecmpids
    26992705   
     
    27052711    uint32_t es_info_length = 0, vpid = 0;
    27062712    struct s_dvbapi_priority *addentry;
    2707 
    2708     for(j = 0; j < demux[demux_id].ECMpidcount; j++)
    2709     { 
    2710         demux[demux_id].ECMpids[j].streams = 0; // reset streams of each ecmpid!
    2711     }
    2712     demux[demux_id].STREAMpidcount = 0; // reset number of streams
    27132713
    27142714    const char *stream_in_text = NULL;
     
    27272727            stream_in_text = "";
    27282728        }
    2729         cs_log_dbg(D_DVBAPI, "Demuxer %d added new stream %s(type: %02x pid: %04x length: %d)", demux_id, stream_in_text, stream_type, elementary_pid, es_info_length);
     2729        cs_log_dbg(D_DVBAPI, "Demuxer %d stream %s(type: %02x pid: %04x length: %d)", demux_id, stream_in_text, stream_type, elementary_pid, es_info_length);
    27302730
    27312731        if(demux[demux_id].STREAMpidcount >= ECM_PIDS)
     
    27512751                        || (addentry->srvid != demux[demux_id].program_number))
    27522752                    { continue; }
    2753                 cs_log_dbg(D_DVBAPI, "Demuxer %d added fake ecmpid %04X:%06x:%04x for unencrypted stream on srvid %04X", demux_id, addentry->mapcaid, addentry->mapprovid,
     2753                cs_log_dbg(D_DVBAPI, "Demuxer %d fake ecmpid %04X:%06x:%04x for unencrypted stream on srvid %04X", demux_id, addentry->mapcaid, addentry->mapprovid,
    27542754                    addentry->mapecmpid, demux[demux_id].program_number);
    27552755                dvbapi_add_ecmpid(demux_id, addentry->mapcaid, addentry->mapecmpid, addentry->mapprovid);
     
    27652765
    27662766    getDemuxOptions(demux_id, buffer, &ca_mask, &demux_index, &adapter_index, &pmtpid);
    2767     cs_log("Demuxer %d receiver wants to demux srvid %04X on adapter %04X camask %04X index %04X pmtpid %04X", demux_id,
    2768            demux[demux_id].program_number, adapter_index, ca_mask, demux_index, pmtpid);
     2767    char channame[32];
     2768    get_servicename(dvbapi_client, demux[demux_id].program_number, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[0].CAID : NO_CAID_VALUE, channame);
     2769    cs_log("Demuxer %d serving srvid %04X (%s) on adapter %04X camask %04X index %04X pmtpid %04X", demux_id,
     2770           demux[demux_id].program_number, channame, adapter_index, ca_mask, demux_index, pmtpid);
     2771
    27692772    demux[demux_id].adapter_index = adapter_index;
    27702773    demux[demux_id].ca_mask = ca_mask;
     
    27792782                    unassoc_fd[j] = 0;
    27802783
    2781     char channame[32];
    2782     get_servicename(dvbapi_client, demux[demux_id].program_number, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[0].CAID : NO_CAID_VALUE, channame);
    2783     cs_log("Demuxer %d new program number: %04X (%s) [pmt_list_management %d]", demux_id, program_number, channame, ca_pmt_list_management);
    2784 
    27852784    dvbapi_capmt_notify(&demux[demux_id]);
    2786 
    2787     cs_log_dbg(D_DVBAPI, "Demuxer %d demux_index: %2d ca_mask: %02x program_info_length: %3d ca_pmt_list_management %02x",
    2788                   demux_id, demux[demux_id].demux_index, demux[demux_id].ca_mask, program_info_length, ca_pmt_list_management);
    27892785
    27902786    struct s_dvbapi_priority *xtraentry;
     
    39633959                {
    39643960                    pmthandling = 1;     // pmthandling in progress!
    3965                     if(cfg.dvbapi_pmtmode == 6)
    3966                     {
    3967                         pmt_stopmarking = 0; // to stop_descrambling marking in PMT 6 mode
    3968                     }
    3969                    
    39703961                    connfd = -1;         // initially no socket to read from
    39713962                    int add_to_poll = 0; // we may need to additionally poll this socket when no PMT data comes in
     
    49294920            if(type == TYPE_ECM && er->srvid != demux[demux_index].program_number) continue;
    49304921            if((demux[demux_index].demux_fd[n].pid == er->pid) &&
    4931                     ((demux[demux_index].demux_fd[n].provid == er->prid) || demux[demux_index].demux_fd[n].provid == 0) &&
     4922                    ((demux[demux_index].demux_fd[n].provid == er->prid) || demux[demux_index].demux_fd[n].provid == 0 || er->prid == 0) &&
    49324923                    ((demux[demux_index].demux_fd[n].caid == er->caid) || (demux[demux_index].demux_fd[n].caid == er->ocaid))) // current ecm pid?
    49334924            {
Note: See TracChangeset for help on using the changeset viewer.