Patch title: Release 96 bulk changes
Abstract:
File: /pliant/linux/multimedia/libmpeg2.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/pml/io.pli"
module "/pliant/language/type/misc/blob.pli"


function libmpeg2_play filename options start late sem
  arg Str filename options ; arg DateTime start ; arg_rw Flo
  (var Stream input) open filename in
  var Address decoder := mpeg2_init
  var Pointer:mpeg2_info info :> mpeg2_info decoder
  var CBool continue := true
  var Float hz := options option "hz" Float 25
  var Int counter := 0
  var CBool multiplexed := options option "multiplexed"
  var Int scale_x := options option "scale_x" Int (options o
  var Int scale_y := options option "scale_y" Int (options o
  while continue
    var Int state := mpeg2_parse decoder
    if state=STATE_BUFFER
      var Address adr ; var Int size
      if multiplexed
        if (input iraw (var Float ts))
          void
        if (input iraw (var Blob blob))
          adr := blob content
          size := blob size
      else
        input read_available adr size
      mpeg2_buffer decoder adr (adr translate Byte size)
      if size=0
        continue := false
    eif state=STATE_SEQUENCE
      # console "sequence" eol
      var Link:ConsolePrototype video :> graphic_console "x1
      var Int video_x := info:sequence width
      var Int video_y := info:sequence height
      # console "video " video_x " x " video_y eol
      # console "frame period is " info:sequence:frame_perio
      # console "screen gamut is " video:query:gamut:name eo
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/pml/io.pli"
module "/pliant/language/type/misc/blob.pli"


function libmpeg2_play filename options start late sem
  arg Str filename options ; arg DateTime start ; arg_rw Flo
  (var Stream input) open filename in
  var Address decoder := mpeg2_init
  var Pointer:mpeg2_info info :> mpeg2_info decoder
  var CBool continue := true
  var Float hz := options option "hz" Float 25
  var Int counter := 0
  var CBool multiplexed := options option "multiplexed"
  var Int scale_x := options option "scale_x" Int (options o
  var Int scale_y := options option "scale_y" Int (options o
  while continue
    var Int state := mpeg2_parse decoder
    if state=STATE_BUFFER
      var Address adr ; var Int size
      if multiplexed
        if (input iraw (var Float ts))
          void
        if (input iraw (var Blob blob))
          adr := blob content
          size := blob size
      else
        input read_available adr size
      mpeg2_buffer decoder adr (adr translate Byte size)
      if size=0
        continue := false
    eif state=STATE_SEQUENCE
      # console "sequence" eol
      var Link:ConsolePrototype video :> graphic_console "x1
      var Int video_x := info:sequence width
      var Int video_y := info:sequence height
      # console "video " video_x " x " video_y eol
      # console "frame period is " info:sequence:frame_perio
      # console "screen gamut is " video:query:gamut:name eo
      var ImagePrototype proto := image_prototype 0 0 1 1 vi
      var ImagePrototype proto := image_prototype 0 0 1 1 video_x*scale_x video_y*scale_y color_gamut:"rgb"
      if (video open proto "")=failure
        console "failed to open video hardware" eol
        return
      var Link:ImagePixmap pixmap :> new ImagePixmap
      pixmap setup proto ""
      mpeg2_convert decoder (mpeg2convert_rgb (shunt (proto:
    eif state=STATE_GOP
      # console "gop" eol
      void
    eif state=STATE_SLICE or state=STATE_END
      var Float wait := start:seconds+counter/hz-datetime:se
      sem request ; wait += late ; sem release
      if wait>(-1/hz)
        if (exists info:display_fbuf)
          for (var Int y) 0 pixmap:size_y-1
            var Address src := info:display_fbuf:buf:0 trans
            var Address dest := pixmap pixel 0 y
            if scale_x=1
              memory_copy src dest pixmap:line_size
            eif y%scale_y<>0
              src := dest translate Byte -(pixmap:line_size)
              memory_copy src dest pixmap:line_size
            else
              var Int ps := pixmap pixel_size
              for (var Int i) 0 video_x-1
                for (var Int j) 0 scale_x-1
                  dest map uInt32 := src map uInt32
                  dest := dest translate Byte ps
                src := src translate Byte ps
        var Float wait := start:seconds+counter/hz-datetime:
        sem request ; wait += late ; sem release
        if wait>0
          sleep wait
        video paint pixmap 0 0
      if state=STATE_END
        continue := false
      counter += 1
    eif state=STATE_INVALID
      console "unexpected mpeg2 state " state eol
      continue := false
  mpeg2_close decoder


      if (video open proto "")=failure
        console "failed to open video hardware" eol
        return
      var Link:ImagePixmap pixmap :> new ImagePixmap
      pixmap setup proto ""
      mpeg2_convert decoder (mpeg2convert_rgb (shunt (proto:
    eif state=STATE_GOP
      # console "gop" eol
      void
    eif state=STATE_SLICE or state=STATE_END
      var Float wait := start:seconds+counter/hz-datetime:se
      sem request ; wait += late ; sem release
      if wait>(-1/hz)
        if (exists info:display_fbuf)
          for (var Int y) 0 pixmap:size_y-1
            var Address src := info:display_fbuf:buf:0 trans
            var Address dest := pixmap pixel 0 y
            if scale_x=1
              memory_copy src dest pixmap:line_size
            eif y%scale_y<>0
              src := dest translate Byte -(pixmap:line_size)
              memory_copy src dest pixmap:line_size
            else
              var Int ps := pixmap pixel_size
              for (var Int i) 0 video_x-1
                for (var Int j) 0 scale_x-1
                  dest map uInt32 := src map uInt32
                  dest := dest translate Byte ps
                src := src translate Byte ps
        var Float wait := start:seconds+counter/hz-datetime:
        sem request ; wait += late ; sem release
        if wait>0
          sleep wait
        video paint pixmap 0 0
      if state=STATE_END
        continue := false
      counter += 1
    eif state=STATE_INVALID
      console "unexpected mpeg2 state " state eol
      continue := false
  mpeg2_close decoder