Skip to content

Instantly share code, notes, and snippets.

@mk0x9
Created October 22, 2012 08:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mk0x9/3930461 to your computer and use it in GitHub Desktop.
Save mk0x9/3930461 to your computer and use it in GitHub Desktop.
require 'ffi'
class ASS_Event < FFI::Struct
layout :start, :long_long,
:duration, :long_long,
:readOrder, :int,
:layer, :int,
:style, :int,
:name, :string,
:marginL, :int,
:marginR, :int,
:marginV, :int,
:effect, :string,
:text, :string,
:render_priv, :pointer
end
class ASS_Track < FFI::Struct
layout :n_styles, :int,
:max_styles, :int,
:n_events, :int,
:max_events, :int,
:styles, :pointer,
:events, :pointer
end
def cast_to_ass_track pointer
ASS_Track.new pointer
end
def cast_to_ass_event pointer
ASS_Event.new pointer
end
def get_event ass_track, num
cast_to_ass_event ass_track[:events] + ASS_Event.size * num
end
module Ass
extend FFI::Library
ffi_lib ['ass']
attach_function :ass_library_init, [], :pointer
attach_function :ass_read_file, [:pointer, :string, :uint], :pointer
attach_function :ass_free_track, [:pointer], :void
attach_function :ass_library_done, [:pointer], :void
end
ass_library = Ass.ass_library_init
ptr = Ass.ass_read_file ass_library, './sao16.ass', 0
ass_track = cast_to_ass_track ptr
puts "Lines: #{ass_track[:n_events]}"
for i in 0..ass_track[:n_events] - 1
puts (get_event ass_track, i)[:text]
end
Ass.ass_free_track ass_track
Ass.ass_library_done ass_library
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment