Patch title: Release 94 bulk changes
Abstract:
File: /pliant/linux/multimedia/play.pli
Key:
    Removed line
    Added line
# pliant 'precompile /binary/rip.dump module /pliant/graphic/image/rip.pli' module /pliant/linux/multimedia/play.pli command 'play2 "file:/tmp/da1" "audio 96 video 164 video_time_shift -2 scale_x 1 scale_y 1 seek 0"'

module "/pliant/language/unsafe.pli"
module "mpegdemux.pli"
module "libmpeg2.pli"
module "libmad.pli"
# module "/pliant/language/stream/pipe.pli"
module "/pliant/language/stream/loopback.pli"
module "/pliant/language/data/id.pli"


function play2 filename options
  arg Str filename ; arg Str options
  constant multiplexed "" # "multiplexed"
  var DateTime start := datetime ; var Float late := 0 ; var FastSem sem
  var Int bs := 2^24
  # stream_pipe (var Str audio_in) (var Str audio_out)
  var Str id := generate_id ; var Str audio_in := "[dq]loopback:/client/"+id+"[dq] buffer_size "+string:bs ; var Str audio_out := "[dq]loopback:/server/"+id+"[dq] buffer_size "+string:bs
  thread
    share late sem
    libmad_play audio_in multiplexed+" "+options start late sem
    console "audio end" eol
  # stream_pipe (var Str video_in) (var Str video_out)
  var Str id := generate_id ; var Str video_in := "[dq]loopback:/client/"+id+"[dq] buffer_size "+string:bs ; var Str video_out := "[dq]loopback:/server/"+id+"[dq] buffer_size "+string:bs
  start seconds -= options option "video_time_shift" Float 0
  thread
    share late sem
    libmpeg2_play video_in multiplexed+" "+options start late sem
    console "video end" eol
  console "begin" eol
  mpeg_demux2 filename "drop:" multiplexed+" "+options+" audio_file "+string:audio_out+" video_file "+string:video_out
  console "end" eol

function play2 filename
  arg Str filename
  play2 filename ""

export play2