rdvdijk/lame

View on GitHub
lib/lame/ffi/functions.rb

Summary

Maintainability
C
1 day
Test Coverage
module LAME
  module Functions

    def self.included(base)
      base.class_eval do

        typedef :pointer, :global_flags

        # These `attach_function` declarations are in the order of lame.h:

        # initialization
        attach_function :lame_init, [], :global_flags

        # global flags
        attach_function :lame_set_num_samples,        [:global_flags, :ulong],     :int
        attach_function :lame_get_num_samples,        [:global_flags],             :ulong
        attach_function :lame_set_in_samplerate,      [:global_flags, :int],       :int
        attach_function :lame_get_in_samplerate,      [:global_flags],             :int
        attach_function :lame_set_num_channels,       [:global_flags, :int],       :int
        attach_function :lame_get_num_channels,       [:global_flags],             :int
        attach_function :lame_set_scale,              [:global_flags, :float],     :int
        attach_function :lame_get_scale,              [:global_flags],             :float
        attach_function :lame_set_scale_left,         [:global_flags, :float],     :int
        attach_function :lame_get_scale_left,         [:global_flags],             :float
        attach_function :lame_set_scale_right,        [:global_flags, :float],     :int
        attach_function :lame_get_scale_right,        [:global_flags],             :float
        attach_function :lame_set_out_samplerate,     [:global_flags, :int],       :int
        attach_function :lame_get_out_samplerate,     [:global_flags],             :int
        attach_function :lame_set_analysis,           [:global_flags, :int],       :int
        attach_function :lame_get_analysis,           [:global_flags],             :int
        attach_function :lame_set_bWriteVbrTag,       [:global_flags, :int],       :int
        attach_function :lame_get_bWriteVbrTag,       [:global_flags],             :int
        attach_function :lame_set_decode_only,        [:global_flags, :int],       :int
        attach_function :lame_get_decode_only,        [:global_flags],             :int
        attach_function :lame_set_quality,            [:global_flags, :int],       :int
        attach_function :lame_get_quality,            [:global_flags],             :int
        attach_function :lame_set_mode,               [:global_flags, :mpeg_mode], :int
        attach_function :lame_get_mode,               [:global_flags],             :mpeg_mode
        attach_function :lame_set_force_ms,           [:global_flags, :int],       :int
        attach_function :lame_get_force_ms,           [:global_flags],             :int
        attach_function :lame_set_free_format,        [:global_flags, :int],       :int
        attach_function :lame_get_free_format,        [:global_flags],             :int
        attach_function :lame_set_findReplayGain,     [:global_flags, :int],       :int
        attach_function :lame_get_findReplayGain,     [:global_flags],             :int
        attach_function :lame_set_decode_on_the_fly,  [:global_flags, :int],       :int
        attach_function :lame_get_decode_on_the_fly,  [:global_flags],             :int

        # counters for gaplass encoding
        attach_function :lame_set_nogap_total,        [:global_flags, :int],    :int
        attach_function :lame_get_nogap_total,        [:global_flags],          :int
        attach_function :lame_set_nogap_currentindex, [:global_flags, :int],    :int
        attach_function :lame_get_nogap_currentindex, [:global_flags],          :int

        # the :pointer is a va_list, FFI doesn't support that in callbacks..
        callback :log_function, [:string, :pointer], :void
        attach_function :lame_set_errorf,             [:global_flags, :log_function],   :int
        attach_function :lame_set_debugf,             [:global_flags, :log_function],   :int
        attach_function :lame_set_msgf,               [:global_flags, :log_function],   :int

        attach_function :lame_set_brate,              [:global_flags, :int],         :int
        attach_function :lame_get_brate,              [:global_flags],               :int
        attach_function :lame_set_compression_ratio,  [:global_flags, :int],         :int
        attach_function :lame_get_compression_ratio,  [:global_flags],               :int
        attach_function :lame_set_preset,             [:global_flags, :preset_mode], :preset_mode
        attach_function :lame_set_asm_optimizations,  [:global_flags, :asm_optimizations, :int], :asm_optimizations
        attach_function :lame_set_copyright,          [:global_flags, :int],         :int
        attach_function :lame_get_copyright,          [:global_flags],               :int
        attach_function :lame_set_original,           [:global_flags, :int],         :int
        attach_function :lame_get_original,           [:global_flags],               :int
        attach_function :lame_set_error_protection,   [:global_flags, :int],         :int
        attach_function :lame_get_error_protection,   [:global_flags],               :int
        attach_function :lame_set_extension,          [:global_flags, :int],         :int
        attach_function :lame_get_extension,          [:global_flags],               :int
        attach_function :lame_set_strict_ISO,         [:global_flags, :int],         :int
        attach_function :lame_get_strict_ISO,         [:global_flags],               :int

        # quantization/noise shaping
        attach_function :lame_set_disable_reservoir, [:global_flags, :int],    :int
        attach_function :lame_get_disable_reservoir, [:global_flags],          :int
        attach_function :lame_set_quant_comp,        [:global_flags, :int],    :int
        attach_function :lame_get_quant_comp,        [:global_flags],          :int
        attach_function :lame_set_quant_comp_short,  [:global_flags, :int],    :int
        attach_function :lame_get_quant_comp_short,  [:global_flags],          :int
        attach_function :lame_set_experimentalX,     [:global_flags, :int],    :int
        attach_function :lame_get_experimentalX,     [:global_flags],          :int
        attach_function :lame_set_experimentalY,     [:global_flags, :int],    :int
        attach_function :lame_get_experimentalY,     [:global_flags],          :int
        attach_function :lame_set_experimentalZ,     [:global_flags, :int],    :int
        attach_function :lame_get_experimentalZ,     [:global_flags],          :int
        attach_function :lame_set_exp_nspsytune,     [:global_flags, :int],    :int
        attach_function :lame_get_exp_nspsytune,     [:global_flags],          :int
        attach_function :lame_set_msfix,             [:global_flags, :double], :void
        attach_function :lame_get_msfix,             [:global_flags],          :float

        # VBR
        attach_function :lame_set_VBR,                   [:global_flags, :vbr_mode], :int
        attach_function :lame_get_VBR,                   [:global_flags],            :vbr_mode
        attach_function :lame_set_VBR_q,                 [:global_flags, :int],      :int
        attach_function :lame_get_VBR_q,                 [:global_flags],            :int
        attach_function :lame_set_VBR_quality,           [:global_flags, :float],    :int
        attach_function :lame_get_VBR_quality,           [:global_flags],            :float
        attach_function :lame_set_VBR_mean_bitrate_kbps, [:global_flags, :int],      :int
        attach_function :lame_get_VBR_mean_bitrate_kbps, [:global_flags],            :int
        attach_function :lame_set_VBR_min_bitrate_kbps,  [:global_flags, :int],      :int
        attach_function :lame_get_VBR_min_bitrate_kbps,  [:global_flags],            :int
        attach_function :lame_set_VBR_max_bitrate_kbps,  [:global_flags, :int],      :int
        attach_function :lame_get_VBR_max_bitrate_kbps,  [:global_flags],            :int
        attach_function :lame_set_VBR_hard_min,          [:global_flags, :int],      :int
        attach_function :lame_get_VBR_hard_min,          [:global_flags],            :int

        # Filtering control
        attach_function :lame_set_lowpassfreq,   [:global_flags, :int], :int
        attach_function :lame_get_lowpassfreq,   [:global_flags],       :int
        attach_function :lame_set_lowpasswidth,  [:global_flags, :int], :int
        attach_function :lame_get_lowpasswidth,  [:global_flags],       :int
        attach_function :lame_set_highpassfreq,  [:global_flags, :int], :int
        attach_function :lame_get_highpassfreq,  [:global_flags],       :int
        attach_function :lame_set_highpasswidth, [:global_flags, :int], :int
        attach_function :lame_get_highpasswidth, [:global_flags],       :int

        # psycho acoustics ("absolute threshold of hearing")
        attach_function :lame_set_ATHonly,           [:global_flags, :int],   :int
        attach_function :lame_get_ATHonly,           [:global_flags],         :int
        attach_function :lame_set_ATHshort,          [:global_flags, :int],   :int
        attach_function :lame_get_ATHshort,          [:global_flags],         :int
        attach_function :lame_set_noATH,             [:global_flags, :int],   :int
        attach_function :lame_get_noATH,             [:global_flags],         :int
        attach_function :lame_set_ATHtype,           [:global_flags, :int],   :int
        attach_function :lame_get_ATHtype,           [:global_flags],         :int
        attach_function :lame_set_ATHlower,          [:global_flags, :float], :int
        attach_function :lame_get_ATHlower,          [:global_flags],         :float
        attach_function :lame_set_athaa_type,        [:global_flags, :int],   :int
        attach_function :lame_get_athaa_type,        [:global_flags],         :int
        attach_function :lame_set_athaa_sensitivity, [:global_flags, :float], :int
        attach_function :lame_get_athaa_sensitivity, [:global_flags],         :float

        # misc
        attach_function :lame_set_allow_diff_short,   [:global_flags, :int],   :int
        attach_function :lame_get_allow_diff_short,   [:global_flags],         :int
        attach_function :lame_set_useTemporal,        [:global_flags, :int],   :int
        attach_function :lame_get_useTemporal,        [:global_flags],         :int
        attach_function :lame_set_interChRatio,       [:global_flags, :float], :int
        attach_function :lame_get_interChRatio,       [:global_flags],         :float
        attach_function :lame_set_no_short_blocks,    [:global_flags, :int],   :int
        attach_function :lame_get_no_short_blocks,    [:global_flags],         :int
        attach_function :lame_set_force_short_blocks, [:global_flags, :int],   :int
        attach_function :lame_get_force_short_blocks, [:global_flags],         :int
        attach_function :lame_set_emphasis,           [:global_flags, :int],   :int
        attach_function :lame_get_emphasis,           [:global_flags],         :int

        # internal variables
        attach_function :lame_get_version,              [:global_flags], :int
        attach_function :lame_get_encoder_delay,        [:global_flags], :int
        attach_function :lame_get_encoder_padding,      [:global_flags], :int
        attach_function :lame_get_framesize,            [:global_flags], :int
        attach_function :lame_get_mf_samples_to_encode, [:global_flags], :int
        attach_function :lame_get_size_mp3buffer,       [:global_flags], :int
        attach_function :lame_get_frameNum,             [:global_flags], :int
        attach_function :lame_get_totalframes,          [:global_flags], :int
        attach_function :lame_get_RadioGain,            [:global_flags], :int
        attach_function :lame_get_AudiophileGain,       [:global_flags], :int
        attach_function :lame_get_PeakSample,           [:global_flags], :float
        attach_function :lame_get_noclipGainChange,     [:global_flags], :int
        attach_function :lame_get_noclipScale,          [:global_flags], :float

        # initializing parameters
        attach_function :lame_init_params, [:global_flags], :int

        # version
        attach_function :get_lame_version,            [], :string
        attach_function :get_lame_short_version,      [], :string
        attach_function :get_lame_very_short_version, [], :string
        attach_function :get_psy_version,             [], :string
        attach_function :get_lame_url,                [], :string
        attach_function :get_lame_os_bitness,         [], :string

        attach_function :get_lame_version_numerical,  [:global_flags], FFI::Version.by_value

        # TODO: test when we have implemented lame_set_msgf
        attach_function :lame_print_config,    [:global_flags], :void
        attach_function :lame_print_internals, [:global_flags], :void

        # encoding
        attach_function :lame_encode_buffer,                         [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_interleaved,             [:global_flags, :buffer_in,             :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_float,                   [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_ieee_float,              [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_interleaved_ieee_float,  [:global_flags, :buffer_in,             :int, :buffer_out, :int],           :int
        attach_function :lame_encode_buffer_ieee_double,             [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_interleaved_ieee_double, [:global_flags, :buffer_in,             :int, :buffer_out, :int],           :int
        attach_function :lame_encode_buffer_long,                    [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_long2,                   [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int
        attach_function :lame_encode_buffer_int,                     [:global_flags, :buffer_in, :buffer_in, :int, :buffer_out, :int], :int

        # flushing
        attach_function :lame_encode_flush,       [:global_flags, :pointer, :int], :int
        attach_function :lame_encode_flush_nogap, [:global_flags, :pointer, :int], :int

        # bitstream
        attach_function :lame_init_bitstream, [:global_flags], :int

        # TODO: statistics (multi-dimensional arrays..)
        attach_function :lame_bitrate_hist,             [:global_flags, :pointer], :void
        attach_function :lame_bitrate_kbps,             [:global_flags, :pointer], :void
        attach_function :lame_stereo_mode_hist,         [:global_flags, :pointer], :void
        # attach_function :lame_bitrate_stereo_mode_hist, [:global_flags, :pointer], :void
        attach_function :lame_block_type_hist,          [:global_flags, :pointer], :void
        # attach_function :lame_bitrate_block_type_hist,  [:global_flags, :pointer], :void

        # NOTE: needs a file pointer, will be deprecated (?)
        # attach_function :lame_mp3_tags_fid, [:pointer], :void

        attach_function :lame_get_lametag_frame, [:global_flags, :buffer_out, :size_t], :size_t

        # closing
        attach_function :lame_close, [:global_flags], :int

        # decoding
        typedef :pointer, :decode_flags
        typedef :pointer, :mp3_data

        attach_function :hip_decode_init, [], :decode_flags
        attach_function :hip_decode_exit, [:decode_flags], :int
        attach_function :hip_set_errorf,  [:decode_flags, :log_function], :void
        attach_function :hip_set_debugf,  [:decode_flags, :log_function], :void
        attach_function :hip_set_msgf,    [:decode_flags, :log_function], :void

        attach_function :hip_decode,           [:decode_flags, :buffer_in, :size_t, :buffer_out, :buffer_out], :int
        attach_function :hip_decode_headers,   [:decode_flags, :buffer_in, :size_t, :buffer_out, :buffer_out, :mp3_data], :int
        attach_function :hip_decode1,          [:decode_flags, :buffer_in, :size_t, :buffer_out, :buffer_out], :int
        attach_function :hip_decode1_headers,  [:decode_flags, :buffer_in, :size_t, :buffer_out, :buffer_out, :mp3_data], :int
        attach_function :hip_decode1_headersB, [:decode_flags, :buffer_in, :size_t, :buffer_out, :buffer_out, :mp3_data, :pointer, :pointer], :int

        # id3
        callback :genre_callback, [:int, :string, :pointer], :void
        attach_function :id3tag_genre_list, [:genre_callback, :pointer], :void
        attach_function :id3tag_init,                     [:global_flags], :void
        attach_function :id3tag_add_v2,                   [:global_flags], :void
        attach_function :id3tag_v1_only,                  [:global_flags], :void
        attach_function :id3tag_v2_only,                  [:global_flags], :void
        attach_function :id3tag_space_v1,                 [:global_flags], :void
        attach_function :id3tag_pad_v2,                   [:global_flags], :void
        attach_function :id3tag_set_pad,                  [:global_flags, :size_t], :void
        attach_function :id3tag_set_title,                [:global_flags, :pointer], :void
        attach_function :id3tag_set_artist,               [:global_flags, :pointer], :void
        attach_function :id3tag_set_album,                [:global_flags, :pointer], :void
        attach_function :id3tag_set_year,                 [:global_flags, :pointer], :void
        attach_function :id3tag_set_comment,              [:global_flags, :pointer], :void
        attach_function :id3tag_set_track,                [:global_flags, :pointer], :int
        attach_function :id3tag_set_genre,                [:global_flags, :pointer], :int
        attach_function :id3tag_set_fieldvalue,           [:global_flags, :pointer], :int
        attach_function :id3tag_set_albumart,             [:global_flags, :buffer_in, :size_t], :int
        attach_function :lame_get_id3v1_tag,              [:global_flags, :buffer_out, :size_t], :size_t
        attach_function :lame_get_id3v2_tag,              [:global_flags, :buffer_out, :size_t], :size_t
        attach_function :lame_set_write_id3tag_automatic, [:global_flags, :int], :void
        attach_function :lame_get_write_id3tag_automatic, [:global_flags], :int
        # experimental id3:
        # attach_function :id3tag_set_textinfo_latin1,      [:global_flags, :string, :string], :int
        # attach_function :id3tag_set_comment_latin1,       [:global_flags, :string, :string, :string], :int
        attach_function :id3tag_set_fieldvalue_utf16,     [:global_flags, :pointer], :int
        # attach_function :id3tag_set_textinfo_utf16,       [:global_flags, :string, :pointer], :int
        # attach_function :id3tag_set_comment_utf16,        [:global_flags, :string, :pointer, :pointer], :int

        # tables
        attach_function :lame_get_bitrate,    [:int, :int], :int
        attach_function :lame_get_samplerate, [:int, :int], :int

      end
    end

  end
end