TOD to M2T (for MPEG2-TTS)
Posted: Fri Oct 26, 2007 12:43 am
Code: Select all
; MPEG-2 TTS to MPEG2-TS
; ( TOD to m2t )
Enumeration
#TOD_SMALL
#TOD_BIG
EndEnumeration
#TOD_BIG_BufferSize = 104857600 ; 17sec 100MB
#TOD_SMALL_BufferSize = 10485760 ; 20sec 10MB
Procedure.b TOD_Comvert( SourceFile.s, OutputFile.s, SpeedMode.b = #TOD_BIG)
Protected *buffer, Buffer_pos.l, Moved_Size.l, OutputFile_hnd.l, SourceFile_hnd.l, SourceFile_Size.l
Protected *buffer_s, *buffer_o, buf_size.l
If FileSize( SourceFile ) < 256
ProcedureReturn #False
EndIf
If SpeedMode = #TOD_BIG
*buffer = AllocateMemory( #TOD_BIG_BufferSize )
ElseIf SpeedMode = #TOD_SMALL
*buffer = AllocateMemory( #TOD_SMALL_BufferSize )
Else
ProcedureReturn #False
EndIf
OutputFile_hnd.l = CreateFile( #PB_Any, OutputFile )
SourceFile_hnd.l = ReadFile( #PB_Any, SourceFile )
FileBuffersSize( SourceFile_hnd, 0 )
SourceFile_Size.l = Lof( SourceFile_hnd )
If (SourceFile_Size % 192)=0
buf_size.l = MemorySize( *buffer )
Repeat
*buffer_s = *buffer + 4
*buffer_o = *buffer
If SourceFile_Size>buf_size
SourceFile_Size - buf_size
Else
buf_size = SourceFile_Size
SourceFile_Size = 0
EndIf
ReadData( SourceFile_hnd, *buffer, buf_size)
For Buffer_pos = 0 To buf_size Step 192
MoveMemory( *buffer_s, *buffer_o, 188 )
*buffer_o + 188
*buffer_s + 192
Next
WriteData( OutputFile_hnd, *buffer, ( buf_size/192 ) * 188 )
Until SourceFile_Size = 0
CloseFile( SourceFile_hnd ) : CloseFile( OutputFile_hnd )
FreeMemory( *buffer )
ProcedureReturn #True
Else
Debug SourceFile_Size % 192
Debug "FAULT"
EndIf
EndProcedure
TOD_Comvert( "abc.TOD", "Ctest.m2t", #TOD_BIG)