Optimizations and bug fixes
This commit is contained in:
parent
3703f6e859
commit
8ce3484f6e
3 changed files with 21 additions and 5 deletions
|
@ -88,11 +88,11 @@ int TS::Packet::AdaptationField( ) {
|
||||||
/// Sets the PCR (Program Clock Reference) of a TS::Packet.
|
/// Sets the PCR (Program Clock Reference) of a TS::Packet.
|
||||||
/// \param NewVal The new PCR Value.
|
/// \param NewVal The new PCR Value.
|
||||||
void TS::Packet::PCR( int64_t NewVal ) {
|
void TS::Packet::PCR( int64_t NewVal ) {
|
||||||
NewVal += (0xF618 * 300);
|
|
||||||
AdaptationField( 3 );
|
AdaptationField( 3 );
|
||||||
Buffer[4] = 7;
|
Buffer[4] = 7;
|
||||||
Buffer[5] = (Buffer[5] | 0x10 );
|
Buffer[5] = (Buffer[5] | 0x10 );
|
||||||
int64_t TmpVal = NewVal / 300;
|
int64_t TmpVal = NewVal / 300;
|
||||||
|
fprintf( stderr, "\tSetting PCR_Base: %d\n", TmpVal );
|
||||||
Buffer[6] = (((TmpVal>>1)>>24) & 0xFF);
|
Buffer[6] = (((TmpVal>>1)>>24) & 0xFF);
|
||||||
Buffer[7] = (((TmpVal>>1)>>16) & 0xFF);
|
Buffer[7] = (((TmpVal>>1)>>16) & 0xFF);
|
||||||
Buffer[8] = (((TmpVal>>1)>>8) & 0xFF);
|
Buffer[8] = (((TmpVal>>1)>>8) & 0xFF);
|
||||||
|
@ -227,7 +227,7 @@ std::string TS::Packet::ToString( ) {
|
||||||
/// Starts at the first Free byte.
|
/// Starts at the first Free byte.
|
||||||
/// \param NewLen The length of this video frame.
|
/// \param NewLen The length of this video frame.
|
||||||
void TS::Packet::PESVideoLeadIn( int NewLen ) {
|
void TS::Packet::PESVideoLeadIn( int NewLen ) {
|
||||||
static int PTS = 27000000;
|
static int PTS = 126000;
|
||||||
NewLen += 14;
|
NewLen += 14;
|
||||||
int Offset = ( 188 - Free );
|
int Offset = ( 188 - Free );
|
||||||
Buffer[Offset] = 0x00;//PacketStartCodePrefix
|
Buffer[Offset] = 0x00;//PacketStartCodePrefix
|
||||||
|
|
|
@ -41,7 +41,10 @@ int main( ) {
|
||||||
IsKeyFrame = false;
|
IsKeyFrame = false;
|
||||||
FirstKeyFrame = 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;
|
int TSType;
|
||||||
bool FirstPic = true;
|
bool FirstPic = true;
|
||||||
while( DTMIData.size() ) {
|
while( DTMIData.size() ) {
|
||||||
|
@ -129,8 +132,9 @@ int main( ) {
|
||||||
AudioCounter ++;
|
AudioCounter ++;
|
||||||
if( WritePesHeader ) {
|
if( WritePesHeader ) {
|
||||||
PackData.UnitStart( 1 );
|
PackData.UnitStart( 1 );
|
||||||
PackData.RandomAccess( 1 );
|
//PackData.RandomAccess( 1 );
|
||||||
PackData.AddStuffing( 184 - (14 + ToPack.size()) );
|
PackData.AddStuffing( 184 - (14 + ToPack.size()) );
|
||||||
|
PackData.RandomAccess( 1 );
|
||||||
PackData.PESAudioLeadIn( ToPack.size(), TimeStamp );
|
PackData.PESAudioLeadIn( ToPack.size(), TimeStamp );
|
||||||
WritePesHeader = false;
|
WritePesHeader = false;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -31,6 +31,7 @@ int main( ) {
|
||||||
int PMT_PID = -1;
|
int PMT_PID = -1;
|
||||||
int VideoPID = -1;
|
int VideoPID = -1;
|
||||||
int AudioPID = -1;
|
int AudioPID = -1;
|
||||||
|
int VideoTime_Offset = -1;
|
||||||
DTSC::DTMI Meta;
|
DTSC::DTMI Meta;
|
||||||
DTSC::DTMI VideoOut;
|
DTSC::DTMI VideoOut;
|
||||||
DTSC::DTMI AudioOut;
|
DTSC::DTMI AudioOut;
|
||||||
|
@ -85,11 +86,16 @@ int main( ) {
|
||||||
NAL_Unit Transformer;
|
NAL_Unit Transformer;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while( Transformer.ReadData( AnnexBData ) ) {
|
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( );
|
NewData += Transformer.SizePrepended( );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VideoOut.addContent( DTSC::DTMI( "data", NewData ) );
|
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);
|
std::cout << VideoOut.Pack(true);
|
||||||
VideoOut = DTSC::DTMI();
|
VideoOut = DTSC::DTMI();
|
||||||
}
|
}
|
||||||
|
@ -109,10 +115,16 @@ int main( ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VideoOut.addContent( DTSC::DTMI( "data", NewData ) );
|
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);
|
std::cout << VideoOut.Pack(true);
|
||||||
VideoOut = DTSC::DTMI();
|
VideoOut = DTSC::DTMI();
|
||||||
}
|
}
|
||||||
if( TSData.UnitStart( ) && PrevType == "Audio" ) {
|
if( TSData.UnitStart( ) && PrevType == "Audio" ) {
|
||||||
|
|
||||||
fprintf( stderr, "\tNew AudioPacket, Writing old\n" );
|
fprintf( stderr, "\tNew AudioPacket, Writing old\n" );
|
||||||
std::string AudioData = AudioOut.getContent("data").StrValue();
|
std::string AudioData = AudioOut.getContent("data").StrValue();
|
||||||
AudioData.erase(0,7);//remove the header
|
AudioData.erase(0,7);//remove the header
|
||||||
|
|
Loading…
Add table
Reference in a new issue