winlin

for #250, refine parse pes packet, remove the clear method.

@@ -415,10 +415,15 @@ SrsTsChannel::~SrsTsChannel() @@ -415,10 +415,15 @@ SrsTsChannel::~SrsTsChannel()
415 srs_freep(msg); 415 srs_freep(msg);
416 } 416 }
417 417
418 -SrsTsMessage::SrsTsMessage() 418 +SrsTsMessage::SrsTsMessage(SrsTsChannel* c, SrsTsPacket* p)
419 { 419 {
420 - payload = NULL;  
421 - clear(); 420 + channel = c;
  421 + packet = p;
  422 +
  423 + dts = pts = 0;
  424 + continuity_counter = 0;
  425 + PES_packet_length = 0;
  426 + payload = new SrsSimpleBuffer();
422 } 427 }
423 428
424 SrsTsMessage::~SrsTsMessage() 429 SrsTsMessage::~SrsTsMessage()
@@ -469,15 +474,6 @@ bool SrsTsMessage::fresh() @@ -469,15 +474,6 @@ bool SrsTsMessage::fresh()
469 return payload->length() == 0; 474 return payload->length() == 0;
470 } 475 }
471 476
472 -void SrsTsMessage::clear()  
473 -{  
474 - dts = pts = 0;  
475 - continuity_counter = 0;  
476 - PES_packet_length = 0;  
477 - srs_freep(payload);  
478 - payload = new SrsSimpleBuffer();  
479 -}  
480 -  
481 ISrsTsHandler::ISrsTsHandler() 477 ISrsTsHandler::ISrsTsHandler()
482 { 478 {
483 } 479 }
@@ -941,7 +937,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -941,7 +937,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
941 // init msg. 937 // init msg.
942 SrsTsMessage* msg = channel->msg; 938 SrsTsMessage* msg = channel->msg;
943 if (!msg) { 939 if (!msg) {
944 - msg = new SrsTsMessage(); 940 + msg = new SrsTsMessage(channel, packet);
945 channel->msg = msg; 941 channel->msg = msg;
946 } 942 }
947 943
@@ -967,7 +963,8 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -967,7 +963,8 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
967 963
968 // reparse current msg. 964 // reparse current msg.
969 stream->skip(stream->pos() * -1); 965 stream->skip(stream->pos() * -1);
970 - msg->clear(); 966 + srs_freep(msg);
  967 + channel->msg = NULL;
971 return ERROR_SUCCESS; 968 return ERROR_SUCCESS;
972 } 969 }
973 970
@@ -991,7 +988,8 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -991,7 +988,8 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
991 988
992 // reparse current msg. 989 // reparse current msg.
993 stream->skip(stream->pos() * -1); 990 stream->skip(stream->pos() * -1);
994 - msg->clear(); 991 + srs_freep(msg);
  992 + channel->msg = NULL;
995 return ERROR_SUCCESS; 993 return ERROR_SUCCESS;
996 } 994 }
997 } 995 }
@@ -1005,7 +1003,6 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -1005,7 +1003,6 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
1005 1003
1006 // reparse current msg. 1004 // reparse current msg.
1007 stream->skip(stream->pos() * -1); 1005 stream->skip(stream->pos() * -1);
1008 -  
1009 return ret; 1006 return ret;
1010 } 1007 }
1011 1008
@@ -46,6 +46,7 @@ class SrsSimpleBuffer; @@ -46,6 +46,7 @@ class SrsSimpleBuffer;
46 class SrsTsAdaptationField; 46 class SrsTsAdaptationField;
47 class SrsTsPayload; 47 class SrsTsPayload;
48 class SrsTsMessage; 48 class SrsTsMessage;
  49 +class SrsTsPacket;
49 50
50 // Transport Stream packets are 188 bytes in length. 51 // Transport Stream packets are 188 bytes in length.
51 #define SRS_TS_PACKET_SIZE 188 52 #define SRS_TS_PACKET_SIZE 188
@@ -192,6 +193,9 @@ struct SrsTsChannel @@ -192,6 +193,9 @@ struct SrsTsChannel
192 */ 193 */
193 class SrsTsMessage 194 class SrsTsMessage
194 { 195 {
  196 +private:
  197 + SrsTsChannel* channel;
  198 + SrsTsPacket* packet;
195 public: 199 public:
196 int64_t dts; 200 int64_t dts;
197 int64_t pts; 201 int64_t pts;
@@ -199,7 +203,7 @@ public: @@ -199,7 +203,7 @@ public:
199 u_int8_t continuity_counter; 203 u_int8_t continuity_counter;
200 SrsSimpleBuffer* payload; 204 SrsSimpleBuffer* payload;
201 public: 205 public:
202 - SrsTsMessage(); 206 + SrsTsMessage(SrsTsChannel* c, SrsTsPacket* p);
203 virtual ~SrsTsMessage(); 207 virtual ~SrsTsMessage();
204 public: 208 public:
205 /** 209 /**
@@ -219,10 +223,6 @@ public: @@ -219,10 +223,6 @@ public:
219 * whether the message is fresh. 223 * whether the message is fresh.
220 */ 224 */
221 virtual bool fresh(); 225 virtual bool fresh();
222 - /**  
223 - * clear current message.  
224 - */  
225 - virtual void clear();  
226 }; 226 };
227 227
228 /** 228 /**