Changeset 10655


Ignore:
Timestamp:
05/05/15 15:56:56 (9 years ago)
Author:
theparasol
Message:

dvbapi:

  • Reworked capmt handling
  • Some log cosmetics
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-dvbapi.c

    r10654 r10655  
    26062606    cs_log_dump_dbg(D_DVBAPI, buffer, length, "capmt:");
    26072607    cs_log_dbg(D_DVBAPI, "Receiver sends PMT command %d for channel %04X", ca_pmt_list_management, program_number);
    2608     if((ca_pmt_list_management == LIST_FIRST || ca_pmt_list_management == LIST_ONLY))
    2609     {
    2610         for(i = 0; i < MAX_DEMUX; i++)
    2611         {
    2612             if(cfg.dvbapi_pmtmode == 6 && pmt_stopmarking == 1) { continue; } // already marked channels that need to stop -> skip!
    2613             if(demux[i].program_number == 0) { continue; }  // skip empty demuxers
    2614             if(demux[i].ECMpidcount != 0 && demux[i].pidindex != -1 ) { demux[i].running = 1; }  // mark if channel is already descrambling and running
    2615             if(demux[i].socket_fd != connfd) { continue; }  // skip demuxers belonging to other ca pmt connection
    2616             if(cfg.dvbapi_pmtmode == 6)
    2617             {
    2618                 demux[i].stopdescramble = 1; // Mark for deletion if not used again by following pmt objects.
    2619                 cs_log_dbg(D_DVBAPI, "Marked demuxer %d/%d (srvid = %04X fd = %d) to stop decoding", i, MAX_DEMUX, demux[i].program_number, connfd);
    2620             }
    2621         }
    2622         pmt_stopmarking = 1;
     2608   
     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        {
     2620            demux[i].stopdescramble = 1; // Mark for deletion if not used again by following pmt objects.
     2621            cs_log_dbg(D_DVBAPI, "Marked demuxer %d/%d (srvid = %04X fd = %d) to stop decoding", i, MAX_DEMUX, demux[i].program_number, connfd);
     2622        }
    26232623    }
    26242624    getDemuxOptions(i, buffer, &ca_mask, &demux_index, &adapter_index, &pmtpid);
     
    26622662    }
    26632663
    2664     // stop descramble old demuxers from this ca pmt connection that arent used anymore
    2665     if((ca_pmt_list_management == LIST_LAST) || (ca_pmt_list_management == LIST_ONLY))
     2664    // start using the new list
     2665    if(ca_pmt_list_management != LIST_FIRST && ca_pmt_list_management != LIST_MORE)
    26662666    {
    26672667        for(j = 0; j < MAX_DEMUX; j++)
     
    28812881    }
    28822882
    2883     if(demux[demux_id].running == 0) // only do emm setup on non-running channels!
     2883    if(cfg.dvbapi_au > 0 && demux[demux_id].EMMpidcount == 0) // only do emm setup if au enabled and not running!
    28842884    {
    28852885        demux[demux_id].emm_filter = -1; // to register first run emmfilter start
    2886         if(cfg.dvbapi_au > 0 && demux[demux_id].emmstart.time == 1)   // irdeto fetch emm cat direct!
     2886        if(demux[demux_id].emmstart.time == 1)   // irdeto fetch emm cat direct!
    28872887        {
    28882888            cs_ftime(&demux[demux_id].emmstart); // trick to let emm fetching start after 30 seconds to speed up zapping
     
    29372937
    29382938        if(k > 0)
    2939             cs_log_dump_dbg(D_DVBAPI, buffer + k, len - k, "Parsing next PMT object(s):");
     2939            cs_log_dump_dbg(D_DVBAPI, buffer + k, len - k, "Parsing next PMT object:");
    29402940
    29412941        if(buffer[3 + k] & 0x80)
     
    40934093                                    if ((opcode & 0xFFFFF000) == DVBAPI_AOT_CA)
    40944094                                    {
    4095                                         cs_log_dump_dbg(D_DVBAPI, mbuf, chunksize, "Parsing %d PMT object(s):", chunks_processed);
     4095                                        cs_log_dump_dbg(D_DVBAPI, mbuf, chunksize, "Parsing PMT object %d:", chunks_processed);
    40964096                                        dvbapi_handlesockmsg(mbuf, chunksize, connfd);
    40974097                                        add_to_poll = 0;
Note: See TracChangeset for help on using the changeset viewer.