OSDN Git Service

modify PatPacket class in Utils
authorcocot <cocot@users.sourceforge.jp>
Thu, 19 Mar 2009 13:49:44 +0000 (22:49 +0900)
committercocot <cocot@users.sourceforge.jp>
Thu, 19 Mar 2009 13:49:44 +0000 (22:49 +0900)
src/Utils.cc
src/Utils.h

index 4baa9cc..4ed500c 100755 (executable)
@@ -405,6 +405,9 @@ pByte ProgramInfo::GetData(void)
     return mData;
 }
 
+/////////////////////////////////////
+/**   implement ElementaryParse   **/
+/////////////////////////////////////
 ElementaryParse::ElementaryParse(void)
 {
     indicator = 0;
@@ -417,6 +420,9 @@ byte ElementaryParse::GetNextBit(void)
     return ret;
 }
 
+//////////////////////////////
+/**   implement TsPacket   **/
+//////////////////////////////
 TsPacket::TsPacket(void)
 {
     // initialize the packet as a null packet
@@ -481,6 +487,7 @@ void TsPacket::SetData(pByte data, int startIndex)throw(std::invalid_argument)
         mData[i] = data[i + startIndex];
     }
 }
+
 bool TsPacket::HasPcr(void)
 {
     if ((mData[3] & 0x20) > 0  // Adaptation field present
@@ -489,6 +496,7 @@ bool TsPacket::HasPcr(void)
         return true;
     return false;
 }
+
 Int64 TsPacket::GetPcr(void)throw(std::out_of_range)
 {
     if (false == this->HasPcr())
@@ -582,6 +590,9 @@ void TsPacket::SetContinuityCounter(byte value)throw(std::out_of_range)
     mData[3] |= value;
 }
 
+/////////////////////////////
+/**   implement TsTable   **/
+/////////////////////////////
 TsTable::TsTable(void)
 {
     // error = 0, payload = 1, priority = 0
@@ -605,14 +616,10 @@ TsTable::TsTable(pByte data)
 
 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)
@@ -677,6 +684,9 @@ void TsTable::RefreshCrc(void)
     }
 }
 
+////////////////////////////////
+/**   implement Descriptor   **/
+////////////////////////////////
 Descriptor::Descriptor(pByte data, int startIndex)throw(std::invalid_argument)
 {
     if (sizeof(data.get()) < 2)
@@ -706,6 +716,9 @@ pByte Descriptor::GetData(void)
     return mData;
 }
 
+///////////////////////////////
+/**   implement PcrPacket   **/
+///////////////////////////////
 PcrPacket::PcrPacket(Int64 pcr, byte counter, ushort pid)
 {
     SetPID(pid);
@@ -729,6 +742,9 @@ PcrPacket::PcrPacket(Int64 pcr, byte counter, ushort pid)
         mData[i] = 0xff;
 }
 
+///////////////////////////////
+/**   implement PesPacket   **/
+///////////////////////////////
 PesPacket::PesPacket(pByte buff, int offset, int length, ushort pid)
 {
     mData = pByte(new byte[length]);
@@ -756,12 +772,9 @@ pByte PesPacket::GetPayload(void)
 {
     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)
@@ -823,26 +836,19 @@ boost::shared_ptr<PesHeader> PesPacket::GetHeader(void)
 
 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)
@@ -884,9 +890,7 @@ PesHeader::PesHeader(pByte data)throw(std::invalid_argument)
         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)
@@ -1044,6 +1048,9 @@ pByte PesHeader::GetData(void)
     return mData;
 }
 
+/////////////////////////////////////
+/**   implement VC1SequenceInfo   **/
+/////////////////////////////////////
 VC1SequenceInfo::VC1SequenceInfo(pByte data, int offset)
 {
     UInt32 marker = 0xffffffff;
@@ -1243,7 +1250,9 @@ FrameRate VC1SequenceInfo::GetFrameRate(void)
     return FR_Reserved;
 }
 
-// implement class PatPacket : TsTable
+///////////////////////////////
+/**   implement PatPacket   **/
+///////////////////////////////
 PatPacket::PatPacket(void)
 {
     SetPID(Constants::PAT_PID);
@@ -1272,6 +1281,7 @@ void PatPacket::SetTransportStreamId(ushort value)
     SetNumberId(value);
     RefreshCrc();
 }
+
 /*
 boost::shared_array<ProgramInfo> PatPacket::GetPrograms(void)
 {
@@ -1279,7 +1289,20 @@ 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));
@@ -1313,6 +1336,7 @@ void PatPacket::SetPrograms(boost::shared_ptr<ProgramInfo> value)
     }
 }
 */
+
 ushort PatPacket::GetProgramInfoLength(void)
 {
     return (ushort)(GetLength() - 9);
index b8bfe71..b0a9a06 100755 (executable)
@@ -461,8 +461,7 @@ class ElementaryParse {
   virtual FrameRate GetFrameRate(void);
   virtual void SetFrameRate(FrameRate frameRate);
   virtual AudioPresentationType GetAudioPresentationType(void);
-  virtual void SetAudioPresentationType(
-      AudioPresentationType audioPresentationTyp);
+  virtual void SetAudioPresentationType(AudioPresentationType audioPresentationTyp);
   virtual SamplingFrequency GetSamplingFrequency(void);
   virtual void SetSamplingFrequency(SamplingFrequency samplingFrequency);
   virtual pByte GetElementaryDescriptors(void);