Fixed Connector, Selection mechanism still missing

This commit is contained in:
Erik Zandvliet 2012-06-11 20:51:07 +02:00 committed by Thulinma
parent 102231103c
commit 45df1b72df
3 changed files with 168 additions and 347 deletions

View file

@ -10,30 +10,21 @@
#include "../../lib/ts_packet.h" //TS support
#include "../../lib/dtsc.h" //DTSC support
std::string GetAudioHeader( int FrameLen ) {
char StandardHeader[7] = {0xFF,0xF1,0x4C,0x80,0x00,0x1F,0xFC};
FrameLen += 7;
StandardHeader[3] = ( StandardHeader[3] & 0xFC ) + ( ( FrameLen & 0x00001800 ) >> 11 );
StandardHeader[4] = ( ( FrameLen & 0x000007F8 ) >> 3 );
StandardHeader[5] = ( StandardHeader[5] & 0x3F ) + ( ( FrameLen & 0x00000007 ) << 5 );
return std::string(StandardHeader,7);
}
int main( ) {
char charBuffer[1024*10];
unsigned int charCount;
std::string StrData;
TS::Packet PackData;
std::string ToPack;
DTSC::Stream DTSCStream;
int TSPackNum = 0;
std::string DTMIData;
bool WritePesHeader;
bool IsKeyFrame;
TS::Packet PackData;
DTSC::Stream DTSCStream;
int PacketNumber = 0;
uint64_t TimeStamp = 0;
int ThisNaluSize;
int VidContinuity = 0;
int AudioContinuity = 0;
char VideoCounter = 0;
char AudioCounter = 0;
bool WritePesHeader;
bool IsKeyFrame;
bool FirstKeyFrame = true;
bool FirstIDRInKeyFrame;
while( std::cin.good() ) {
@ -54,7 +45,8 @@ int main( ) {
int TSType;
bool FirstPic = true;
while( DTMIData.size() ) {
ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + (DTMIData[2] << 8) + DTMIData[3];
ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) +
(DTMIData[2] << 8) + DTMIData[3];
DTMIData.erase(0,4);//Erase the first four characters;
TSType = (int)DTMIData[0];
if( TSType == 0x25 ) {
@ -86,21 +78,17 @@ int main( ) {
}
WritePesHeader = true;
while( ToPack.size() ) {
if ( ( TSPackNum % 210 ) == 0 ) {
PackData.FFMpegHeader();
PackData.ToString();
}
if ( ( TSPackNum % 42 ) == 0 ) {
if ( ( PacketNumber % 42 ) == 0 ) {
PackData.DefaultPAT();
PackData.ToString();
} else if ( ( TSPackNum % 42 ) == 1 ) {
} else if ( ( PacketNumber % 42 ) == 1 ) {
PackData.DefaultPMT();
PackData.ToString();
PackData.ToString();
} else {
PackData.Clear();
PackData.PID( 0x100 );
PackData.ContinuityCounter( VidContinuity );
VidContinuity ++;
PackData.ContinuityCounter( VideoCounter );
VideoCounter ++;
if( WritePesHeader ) {
PackData.UnitStart( 1 );
if( IsKeyFrame ) {
@ -114,36 +102,31 @@ int main( ) {
WritePesHeader = false;
} else {
PackData.AdaptationField( 0x01 );
PackData.AddStuffing( 184 - (ToPack.size()) );
}
PackData.AddStuffing( 184 - (ToPack.size()) );
}
PackData.FillFree( ToPack );
PackData.ToString();
}
TSPackNum++;
}
PacketNumber ++;
}
} else if( DTSCStream.lastType() == DTSC::AUDIO ) {
WritePesHeader = true;
DTMIData = DTSCStream.lastData();
ToPack = GetAudioHeader( DTMIData.size() );
ToPack += DTMIData;
TimeStamp = DTSCStream.getPacket(0).getContent("time").NumValue() * 900;
PackData.Clear();
while( ToPack.size() ) {
if ( ( TSPackNum % 210 ) == 0 ) {
PackData.FFMpegHeader();
PackData.ToString();
}
if ( ( TSPackNum % 42 ) == 0 ) {
ToPack = TS::GetAudioHeader( DTMIData.size() );
ToPack += DTMIData;
TimeStamp = DTSCStream.getPacket(0).getContent("time").NumValue() * 900;
while( ToPack.size() ) {
if ( ( PacketNumber % 42 ) == 0 ) {
PackData.DefaultPAT();
PackData.ToString();
} else if ( ( TSPackNum % 42 ) == 1 ) {
} else if ( ( PacketNumber % 42 ) == 1 ) {
PackData.DefaultPMT();
PackData.ToString();
} else {
PackData.Clear();
PackData.PID( 0x101 );
PackData.ContinuityCounter( AudioContinuity );
AudioContinuity ++;
PackData.ContinuityCounter( AudioCounter );
AudioCounter ++;
if( WritePesHeader ) {
PackData.UnitStart( 1 );
PackData.RandomAccess( 1 );
@ -152,14 +135,14 @@ int main( ) {
WritePesHeader = false;
} else {
PackData.AdaptationField( 0x01 );
PackData.AddStuffing( 184 - (ToPack.size()) );
}
PackData.AddStuffing( 184 - (ToPack.size()) );
}
PackData.FillFree( ToPack );
PackData.ToString();
}
TSPackNum++;
}
}
}
PacketNumber ++;
}
}
}
}
return 0;