News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

calc Duration:

Started by ragdog, February 18, 2008, 08:10:33 AM

Previous topic - Next topic

ragdog

   
Hi

I would like ffmeg  into my program now calculate the progress  status
I found only this source  can your help me this translate in masm32
Duration: 00:03:30.3, start: 0.000000, bitrate: 64 kb/s

the original source found here http://kpumuk.info/ruby-on-rails/encoding-media-files-in-ruby-using-ffmpeg-mencoder-with-progress-tracking/


def execute_ffmpeg(command)
  progress = nil
  Open3.popen3(command) do |pipe|
    pipe.each("\r") do |line|
      if line =~ /Duration: (\d{2}):(\d{2}):(\d{2}).(\d{1})/
        duration = (($1.to_i * 60 + $2.to_i) * 60 + $3.to_i) * 10 + $4.to_i
      end
      if line =~ /time=(\d+).(\d+)/
        if not duration.nil? and duration != 0
          p = ($1.to_i * 10 + $2.to_i) * 100 / duration
        else
          p = 0
        end
        p = 100 if p > 100
        if progress != p
          progress = p
          print "PROGRESS: #{progress}\n"
          $defout.flush
        end
      end
    end
  end
  raise MediaFormatException if $?.exitstatus != 0
end


greets
ragdog

ragdog

My problem is solved as far as to the calculation

calc 00:03:30.3 in millisecond (210.4)
can your help me please

greets

Tedd

00*(60*60) + 03*(60) + 30.3 = 210.3
No snowflake in an avalanche feels responsible.

ragdog

thanks!! i how to do this!

I just do not know how I should be solved in masm32


H = 00
    M = 3
    S = 303
    mov eax, H*(60*60) + M*(60) + S


   invoke wsprintf,addr hBuffer,CTEXT ("%02d"),eax
invoke MessageBox,0,addr hBuffer,0,MB_OK


sorry for my english

Tedd

Okay, so you'll actually want the time in milliseconds, rather than seconds, so it's 210300 (so you don't need to play with decimal fractions.)

msec = H*(60*60*1000) + M*(60*1000) + S*1000 + ms = (  (H*60 + M)*60 + S  )*1000 + ms

Remember the MUL instruction?

I'll start you off..

mov eax,H
mov ecx,60
mul ecx        ;eax = H*60
add eax,M      ;eax = H*60 + M
mul ecx        ;eax = (H*60 + M)*60
    :
    :
No snowflake in an avalanche feels responsible.

ragdog

thanks for your help

here is my source


Time2Ms proc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
      h dd 0
      m dd 0
      s dd 0
   
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
;00:03:30.3
;00*(60*60) + 03*(60) + 30.3 = 210.3
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    H = 0
    M = 03
    S = 30
   
    xor ebx, ebx
    xor eax, eax
    xor edx, edx
   
    mov edx, 60*60
    mov eax, H 
    mul edx     
   push ebx
    mov ebx,eax
   
   
    mov edx, 60
    mov eax, M   
    mul edx       
   push eax
    add ebx,eax
    add ebx,S
   
invoke wsprintf,addr hBuffer,CTEXT ("%02d"),ebx
    pop eax
    pop ebx
invoke MessageBox,0,addr hBuffer,0,MB_OK
ret
Time2Ms endp


   
Works well with the comma if parsing the time (00:03:30.3)

greets
ragdog