Ticket #743: mpegstreamdata-cleanup-v2.diff

File mpegstreamdata-cleanup-v2.diff, 3.2 KB (added by Stuart Auchterlonie, 15 years ago)

New mpegstreamdata cleanup

  • libs/libmythtv/mpeg/mpegstreamdata.cpp

    old new  
    375375                ProgramAssociationTable *pat =
    376376                    new ProgramAssociationTable(psip);
    377377                CachePAT(pat);
    378                 emit UpdatePAT(pat);
    379                 if ((_desired_program >= 0) && CreatePATSingleProgram(*pat))
    380                     emit UpdatePATSingleProgram(PATSingleProgram());
     378                ProcessPAT(pat);
    381379            }
    382380            else
    383381            {
    384382                ProgramAssociationTable pat(psip);
    385                 emit UpdatePAT(&pat);
    386                 if ((_desired_program >= 0) && CreatePATSingleProgram(pat))
    387                     emit UpdatePATSingleProgram(PATSingleProgram());
     383                ProcessPAT(&pat);
    388384            }
    389385            return true;
    390386        }
     
    395391            {
    396392                ProgramMapTable *pmt = new ProgramMapTable(psip);
    397393                CachePMT(pmt->ProgramNumber(), pmt);
    398                 emit UpdatePMT(pmt->ProgramNumber(), pmt);
    399                 if (pid == _pid_pmt_single_program)
    400                 {
    401                     if (CreatePMTSingleProgram(*pmt))
    402                         emit UpdatePMTSingleProgram(PMTSingleProgram());
    403                 }
     394                ProcessPMT(pid, pmt);
    404395            }
    405396            else
    406397            {
    407398                ProgramMapTable pmt(psip);
    408                 emit UpdatePMT(pmt.ProgramNumber(), &pmt);
    409                 if (pid == _pid_pmt_single_program)
    410                 {
    411                     if (CreatePMTSingleProgram(pmt))
    412                         emit UpdatePMTSingleProgram(PMTSingleProgram());
    413                 }
     399                ProcessPMT(pid, &pmt);
    414400            }
    415401            return true;
    416402        }
     
    418404    return false;
    419405}
    420406
     407void MPEGStreamData::ProcessPAT(const ProgramAssociationTable *pat)
     408{
     409    emit UpdatePAT(pat);
     410    if ((_desired_program >= 0) && CreatePATSingleProgram(*pat))
     411        emit UpdatePATSingleProgram(PATSingleProgram());
     412}
     413
     414void MPEGStreamData::ProcessPMT(const uint pid, const ProgramMapTable *pmt)
     415{
     416    emit UpdatePMT(pmt->ProgramNumber(), pmt);
     417    if (pid == _pid_pmt_single_program)
     418    {
     419        if (CreatePMTSingleProgram(*pmt))
     420            emit UpdatePMTSingleProgram(PMTSingleProgram());
     421    }
     422}
    421423
    422424#define DONE_WITH_PES_PACKET() { if (psip) delete psip; \
    423425    if (morePSIPPackets) goto HAS_ANOTHER_PES; else return; }
  • libs/libmythtv/mpeg/mpegstreamdata.h

    old new  
    136136    void ClearPartialPES(uint pid)
    137137        { _partial_pes_packet_cache.remove(pid); }
    138138    void DeletePartialPES(uint pid);
     139    void ProcessPAT(const ProgramAssociationTable *pat);
     140    void ProcessPMT(const uint pid, const ProgramMapTable *pmt);
    139141
    140142    static int ResyncStream(unsigned char *buffer, int curr_pos, int len);
    141143