diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.cpp b/mythtv/libs/libmythtv/mpeg/mpegtables.cpp index 94216f137da..90d08211253 100644 --- a/mythtv/libs/libmythtv/mpeg/mpegtables.cpp +++ b/mythtv/libs/libmythtv/mpeg/mpegtables.cpp @@ -717,24 +717,27 @@ uint ProgramMapTable::FindPIDs(uint type, uint ProgramMapTable::FindUnusedPID(uint desired_pid) { uint pid = desired_pid; - while (FindPID(pid) >= 0) + if (pid >= MPEG_NULL_PID) + pid = 0x20; + + while (FindPID(pid) != -1) pid += 0x10; - if (desired_pid <= 0x1fff) + if (pid < MPEG_NULL_PID) return pid; pid = desired_pid; - while (FindPID(desired_pid) >= 0) - desired_pid += 1; + while (FindPID(pid) != -1) + pid += 1; - if (desired_pid <= 0x1fff) + if (pid < MPEG_NULL_PID) return pid; pid = 0x20; - while (FindPID(desired_pid) >= 0) - desired_pid += 1; + while (FindPID(pid) != -1) + pid += 1; - return desired_pid & 0x1fff; + return pid & 0x1fff; } QString PSIPTable::toString(void) const diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.h b/mythtv/libs/libmythtv/mpeg/mpegtables.h index 82dde9115b8..4ff94017b9a 100644 --- a/mythtv/libs/libmythtv/mpeg/mpegtables.h +++ b/mythtv/libs/libmythtv/mpeg/mpegtables.h @@ -225,6 +225,10 @@ enum FREESAT_SI_PID = 0x0f01, FREESAT_EIT_PID = 0x0f02, FREESAT_ST_EIT_PID = 0x0f03, + + /// The all-ones PID value 0x1FFF indicates a Null TS Packet + /// introduced to maintain a constant bit rate of a TS Multiplex. + MPEG_NULL_PID = 0x1fff, }; /** \class TableID