From b38bae2a892c8004310eb331cfee52cb9a2727a4 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 29 Jan 2015 23:08:26 +0800 Subject: [PATCH] for #250, refine parse pes packet, remove the clear method. --- trunk/src/kernel/srs_kernel_ts.cpp | 29 +++++++++++++---------------- trunk/src/kernel/srs_kernel_ts.hpp | 10 +++++----- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/trunk/src/kernel/srs_kernel_ts.cpp b/trunk/src/kernel/srs_kernel_ts.cpp index 701d01e3b..781645dc7 100644 --- a/trunk/src/kernel/srs_kernel_ts.cpp +++ b/trunk/src/kernel/srs_kernel_ts.cpp @@ -415,10 +415,15 @@ SrsTsChannel::~SrsTsChannel() srs_freep(msg); } -SrsTsMessage::SrsTsMessage() +SrsTsMessage::SrsTsMessage(SrsTsChannel* c, SrsTsPacket* p) { - payload = NULL; - clear(); + channel = c; + packet = p; + + dts = pts = 0; + continuity_counter = 0; + PES_packet_length = 0; + payload = new SrsSimpleBuffer(); } SrsTsMessage::~SrsTsMessage() @@ -469,15 +474,6 @@ bool SrsTsMessage::fresh() return payload->length() == 0; } -void SrsTsMessage::clear() -{ - dts = pts = 0; - continuity_counter = 0; - PES_packet_length = 0; - srs_freep(payload); - payload = new SrsSimpleBuffer(); -} - ISrsTsHandler::ISrsTsHandler() { } @@ -941,7 +937,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) // init msg. SrsTsMessage* msg = channel->msg; if (!msg) { - msg = new SrsTsMessage(); + msg = new SrsTsMessage(channel, packet); channel->msg = msg; } @@ -967,7 +963,8 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) // reparse current msg. stream->skip(stream->pos() * -1); - msg->clear(); + srs_freep(msg); + channel->msg = NULL; return ERROR_SUCCESS; } @@ -991,7 +988,8 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) // reparse current msg. stream->skip(stream->pos() * -1); - msg->clear(); + srs_freep(msg); + channel->msg = NULL; return ERROR_SUCCESS; } } @@ -1005,7 +1003,6 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) // reparse current msg. stream->skip(stream->pos() * -1); - return ret; } diff --git a/trunk/src/kernel/srs_kernel_ts.hpp b/trunk/src/kernel/srs_kernel_ts.hpp index 2bc1e4dd5..d7c8c0abc 100644 --- a/trunk/src/kernel/srs_kernel_ts.hpp +++ b/trunk/src/kernel/srs_kernel_ts.hpp @@ -46,6 +46,7 @@ class SrsSimpleBuffer; class SrsTsAdaptationField; class SrsTsPayload; class SrsTsMessage; +class SrsTsPacket; // Transport Stream packets are 188 bytes in length. #define SRS_TS_PACKET_SIZE 188 @@ -192,6 +193,9 @@ struct SrsTsChannel */ class SrsTsMessage { +private: + SrsTsChannel* channel; + SrsTsPacket* packet; public: int64_t dts; int64_t pts; @@ -199,7 +203,7 @@ public: u_int8_t continuity_counter; SrsSimpleBuffer* payload; public: - SrsTsMessage(); + SrsTsMessage(SrsTsChannel* c, SrsTsPacket* p); virtual ~SrsTsMessage(); public: /** @@ -219,10 +223,6 @@ public: * whether the message is fresh. */ virtual bool fresh(); - /** - * clear current message. - */ - virtual void clear(); }; /**