Ticket #2147: 2147_fix.diff
File 2147_fix.diff, 2.8 KB (added by , 18 years ago) |
---|
-
libs/libmythtv/mpeg/mpegstreamdata.cpp
old new void MPEGStreamData::DeletePartialPES(ui 199 199 PSIPTable* MPEGStreamData::AssemblePSIP(const TSPacket* tspacket, 200 200 bool &moreTablePackets) 201 201 { 202 bool broken = true; 202 203 moreTablePackets = true; 203 204 204 205 PESPacket* partial = GetPartialPES(tspacket->PID()); 205 if (partial && partial->AddTSPacket(tspacket ))206 if (partial && partial->AddTSPacket(tspacket, broken) && !broken) 206 207 { 207 208 // check if it's safe to read pespacket's Length() 208 209 if ((partial->PSIOffset() + 1 + 3) > partial->TSSizeInBuffer()) … … PSIPTable* MPEGStreamData::AssemblePSIP( 270 271 return psip; 271 272 } 272 273 else if (partial) 273 { 274 { 275 if (broken) 276 DeletePartialPES(tspacket->PID()); 277 274 278 moreTablePackets = false; 275 279 return 0; // partial packet is not yet complete. 276 280 } -
libs/libmythtv/mpeg/pespacket.cpp
old new extern "C" { 18 18 using namespace std; 19 19 20 20 // return true if complete or broken 21 bool PESPacket::AddTSPacket(const TSPacket* packet )21 bool PESPacket::AddTSPacket(const TSPacket* packet, bool &broken) 22 22 { 23 broken = true; 23 24 if (!tsheader()->PayloadStart()) 24 25 { … … bool PESPacket::AddTSPacket(const TSPack 78 78 return true; 79 79 } 80 80 81 // packet is correct or incomplete 82 broken = false; 81 83 // check if it's safe to call Length 82 84 if ((_psiOffset + 1 + 3) <= _pesdataSize) 83 85 { -
libs/libmythtv/mpeg/pespacket.h
old new class PESPacket 138 138 bool IsClone() const { return bool(_allocSize); } 139 139 140 140 // return true if complete or broken 141 bool AddTSPacket(const TSPacket* tspacket );141 bool AddTSPacket(const TSPacket* tspacket, bool &broken); 142 142 143 143 bool IsGood() const { return !_badPacket; } 144 144 … … class PESPacket 252 252 private: 253 253 uint _psiOffset; ///< AFCOffset + StartOfFieldPointer 254 254 uint _ccLast; ///< Continuity counter of last inserted TS Packet 255 uint _pesdataSize; ///< Number of bytes containing PES data255 uint _pesdataSize; ///< Number of data bytes (TS header + PES data) 256 256 uint _allocSize; ///< Total number of bytes we allocated 257 257 bool _badPacket; ///< true if a CRC is not good yet 258 258 };