From 8ce3484f6ed5d0142cfd7ade24959b671e688eb8 Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Fri, 4 Jan 2002 22:14:33 +0100 Subject: [PATCH] Optimizations and bug fixes --- lib/ts_packet.cpp | 4 ++-- src/converters/dtsc2ts.cpp | 8 ++++++-- src/converters/ts2dtsc.cpp | 14 +++++++++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/ts_packet.cpp b/lib/ts_packet.cpp index 84735243..c753fbe6 100644 --- a/lib/ts_packet.cpp +++ b/lib/ts_packet.cpp @@ -88,11 +88,11 @@ int TS::Packet::AdaptationField( ) { /// Sets the PCR (Program Clock Reference) of a TS::Packet. /// \param NewVal The new PCR Value. void TS::Packet::PCR( int64_t NewVal ) { - NewVal += (0xF618 * 300); AdaptationField( 3 ); Buffer[4] = 7; Buffer[5] = (Buffer[5] | 0x10 ); int64_t TmpVal = NewVal / 300; + fprintf( stderr, "\tSetting PCR_Base: %d\n", TmpVal ); Buffer[6] = (((TmpVal>>1)>>24) & 0xFF); Buffer[7] = (((TmpVal>>1)>>16) & 0xFF); Buffer[8] = (((TmpVal>>1)>>8) & 0xFF); @@ -227,7 +227,7 @@ std::string TS::Packet::ToString( ) { /// Starts at the first Free byte. /// \param NewLen The length of this video frame. void TS::Packet::PESVideoLeadIn( int NewLen ) { - static int PTS = 27000000; + static int PTS = 126000; NewLen += 14; int Offset = ( 188 - Free ); Buffer[Offset] = 0x00;//PacketStartCodePrefix diff --git a/src/converters/dtsc2ts.cpp b/src/converters/dtsc2ts.cpp index 2a9c3eef..971b1f16 100644 --- a/src/converters/dtsc2ts.cpp +++ b/src/converters/dtsc2ts.cpp @@ -41,7 +41,10 @@ int main( ) { IsKeyFrame = false; FirstKeyFrame = false; } - TimeStamp = (DTSCStream.getPacket(0).getContent("time").NumValue() * 27000 ); + TimeStamp = ((DTSCStream.getPacket(0).getContent("time").NumValue() + 700) * 27000 ); + if( IsKeyFrame ) { + fprintf( stderr, "Keyframe, timeStamp: %u\n", TimeStamp ); + } int TSType; bool FirstPic = true; while( DTMIData.size() ) { @@ -129,8 +132,9 @@ int main( ) { AudioCounter ++; if( WritePesHeader ) { PackData.UnitStart( 1 ); - PackData.RandomAccess( 1 ); + //PackData.RandomAccess( 1 ); PackData.AddStuffing( 184 - (14 + ToPack.size()) ); + PackData.RandomAccess( 1 ); PackData.PESAudioLeadIn( ToPack.size(), TimeStamp ); WritePesHeader = false; } else { diff --git a/src/converters/ts2dtsc.cpp b/src/converters/ts2dtsc.cpp index 58b4adee..89ab0ec2 100644 --- a/src/converters/ts2dtsc.cpp +++ b/src/converters/ts2dtsc.cpp @@ -31,6 +31,7 @@ int main( ) { int PMT_PID = -1; int VideoPID = -1; int AudioPID = -1; + int VideoTime_Offset = -1; DTSC::DTMI Meta; DTSC::DTMI VideoOut; DTSC::DTMI AudioOut; @@ -85,11 +86,16 @@ int main( ) { NAL_Unit Transformer; int i = 0; while( Transformer.ReadData( AnnexBData ) ) { - if( Transformer.Type() < 6 || Transformer.Type() > 9 ) { //Extract SPS/PPS/SEI/Separator Data + if( Transformer.Type() <= 6 || Transformer.Type() >= 10 ) { //Extract SPS/PPS/Separator Data NewData += Transformer.SizePrepended( ); } } VideoOut.addContent( DTSC::DTMI( "data", NewData ) ); + if( VideoTime_Offset == -1 ) { + VideoTime_Offset = VideoOut.getContent("time").NumValue(); + } + int VideoTime = VideoOut.getContent("time").NumValue(); + VideoOut.addContent( DTSC::DTMI( "time", VideoTime - VideoTime_Offset ) ); std::cout << VideoOut.Pack(true); VideoOut = DTSC::DTMI(); } @@ -109,10 +115,16 @@ int main( ) { } } VideoOut.addContent( DTSC::DTMI( "data", NewData ) ); + if( VideoTime_Offset == -1 ) { + VideoTime_Offset = VideoOut.getContent("time").NumValue(); + } + int VideoTime = VideoOut.getContent("time").NumValue(); + VideoOut.addContent( DTSC::DTMI( "time", VideoTime - VideoTime_Offset ) ); std::cout << VideoOut.Pack(true); VideoOut = DTSC::DTMI(); } if( TSData.UnitStart( ) && PrevType == "Audio" ) { + fprintf( stderr, "\tNew AudioPacket, Writing old\n" ); std::string AudioData = AudioOut.getContent("data").StrValue(); AudioData.erase(0,7);//remove the header