Page 1 of 1

TOD to M2T (for MPEG2-TTS)

Posted: Fri Oct 26, 2007 12:43 am
by oryaaaaa

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)