Skip to content

Commit

Permalink
Refine Refine Refine kernel/ts code (#891)
Browse files Browse the repository at this point in the history
  • Loading branch information
HungMingWu authored and winlinvip committed May 21, 2017
1 parent dd1cca4 commit 234904c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
24 changes: 12 additions & 12 deletions trunk/src/kernel/srs_kernel_ts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2440,13 +2440,10 @@ SrsTsPayloadPMTESInfo::SrsTsPayloadPMTESInfo(SrsTsStream st, int16_t epid)

const1_value0 = 7;
const1_value1 = 0x0f;
ES_info_length = 0;
ES_info = NULL;
}

SrsTsPayloadPMTESInfo::~SrsTsPayloadPMTESInfo()
{
srs_freepa(ES_info);
}

int SrsTsPayloadPMTESInfo::decode(SrsBuffer* stream)
Expand All @@ -2468,25 +2465,28 @@ int SrsTsPayloadPMTESInfo::decode(SrsBuffer* stream)

int16_t eilv = stream->read_2bytes();
const1_value1 = (epv >> 12) & 0x0f;
ES_info_length = eilv & 0x0FFF;
/**
* This is a 12-bit field, the first two bits of which shall be '00'. The remaining 10 bits specify the number
* of bytes of the descriptors of the associated program element immediately following the ES_info_length field.
*/
int16_t ES_info_length = eilv & 0x0FFF;

if (ES_info_length > 0) {
if (!stream->require(ES_info_length)) {
ret = ERROR_STREAM_CASTER_TS_PMT;
srs_error("ts: demux PMT es info data failed. ret=%d", ret);
return ret;
}
srs_freepa(ES_info);
ES_info = new char[ES_info_length];
stream->read_bytes(ES_info, ES_info_length);
ES_info.resize(ES_info_length);
stream->read_bytes(&ES_info[0], ES_info_length);
}

return ret;
}

int SrsTsPayloadPMTESInfo::size()
{
return 5 + ES_info_length;
return 5 + ES_info.size();
}

int SrsTsPayloadPMTESInfo::encode(SrsBuffer* stream)
Expand All @@ -2506,17 +2506,17 @@ int SrsTsPayloadPMTESInfo::encode(SrsBuffer* stream)
epv |= (const1_value0 << 13) & 0xE000;
stream->write_2bytes(epv);

int16_t eilv = ES_info_length & 0x0FFF;
int16_t eilv = ES_info.size() & 0x0FFF;
eilv |= (const1_value1 << 12) & 0xF000;
stream->write_2bytes(eilv);

if (ES_info_length > 0) {
if (!stream->require(ES_info_length)) {
if (!ES_info.empty()) {
if (!stream->require(ES_info.size())) {
ret = ERROR_STREAM_CASTER_TS_PMT;
srs_error("ts: mux PMT es info data failed. ret=%d", ret);
return ret;
}
stream->write_bytes(ES_info, ES_info_length);
stream->write_bytes(&ES_info[0], ES_info.size());
}

return ret;
Expand Down
7 changes: 1 addition & 6 deletions trunk/src/kernel/srs_kernel_ts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1428,12 +1428,7 @@ class SrsTsPayloadPMTESInfo
* reverved value, must be '1'
*/
int8_t const1_value1; //4bits
/**
* This is a 12-bit field, the first two bits of which shall be '00'. The remaining 10 bits specify the number
* of bytes of the descriptors of the associated program element immediately following the ES_info_length field.
*/
int16_t ES_info_length; //12bits
char* ES_info; //[ES_info_length] bytes.
std::vector<char> ES_info; //[ES_info_length] bytes.
public:
SrsTsPayloadPMTESInfo(SrsTsStream st = SrsTsStreamReserved, int16_t epid = 0);
virtual ~SrsTsPayloadPMTESInfo();
Expand Down

0 comments on commit 234904c

Please sign in to comment.