Changeset 10656


Ignore:
Timestamp:
05/05/15 17:27:40 (8 years ago)
Author:
theparasol
Message:

dvbapi:

  • Improved code and log to detect if demuxer is running (demuxer could already have ecmfilters but not started descrambling yet!)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-dvbapi.c

    r10655 r10656  
    26072607    cs_log_dbg(D_DVBAPI, "Receiver sends PMT command %d for channel %04X", ca_pmt_list_management, program_number);
    26082608   
    2609     for(i = 0; i < MAX_DEMUX && !pmt_stopmarking; i++, pmt_stopmarking = (i == MAX_DEMUX)) // only mark running and deleting for first pmt record
    2610     {
    2611         if(demux[i].program_number == 0) { continue; }  // skip empty demuxers
    2612         if(demux[i].ECMpidcount != 0 && demux[i].pidindex != -1 )
    2613         {
    2614             cs_log_dbg(D_DVBAPI, "Marked demuxer %d/%d (srvid = %04X fd = %d ecmpids = %d pidindex = %d) as already running", i, MAX_DEMUX,
    2615                 demux[i].program_number, connfd, demux[i].ECMpidcount, demux[i].pidindex);
    2616             demux[i].running = 1; }  // mark if channel is already descrambling and running
    2617         if(demux[i].socket_fd != connfd) { continue; }  // skip demuxers belonging to other ca pmt connection
    2618         if(ca_pmt_list_management == LIST_FIRST || ca_pmt_list_management == LIST_ONLY)
    2619         {
     2609    if(!pmt_stopmarking && (ca_pmt_list_management == LIST_FIRST || ca_pmt_list_management == LIST_ONLY))
     2610    {
     2611        for(i = 0; i < MAX_DEMUX; i++)
     2612        {
     2613            if(demux[i].program_number == 0) { continue; }  // skip empty demuxers
     2614            if(demux[i].socket_fd != connfd) { continue; }  // skip demuxers belonging to other ca pmt connection
    26202615            demux[i].stopdescramble = 1; // Mark for deletion if not used again by following pmt objects.
    26212616            cs_log_dbg(D_DVBAPI, "Marked demuxer %d/%d (srvid = %04X fd = %d) to stop decoding", i, MAX_DEMUX, demux[i].program_number, connfd);
    26222617        }
    2623     }
     2618        pmt_stopmarking = 1; // only stop demuxing for first pmt record
     2619    }
     2620   
    26242621    getDemuxOptions(i, buffer, &ca_mask, &demux_index, &adapter_index, &pmtpid);
    26252622    cs_log_dbg(D_DVBAPI,"Receiver wants to demux srvid %04X on adapter %04X camask %04X index %04X pmtpid %04X",
     
    29022899            if(demux[j].running == 0 && demux[j].ECMpidcount != 0 )   // only start demuxer if it wasnt running
    29032900            {
     2901                cs_log_dbg(D_DVBAPI, "Demuxer %d/%d lets start descrambling (srvid = %04X fd = %d ecmpids = %d)", j, MAX_DEMUX,
     2902                    demux[j].program_number, connfd, demux[j].ECMpidcount);
     2903                demux[j].running = 1;  // mark channel as running
    29042904                openxcas_set_sid(demux[j].program_number);
    29052905                demux[j].decodingtries = -1;
     
    29102910            else if(demux[j].ECMpidcount == 0) //fta do logging and part of ecmhandler since there will be no ecms asked!
    29112911            {
     2912                cs_log_dbg(D_DVBAPI, "Demuxer %d/%d no descrambling needed (srvid = %04X fd = %d ecmpids = %d)", j, MAX_DEMUX,
     2913                    demux[j].program_number, connfd, demux[j].ECMpidcount);
    29122914                demux[j].running = 0; // reset running flag
    29132915                demux[demux_id].pidindex = -1; // reset ecmpid used for descrambling
Note: See TracChangeset for help on using the changeset viewer.