mData[i] = 0xff;
}
+PesPacket::PesPacket(byte* buff, int offset, int length, ushort pid)
+{
+ mData.assign(0,length);
+ SetPID(pid);
+ AddData(buff, offset, length);
+ SetPriority(false);
+}
+
+bool PesPacket::GetPriority(void)
+{
+ return mPriority;
+}
+
+void PesPacket::SetPriority(bool value)
+{
+ mPriority = value;
+}
+
+byte* PesPacket::GetData(void)
+{
+ byte* buff = new byte[mData.size()+1];
+ for(int i = 0; i < mData.size();i++)
+ buff[i] = mData.at(i);
+ buff[mData.size()] = '\0';
+ return buff;
+}
+
+byte* PesPacket::GetPayload(void)
+{
+ PesHeader* ph = GetHeader();
+ if(ph == NULL) return GetData();
+ byte* buff = new byte[mData.size()-(9 + ph->HeaderLength)+1];
+ for(int i=(9 + ph->HeaderLength); i < mData.size(); i++)
+ buff[i] = mData.at(i);
+ buff[mData.size()-(9 + ph->HeaderLength)] = '\0';
+ return buff;
+}
+
+byte PesPacket::GetByte(int i)
+{
+ return mData[i];
+}
+
+void PesPacket::SetByte(byte value)
+{
+// mData[i] = value;
+}
+
+ushort PesPacket::GetPID(void)
+{
+ return mPID;
+}
+
+void PesPacket::SetPID(ushort id)
+{
+ mPID = id;
+}
+
+bool PesPacket::GetComplete(void)
+{
+ if(mData.size() < 6) return false;
+ ushort len = (ushort)((mData[4] << 8) + mData[5]);
+ if(len == 0) return false;
+ if(mData.size() != len + 6) return false;
+ return true;
+}
+
+void PesPacket::SetComplete(bool value)
+{
+ if(value)
+ {
+ ushort len = (ushort)(mData.size() - 6);
+ if (mData.size() > (0xffff - 6))
+ len = 0;
+ mData[4] = (byte)((len >> 8) & 0xff);
+ mData[5] = (byte)(len & 0xff);
+ }
+}
+
+/*
+ public PesHeader GetHeader()
+ {
+ try
+ {
+ PesHeader* ph = new PesHeader(data.ToArray());
+ return ph;
+ }
+ catch (FormatException)
+ {
+ // no valid header (yet)
+ return null;
+ }
+ }
+
+ public void AddData(List<byte> moredata)
+ {
+ data.AddRange(moredata);
+ }
+
+
+ public void AddData(byte[] buff, int offset, int length)
+ {
+ for (int i = offset; i < length + offset; i++)
+ data.Add(buff[i]);
+ }
+
+ public byte BaseId
+ {
+ get
+ {
+ if (data.Count > 3)
+ return data[3];
+ return 0;
+ }
+ }
+
+ public byte ExtendedId
+ {
+ get
+ {
+ if ((data.Count > 8) && data.Count > (8 + data[8]))
+ return data[9 + data[8]];
+ return 0;
+ }
+ }
+
+ public UInt32 ExtendedType
+ {
+ get
+ {
+ if ((data.Count > 8) && data.Count > (11 + data[8]))
+ {
+ UInt32 format = (UInt32)data[9 + data[8]] << 24;
+ format += (UInt32)data[10 + data[8]] << 16;
+ format += (UInt32)data[11 + data[8]] << 8;
+ format += (UInt32)data[12 + data[8]];
+ return format;
+ }
+ return 0;
+ }
+ }
+*/
} // namespace
#include <string>
#include <list>
+#include <vector>
#include <stdexcept>
// #include "BlueMux.h"
#include "tsremuxcpp_define.h"
class PesPacket {
public:
PesPacket(byte* buff, int offset, int length, ushort pid);
- bool Priority;
+ bool GetPriority(void);
+ void SetPriority(bool priority);
byte* GetData(void);
byte* GetPayload(void);
byte GetByte(int i);
void SetByte(byte dat);
- ushort PID;
- bool Complete;
- PesHeader GetHeader(void);
- void AddData(std::list<byte> moredata);
+ ushort GetPID(void);
+ void SetPID(ushort id);
+ bool GetComplete(void);
+ void SetComplete(bool value);
+ PesHeader* GetHeader(void);
+ void AddData(std::vector<byte> moredata);
void AddData(byte* buff, int offset, int length);
byte BaseId;
byte ExtendedId;
UInt32 ExtendedType;
private:
- std::list<byte> data;
- ushort pid;
- bool priority;
+ std::vector<byte> mData;
+ bool mPriority;
+ ushort mPID;
};
class VC1SequenceInfo {