Patch title: Release 94 bulk changes
Abstract:
File: /pliant/linux/multimedia/liblame.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"

constant liblame (shunt (file_query "file:/lib/libmp3lame.so" standard)=defined or (file_query "file:/usr/lib/libmp3lame.so" standard)=defined "libmp3lame.so" (file_query "file:/usr/lib/libmp3lame.so.0" standard)=defined "libmp3lame.so.0" "libmp3lame.so")


type WavSignature
  field (Array Char 4) riff
  field uInt32_li length
  field (Array Char 4) wave
 
type WavFormat
  field (Array Char 4) fmt_
  field uInt32_li length
  field uInt16_li version
  field uInt16_li channel
  field uInt32_li rate
  field uInt32_li bytes_per_second
  field uInt16_li bytes_per_sample
  field uInt16_li bits_per_sample
 
type WavChunk
  field (Array Char 4) data
  field uInt32_li length

type WavHeader
  field WavSignature signature
  field WavFormat format
  field WavChunk chunk


function lame_init -> handle
  arg Address handle
  external liblame "lame_init"

function lame_set_in_samplerate handle hz
  arg Address handle ; arg Int hz
  external liblame "lame_set_in_samplerate"

function lame_set_brate handle kbps
  arg Address handle ; arg Int kbps
  external liblame "lame_set_brate"

function lame_set_quality handle quality # 0=best, 9=worst
  arg Address handle ; arg Int quality
  external liblame "lame_set_quality"

function lame_set_VBR handle vbr_mode
  arg Address handle ; arg Int vbr_mode # 0=off, 3=abr, 4=VBR(new)
  external liblame "lame_set_VBR"

function lame_set_VBR_q handle quality # 0=highest, 9=lowest
  arg Address handle ; arg Int quality
  external liblame "lame_set_VBR_q"

function lame_set_VBR_mean_bitrate_kbps handle kbps
  arg Address handle ; arg Int kbps
  external liblame "lame_set_VBR_mean_bitrate_kbps"

function lame_set_VBR_min_bitrate_kbps handle kbps
  arg Address handle ; arg Int kbps
  external liblame "lame_set_VBR_min_bitrate_kbps"

function lame_set_VBR_max_bitrate_kbps handle kbps
  arg Address handle ; arg Int kbps
  external liblame "lame_set_VBR_max_bitrate_kbps"

function lame_init_params handle -> err
  arg Address handle ; arg Int err
  external liblame "lame_init_params"

function lame_encode_buffer_interleaved handle pcm num_samples buffer size -> count
  arg Address handle ; arg Address pcm ; arg Int num_samples ; arg Address buffer ; arg Int size count
  external liblame "lame_encode_buffer_interleaved"

function lame_encode_flush handle buffer size -> count
  arg Address handle ; arg Address buffer ; arg Int size count
  external liblame "lame_encode_flush"

function lame_close handle
  arg Address handle
  external liblame "lame_close"


function mp3_encode src dest kbps
  arg Str src dest ; arg Int kbps
  (var Stream s) open src in+safe
  s raw_read addressof:(var WavHeader hdr) WavHeader:size
  (var Stream d) open dest out+safe
  var Address handle := lame_init
  lame_set_in_samplerate handle hdr:format:rate
  lame_set_brate handle kbps
  var Int err := lame_init_params handle
  if err<>0
    console "lame init params error " err eol
    return
  var Address buf := memory_allocate 8192 null
  while not s:atend
    s read_available (var Address adr) (var Int size)
    # console "lame compress " size " -> " size\4 "*4+" size%4 eol
    var Int count := lame_encode_buffer_interleaved handle adr size\4 buf 8192
    if count<0
      console "lame error " count eol
      return
    d raw_write buf count
  var Int count := lame_encode_flush handle buf 8192
  if count<0
    console "lame error " count eol
    return
  d raw_write buf count
  lame_close handle
  memory_free buf

export mp3_encode