[Mediaportal-svn] SF.net SVN: mediaportal: [10084] trunk/TvEngine3/Filters/bin
Turn your PC into a very advanced MediaCenter/HTPC
Brought to you by:
gereonheitmann,
morpheus_xx
From: <ya...@us...> - 2006-08-30 13:09:40
|
Revision: 10084 Author: yamp Date: 2006-08-30 06:09:27 -0700 (Wed, 30 Aug 2006) ViewCVS: http://svn.sourceforge.net/mediaportal/?rev=10084&view=rev Log Message: ----------- Modified Paths: -------------- trunk/TvEngine3/Filters/bin/TsWriter.ax trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.cpp trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.h trunk/TvEngine3/Filters/sources/TsWriter/source/PesDecoder.cpp Modified: trunk/TvEngine3/Filters/bin/TsWriter.ax =================================================================== (Binary files differ) Modified: trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.cpp =================================================================== --- trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.cpp 2006-08-30 11:21:28 UTC (rev 10083) +++ trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.cpp 2006-08-30 13:09:27 UTC (rev 10084) @@ -171,10 +171,10 @@ else { //audio stream (or private stream) - //if (m_audioPacketCounter==0 && isStart==false) - //{ - // return pesLength; - //} + if (m_audioPacketCounter==0 && isStart==false) + { + return pesLength; + } m_audioPacketCounter++; return SplitPesPacket(streamId,header,headerlen,pesPacket,pesLength,isStart); } @@ -184,12 +184,13 @@ int CMultiplexer::WritePackHeader() { -/* __int64 pcrHi=m_pcrDecoder.PcrHigh() ; +/* +__int64 pcrHi=m_pcrDecoder.PcrHigh() ; int pcrLow=m_pcrDecoder.PcrLow(); - */ +*/ __int64 pcrHi=m_pcrDecoder.PcrHigh() - m_startPcr; - int pcrLow=0;//m_pcrDecoder.PcrLow(); + int pcrLow=0;//m_pcrDecoder.PcrLow(); int muxRate=(6*1024*1024)/50; //6MB/s byte pBuffer[0x20]; //pack header @@ -224,10 +225,10 @@ int CMultiplexer::SplitPesPacket(int streamId,byte* header, int headerlen, byte* pesPacket, int sectionLength, bool isStart) { - //LogDebug("sid:%x len:%x start:%d headerlen:%x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x", - // streamId, sectionLength,isStart,headerlen, - // pesPacket[0],pesPacket[1], pesPacket[2],pesPacket[3], pesPacket[4],pesPacket[5], - // pesPacket[6],pesPacket[7], pesPacket[8],pesPacket[9], pesPacket[10],pesPacket[11]); +// LogDebug("sid:%x len:%x start:%d headerlen:%x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x %02.2x%02.2x", +// streamId, sectionLength,isStart,headerlen, + //pesPacket[0],pesPacket[1], pesPacket[2],pesPacket[3], pesPacket[4],pesPacket[5], + //pesPacket[6],pesPacket[7], pesPacket[8],pesPacket[9], pesPacket[10],pesPacket[11]); if (streamId<0) return sectionLength; if (m_pCallback == NULL) return sectionLength; @@ -242,109 +243,66 @@ if (sectionLength != 0x7e9) { - if (streamId>=0xe0 && streamId <=0xef) - { - //video - WritePackHeader(); - int rest = 0x7e9-sectionLength; - if (rest < 0xe0) - { - //write pes header - memset(m_pesBuffer,0xff,0x800); - m_pesBuffer[0] = 0; - m_pesBuffer[1] = 0; - m_pesBuffer[2] = 1; - m_pesBuffer[3] = streamId; - m_pesBuffer[4] = 0x7; - m_pesBuffer[5] = 0xec; - m_pesBuffer[6] = 0x81; - m_pesBuffer[7] = 0; - m_pesBuffer[8] = rest; - m_pCallback->Write(m_pesBuffer, 9+rest); - m_pCallback->Write(pesPacket, sectionLength); - } - else - { + if (isStart) + { - //write original header - m_pesBuffer[0] = 0; - m_pesBuffer[1] = 0; - m_pesBuffer[2] = 1; - m_pesBuffer[3] = streamId; - m_pesBuffer[4] = 0x7; - m_pesBuffer[5] = 0xec; - m_pesBuffer[6] = 0x81; - m_pesBuffer[7] = 0; - m_pesBuffer[8] = 0; - m_pCallback->Write(m_pesBuffer, 9); - m_pCallback->Write(pesPacket, sectionLength); + int len=headerlen+sectionLength-6; + m_pcrDecoder.ChangePtsDts(header, m_startPcr); + memset(m_pesBuffer,0xff,0x800); + WritePackHeader(); + header[3]=streamId; + header[4]=((len)>>8)&0xff; + header[5]=((len))&0xff; + m_pCallback->Write(header, headerlen); //e + m_pCallback->Write(pesPacket, sectionLength); - //write padding stream; - memset(m_pesBuffer,0xff,0x800); - int rest = 0x7e9-sectionLength; - m_pesBuffer[0] = 0; - m_pesBuffer[1] = 0; - m_pesBuffer[2] = 1; - m_pesBuffer[3] = 0xbe; - m_pesBuffer[4] = ((rest-6)>>8)&0xff; - m_pesBuffer[5] = ((rest-6)&0xff); - m_pCallback->Write(m_pesBuffer, rest); - } - } - else - { - //audio - WritePackHeader(); - int rest = 0x7e9-sectionLength; - if (rest < 0xe0) - { - //write pes header - memset(m_pesBuffer,0xff,0x800); - m_pesBuffer[0] = 0; - m_pesBuffer[1] = 0; - m_pesBuffer[2] = 1; - m_pesBuffer[3] = streamId; - m_pesBuffer[4] = 0x7; - m_pesBuffer[5] = 0xec; - m_pesBuffer[6] = 0x81; - m_pesBuffer[7] = 0; - m_pesBuffer[8] = rest; - m_pCallback->Write(m_pesBuffer, 9+rest); - m_pCallback->Write(pesPacket, sectionLength); - } - else - { - m_pesBuffer[0] = 0; - m_pesBuffer[1] = 0; - m_pesBuffer[2] = 1; - m_pesBuffer[3] = streamId; - m_pesBuffer[4] = ((sectionLength+3)>>8)&0xff; - m_pesBuffer[5] = ((sectionLength+3))&0xff; - m_pesBuffer[6] = 0x81; - m_pesBuffer[7] = 0; - m_pesBuffer[8] = 0; - m_pCallback->Write(m_pesBuffer, 9); - m_pCallback->Write(pesPacket, sectionLength); - - //write padding stream; - memset(m_pesBuffer,0xff,0x800); - int rest = 0x7e9-sectionLength; - m_pesBuffer[0] = 0; - m_pesBuffer[1] = 0; - m_pesBuffer[2] = 1; - m_pesBuffer[3] = 0xbe; - m_pesBuffer[4] = ((rest-6)>>8)&0xff; - m_pesBuffer[5] = ((rest-6)&0xff); - m_pCallback->Write(m_pesBuffer, rest); - } - } - return sectionLength; + //write padding stream; + int rest=0x7f2-(headerlen+sectionLength); + m_pesBuffer[0] = 0; + m_pesBuffer[1] = 0; + m_pesBuffer[2] = 1; + m_pesBuffer[3] = 0xbe; + m_pesBuffer[4] = ((rest-6)>>8)&0xff; + m_pesBuffer[5] = ((rest-6)&0xff); + m_pCallback->Write(m_pesBuffer, rest); + return sectionLength; + } + + WritePackHeader(); + memset(m_pesBuffer,0xff,0x800); + + //write original header + headerlen=9; + int len=headerlen+sectionLength-6; + m_pesBuffer[0] = 0; + m_pesBuffer[1] = 0; + m_pesBuffer[2] = 1; + m_pesBuffer[3] = streamId; + m_pesBuffer[4] = ((len)>>8)&0xff; + m_pesBuffer[5] = ((len))&0xff; + m_pesBuffer[6] = 0x81; + m_pesBuffer[7] = 0; + m_pesBuffer[8] = 0; + m_pCallback->Write(m_pesBuffer, 9); + m_pCallback->Write(pesPacket, sectionLength); + + + //write padding stream; + int rest=0x7f2-(headerlen+sectionLength); + m_pesBuffer[0] = 0; + m_pesBuffer[1] = 0; + m_pesBuffer[2] = 1; + m_pesBuffer[3] = 0xbe; + m_pesBuffer[4] = ((rest-6)>>8)&0xff; + m_pesBuffer[5] = ((rest-6)&0xff); + m_pCallback->Write(m_pesBuffer, rest); + return sectionLength; } if (isStart) - { - int len=0x7e9-(headerlen-9); + { WritePackHeader(); + int len=0x7e9-(headerlen-9); header[3]=streamId; header[4]=0x7; header[5]=0xec; @@ -353,7 +311,7 @@ m_pCallback->Write(pesPacket, len); return len; } - + WritePackHeader(); m_pesBuffer[0] = 0; m_pesBuffer[1] = 0; @@ -366,5 +324,6 @@ m_pesBuffer[8] = 0; m_pCallback->Write(m_pesBuffer, 9); m_pCallback->Write(pesPacket, sectionLength); + return sectionLength; } \ No newline at end of file Modified: trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.h =================================================================== --- trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.h 2006-08-30 11:21:28 UTC (rev 10083) +++ trunk/TvEngine3/Filters/sources/TsWriter/source/Multiplexer.h 2006-08-30 13:09:27 UTC (rev 10084) @@ -21,7 +21,7 @@ #pragma once #include "pcrdecoder.h" #include "pesdecoder.h" -#include "patparser.h" +//#include "patparser.h" #include <vector> #include <map> Modified: trunk/TvEngine3/Filters/sources/TsWriter/source/PesDecoder.cpp =================================================================== --- trunk/TvEngine3/Filters/sources/TsWriter/source/PesDecoder.cpp 2006-08-30 11:21:28 UTC (rev 10083) +++ trunk/TvEngine3/Filters/sources/TsWriter/source/PesDecoder.cpp 2006-08-30 13:09:27 UTC (rev 10084) @@ -88,13 +88,20 @@ if (m_pid==-1) return false; CTsHeader header(tsPacket); + if (header.Pid != m_pid) return false; if (header.SyncByte != TS_PACKET_SYNC) { LogDebug("pesdecoder pid:%x sync error", m_pid); return false; } + if (header.TransportError) + { + m_bStart=false; + m_iWritePos=0; + //LogDebug("pesdecoder pid:%x transport error", m_pid); + return false; + } - if (header.Pid != m_pid) return false; BOOL scrambled= (header.TScrambling!=0); if (scrambled) return false; if ( header.AdaptionFieldOnly() ) @@ -113,16 +120,21 @@ if (m_pCallback!=NULL) { //LogDebug(" pes %x start:%x", m_iStreamId,m_iWritePos); - int written=m_pCallback->OnNewPesPacket(m_iStreamId,m_pesHeader, m_iPesHeaderLen, m_pesBuffer, m_iWritePos, false); - //LogDebug(" pes %x written:%x", m_iStreamId,written); - m_iWritePos=0; + int written=m_pCallback->OnNewPesPacket(m_iStreamId,m_pesHeader, m_iPesHeaderLen, m_pesBuffer, m_iWritePos, m_bStart); + if (written>=0) + { + //LogDebug(" pes %x written:%x", m_iStreamId,written); + m_bStart=false; + m_iWritePos=0; + } } } + if (tsPacket[pos+0]==0 && tsPacket[pos+1]==0 && tsPacket[pos+2]==1) { if (m_iStreamId<0) m_iStreamId=tsPacket[pos+3]; - m_iWritePos=0; + if (m_iWritePos<0) m_iWritePos=0; m_iPesHeaderLen=tsPacket[pos+8]+9; memcpy(m_pesHeader,&tsPacket[pos],m_iPesHeaderLen); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |