Optimizations and bug fixes

This commit is contained in:
Erik Zandvliet 2002-01-04 22:14:33 +01:00 committed by Thulinma
parent 3703f6e859
commit 8ce3484f6e
3 changed files with 21 additions and 5 deletions

View file

@ -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

View file

@ -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 {

View file

@ -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