return mData;
}
+/////////////////////////////////////
+/** implement ElementaryParse **/
+/////////////////////////////////////
ElementaryParse::ElementaryParse(void)
{
indicator = 0;
return ret;
}
+//////////////////////////////
+/** implement TsPacket **/
+//////////////////////////////
TsPacket::TsPacket(void)
{
// initialize the packet as a null packet
mData[i] = data[i + startIndex];
}
}
+
bool TsPacket::HasPcr(void)
{
if ((mData[3] & 0x20) > 0 // Adaptation field present
return true;
return false;
}
+
Int64 TsPacket::GetPcr(void)throw(std::out_of_range)
{
if (false == this->HasPcr())
mData[3] |= value;
}
+/////////////////////////////
+/** implement TsTable **/
+/////////////////////////////
TsTable::TsTable(void)
{
// error = 0, payload = 1, priority = 0
void TsTable::AddData(pByte value, int offset, int len)
{
- pByte data = pByte(new byte[sizeof(mData.get()) + len]);
- memcpy(reinterpret_cast<char*>(data.get()),
- reinterpret_cast<char*>(mData.get()),
- sizeof(mData.get()));
- memcpy(reinterpret_cast<char*>(data.get() + sizeof(mData.get())),
- reinterpret_cast<char*>(value.get() + offset),
- len);
- mData = data;
+ std::vector<byte> data;
+ Utility::AddRange(data, mData);
+ Utility::AddRange(data, &value[offset]);
+ mData = Utility::ToString(data);
}
bool TsTable::Complete(void)
}
}
+////////////////////////////////
+/** implement Descriptor **/
+////////////////////////////////
Descriptor::Descriptor(pByte data, int startIndex)throw(std::invalid_argument)
{
if (sizeof(data.get()) < 2)
return mData;
}
+///////////////////////////////
+/** implement PcrPacket **/
+///////////////////////////////
PcrPacket::PcrPacket(Int64 pcr, byte counter, ushort pid)
{
SetPID(pid);
mData[i] = 0xff;
}
+///////////////////////////////
+/** implement PesPacket **/
+///////////////////////////////
PesPacket::PesPacket(pByte buff, int offset, int length, ushort pid)
{
mData = pByte(new byte[length]);
{
boost::shared_ptr<PesHeader> ph = GetHeader();
if(!ph) return GetData();
- pByte buff = pByte(
- new byte[sizeof(mData.get()) - 9 + ph.get()->GetHeaderLength() + 1]);
- for(int i=(9 + ph.get()->GetHeaderLength()); i < sizeof(mData.get()); i++)
- buff[i] = mData[i];
- buff[sizeof(mData.get()) - (9 + ph.get()->GetHeaderLength())] = '\0';
- return buff;
+ std::vector<byte> buff;
+ Utility::AddRange(buff, &mData[9 + ph.get()->GetHeaderLength()]);
+ return Utility::ToString(buff);
}
byte PesPacket::GetByte(int i)
void PesPacket::AddData(pByte moredata)
{
- pByte data = pByte(new byte[sizeof(mData.get()) + sizeof(moredata.get())]);
- memcpy(reinterpret_cast<char*>(data.get()),
- reinterpret_cast<char*>(mData.get()),
- sizeof(mData.get()));
- memcpy(reinterpret_cast<char*>(data.get() + sizeof(mData.get())),
- reinterpret_cast<char*>(mData.get()),
- sizeof(mData.get()));
- mData = data;
+ std::vector<byte> data;
+ Utility::AddRange(data, mData);
+ Utility::AddRange(data, moredata);
+ mData = Utility::ToString(data);
}
void PesPacket::AddData(pByte buff, int offset, int len)
{
- pByte data = pByte(new byte[sizeof(mData.get()) + len]);
- memcpy(reinterpret_cast<char*>(data.get()),
- reinterpret_cast<char*>(mData.get()),
- sizeof(mData.get()));
- memcpy(reinterpret_cast<char*>(data.get() + sizeof(mData.get())),
- reinterpret_cast<char*>(mData.get() + offset),
- len);
- mData = data;
+ std::vector<byte> data;
+ Utility::AddRange(data, mData);
+ for(int i = 0; i < len; i++)
+ data.push_back(buff[offset + i]);
+ mData = Utility::ToString(data);
}
byte PesPacket::GetBaseId(void)
throw new std::invalid_argument("Invalid PES header/packet length");
if (sizeof(data.get()) < hlen)
throw std::invalid_argument("PES Header too short");
- mData = pByte(new byte[hlen]);
- for (int i = 0; i < hlen; i++)
- mData[i] = data[i];
+ mData = data;
}
byte PesHeader::GetStreamId(void)
return mData;
}
+/////////////////////////////////////
+/** implement VC1SequenceInfo **/
+/////////////////////////////////////
VC1SequenceInfo::VC1SequenceInfo(pByte data, int offset)
{
UInt32 marker = 0xffffffff;
return FR_Reserved;
}
-// implement class PatPacket : TsTable
+///////////////////////////////
+/** implement PatPacket **/
+///////////////////////////////
PatPacket::PatPacket(void)
{
SetPID(Constants::PAT_PID);
SetNumberId(value);
RefreshCrc();
}
+
/*
boost::shared_array<ProgramInfo> PatPacket::GetPrograms(void)
{
programs.reset();
if (GetProgramInfoLength() == 0)
return programs;
- programs = boost::shared_array(new ProgramInfo[GetProgramInfoLength() / 4]);
+ programs = boost::shared_array<ProgramInfo>(new ProgramInfo[GetProgramInfoLength() / 4]);
+ for (int i = 0; i < GetProgramInfoLength(); i += 4)
+ programs[i / 4] = boost::shared_array<ProgramInfo>(
+ new ProgramInfo(mData, 13 + GetPointerSize() + i));
+ return programs;
+}
+
+boost::shared_array<ProgramInfo> PatPacket::GetPrograms(void)
+{
+ boost::shared_array<ProgramInfo> programs;
+ programs.reset();
+ if (GetProgramInfoLength() == 0)
+ return programs;
+ programs = boost::shared_array<ProgramInfo>(new ProgramInfo[GetProgramInfoLength() / 4]);
for (int i = 0; i < GetProgramInfoLength(); i += 4)
programs[i / 4] = boost::shared_array<ProgramInfo>(
new ProgramInfo(mData, 13 + GetPointerSize() + i));
}
}
*/
+
ushort PatPacket::GetProgramInfoLength(void)
{
return (ushort)(GetLength() - 9);