Input start

This commit is contained in:
Erik Zandvliet 2012-06-26 11:59:47 +02:00 committed by Thulinma
parent 0d6ff18723
commit 6bad0360a1
3 changed files with 36 additions and 6 deletions

View file

@ -7,18 +7,19 @@
/// All this constructor does is call TS::Packet::Clear(). /// All this constructor does is call TS::Packet::Clear().
TS::Packet::Packet() { Clear( ); } TS::Packet::Packet() { Clear( ); }
/// This constructor creates a filled TS::Packet, or creates an empty /// This function fills a TS::Packet from provided Data.
/// packet if not enough Data provided.
/// It fills the content with the first 188 bytes of Data. /// It fills the content with the first 188 bytes of Data.
/// \param Data The data to be read into the packet. /// \param Data The data to be read into the packet.
TS::Packet::Packet( std::string & Data ) { /// \return true if it was possible to read in a full packet, false otherwise.
bool TS::Packet::FromString( std::string & Data ) {
if( Data.size() < 188 ) { if( Data.size() < 188 ) {
Clear( ); return false;
} else { } else {
for( int i = 0; i < 188; i++ ) { Buffer[i] = Data[i]; } for( int i = 0; i < 188; i++ ) { Buffer[i] = Data[i]; }
Data.erase(0,188); Data.erase(0,188);
Free = 0; Free = 0;
} }
return true;
} }
/// The deconstructor deletes all space that may be occupied by a TS::Packet. /// The deconstructor deletes all space that may be occupied by a TS::Packet.
@ -323,3 +324,28 @@ void TS::Packet::FFMpegHeader( ) {
Free = 0; Free = 0;
MyCntr = ( (MyCntr + 1) % 0x10); MyCntr = ( (MyCntr + 1) % 0x10);
} }
int TS::Packet::ProgramMapPID( ) {
if( PID() != 0 ) { return -1; }
int Offset = Buffer[4];
int ProgramNumber = ( Buffer[13+Offset] << 8 ) + Buffer[14+Offset];
if( ProgramNumber == 0 ) { return -1; }
return ((Buffer[15+Offset] & 0x1F) << 8 ) + Buffer[16+Offset];
}
void TS::Packet::UpdateStreamPID( int & VideoPid, int & AudioPid ) {
int Offset = Buffer[4];
int SectionLength = ( ( Buffer[6+Offset] & 0x0F) << 8 ) + Buffer[7+Offset];
int ProgramInfoLength = ( (Buffer[15+Offset] & 0x0F) << 8 ) + Buffer[16+Offset];
int CurOffset = 17+ProgramInfoLength+Offset;
while( CurOffset < SectionLength-4 ) {
if( Buffer[CurOffset] == 0x01 || Buffer[CurOffset == 0x02] ) {
VideoPid = ((Buffer[CurOffset+1] & 0x1F) << 8 ) + Buffer[CurOffset+2];
}
if( Buffer[CurOffset] == 0x03 || Buffer[CurOffset == 0x04] ) {
AudioPid = ((Buffer[CurOffset+1] & 0x1F) << 8 ) + Buffer[CurOffset+2];
}
int ESLen = (( Buffer[CurOffset+3] & 0xF0 ) << 8 ) + Buffer[CurOffset+4];
CurOffset += ( 5 + ESLen );
}
}

View file

@ -16,8 +16,8 @@ namespace TS {
class Packet { class Packet {
public: public:
Packet(); Packet();
Packet( std::string & Data );
~Packet(); ~Packet();
bool FromString( std::string & Data );
void PID( int NewPID ); void PID( int NewPID );
int PID(); int PID();
void ContinuityCounter( int NewContinuity ); void ContinuityCounter( int NewContinuity );
@ -43,6 +43,9 @@ namespace TS {
void FillFree( std::string & PackageData ); void FillFree( std::string & PackageData );
void AddStuffing( int NumBytes ); void AddStuffing( int NumBytes );
void FFMpegHeader( ); void FFMpegHeader( );
int ProgramMapPID( );
void UpdateStreamPID( int & VideoPid, int & AudioPid );
private: private:
int Free; int Free;
char Buffer[188];///< The actual data char Buffer[188];///< The actual data

View file

@ -1,8 +1,9 @@
AM_CPPFLAGS = $(global_CFLAGS) $(MIST_CFLAGS) AM_CPPFLAGS = $(global_CFLAGS) $(MIST_CFLAGS)
LDADD = $(MIST_LIBS) LDADD = $(MIST_LIBS)
bin_PROGRAMS=MistDTSC2FLV MistFLV2DTSC MistDTSCFix MistDTSC2TS bin_PROGRAMS=MistDTSC2FLV MistFLV2DTSC MistDTSCFix MistDTSC2TS MistTS2DTSC
MistDTSC2FLV_SOURCES=dtsc2flv.cpp MistDTSC2FLV_SOURCES=dtsc2flv.cpp
MistFLV2DTSC_SOURCES=flv2dtsc.cpp MistFLV2DTSC_SOURCES=flv2dtsc.cpp
MistDTSCFix_SOURCES=dtscfix.cpp MistDTSCFix_SOURCES=dtscfix.cpp
MistDTSC2TS_SOURCES=dtsc2ts.cpp MistDTSC2TS_SOURCES=dtsc2ts.cpp
MistTS2DTSC_SOURCES=ts2dtsc.cpp