anchor.diff:  (in-package #:cl-video)
   
   (setf *print-circle* t)
  -
  -(define-constant +avif-must-use-index+ #x20) 
  -
  -(define-constant  +pcmi-uncompressed+ 1)
  -
  -(define-constant +avi-dht+
  -    #(#x01 #xA2 
  -      #x00 #x00 #x01 #x05 #x01 #x01 #x01 #x01 #x01 #x01 #x00 #x00 #x00 #x00 #x00 
  -      #x00 #x00 #x00 #x01 #x02 #x03 #x04 #x05 #x06 #x07 #x08 #x09 #x0A #x0B #x01 
  -      #x00 #x03 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x00 #x00 #x00 #x00 
  - 
  -      #x00 #x00 #x01 #x02 #x03 #x04 #x05 #x06 #x07 #x08 #x09 #x0A #x0B #x10 #x00 
  -      #x02 #x01 #x03 #x03 #x02 #x04 #x03 #x05 #x05 #x04 #x04 #x00 #x00 #x01 #x7D 
  -      #x01 #x02 #x03 #x00 #x04 #x11 #x05 #x12 #x21 #x31 #x41 #x06 #x13 #x51 #x61 
  -      #x07 #x22 #x71 #x14 #x32 #x81 #x91 #xA1 #x08 #x23 #x42 #xB1 #xC1 #x15 #x52 
  -      #xD1 #xF0 #x24 #x33 #x62 #x72 #x82 #x09 #x0A #x16 #x17 #x18 #x19 #x1A #x25 
  -      #x26 #x27 #x28 #x29 #x2A #x34 #x35 #x36 #x37 #x38 #x39 #x3A #x43 #x44 #x45 
  -      #x46 #x47 #x48 #x49 #x4A #x53 #x54 #x55 #x56 #x57 #x58 #x59 #x5A #x63 #x64 
  - 
  -      #x65 #x66 #x67 #x68 #x69 #x6A #x73 #x74 #x75 #x76 #x77 #x78 #x79 #x7A #x83 
  -      #x84 #x85 #x86 #x87 #x88 #x89 #x8A #x92 #x93 #x94 #x95 #x96 #x97 #x98 #x99 
  -      #x9A #xA2 #xA3 #xA4 #xA5 #xA6 #xA7 #xA8 #xA9 #xAA #xB2 #xB3 #xB4 #xB5 #xB6 
  -      #xB7 #xB8 #xB9 #xBA #xC2 #xC3 #xC4 #xC5 #xC6 #xC7 #xC8 #xC9 #xCA #xD2 #xD3 
  -      #xD4 #xD5 #xD6 #xD7 #xD8 #xD9 #xDA #xE1 #xE2 #xE3 #xE4 #xE5 #xE6 #xE7 #xE8 
  -      #xE9 #xEA #xF1 #xF2 #xF3 #xF4 #xF5 #xF6 #xF7 #xF8 #xF9 #xFA #x11 #x00 #x02 
  -      #x01 #x02 #x04 #x04 #x03 #x04 #x07 #x05 #x04 #x04 #x00 #x01 #x02 #x77 #x00 
  - 
  -      #x01 #x02 #x03 #x11 #x04 #x05 #x21 #x31 #x06 #x12 #x41 #x51 #x07 #x61 #x71 
  -      #x13 #x22 #x32 #x81 #x08 #x14 #x42 #x91 #xA1 #xB1 #xC1 #x09 #x23 #x33 #x52 
  -      #xF0 #x15 #x62 #x72 #xD1 #x0A #x16 #x24 #x34 #xE1 #x25 #xF1 #x17 #x18 #x19 
  -      #x1A #x26 #x27 #x28 #x29 #x2A #x35 #x36 #x37 #x38 #x39 #x3A #x43 #x44 #x45 
  -      #x46 #x47 #x48 #x49 #x4A #x53 #x54 #x55 #x56 #x57 #x58 #x59 #x5A #x63 #x64 
  -      #x65 #x66 #x67 #x68 #x69 #x6A #x73 #x74 #x75 #x76 #x77 #x78 #x79 #x7A #x82 
  -      #x83 #x84 #x85 #x86 #x87 #x88 #x89 #x8A #x92 #x93 #x94 #x95 #x96 #x97 #x98 
  - 
  -      #x99 #x9A #xA2 #xA3 #xA4 #xA5 #xA6 #xA7 #xA8 #xA9 #xAA #xB2 #xB3 #xB4 #xB5 
  -      #xB6 #xB7 #xB8 #xB9 #xBA #xC2 #xC3 #xC4 #xC5 #xC6 #xC7 #xC8 #xC9 #xCA #xD2 
  -      #xD3 #xD4 #xD5 #xD6 #xD7 #xD8 #xD9 #xDA #xE2 #xE3 #xE4 #xE5 #xE6 #xE7 #xE8 
  -      #xE9 #xEA #xF2 #xF3 #xF4 #xF5 #xF6 #xF7 #xF8 #xF9 #xFA)
  -  :test #'equalp)
   
   (defvar *debug* nil)
   
  
positive.code:   ()
    (:report (lambda (condition stream)
  	     (declare (ignorable condition))
  	     (format stream "Unrecognized AVI file format"))))
  
  (define-condition unsupported-avi-file-format (media-decoder-error)
    ()
    (:report (lambda (condition stream)
  	     (declare (ignorable condition))
  	     (format stream "Unsupported AVI file format"))))
  
  (define-condition malformed-avi-file-format (media-decoder-error)
    ()
    (:report (lambda (condition stream)
  	     (declare (ignorable condition))
  	     (format stream "Malformed AVI file format"))))
  
  (defclass chunk ()
    ((lock :reader vacancy-lock :initform (bt:make-lock "vacancy"))
     (frame :accessor frame :initarg :frame)))
  
  (defclass stream-record ()
    ((fcc-type :accessor fcc-type)
     (fcc-handler :accessor fcc-handler)
     (flags :accessor flags)
     (priority :accessor priority)
     (language :accessor language)
     (initial-frames :accessor initial-frames)
     (scale :accessor scale)
     (rate :accessor rate)
     (start :accessor start)
     (stream-length :accessor stream-length)
     (suggested-buffer-size :accessor suggested-buffer-size)
     (quality :accessor quality)
     (sample-size :accessor sample-size)
     (frame :accessor frame)
     (index :accessor index)
     (chunk-queue :accessor chunk-queue)
     (rcursor :accessor rcursor)
     (wcursor :accessor wcursor)
     (final :accessor final :initform nil)
     (buffer :accessor buffer :type '(unsigned-byte 8))
     (avi :accessor avi :initarg :avi)))
  
  (defmethod initialize-ring ((rec stream-record) ring-length frame-size element-type)
    (setf (chunk-queue rec) (make-list ring-length))
  
negative.code: (defmethod stream-playback-stop ((rec stream-record))
    (bt:release-lock (vacancy-lock (car (rcursor rec)))))
  
  (defclass video-stream-record (stream-record)
    ())
  
  (defclass av-container ()
    ((filename :accessor filename :initarg :filename :initform nil)
     (player-callback :accessor player-callback :initarg :player-callback :initform nil) ;;called once all headers are processed
     (width :accessor width :initarg :width :initform 640)
     (height :accessor height :initarg :height :initform 480)
     (stream-records :accessor stream-records)
     (finish :accessor finish :initform nil)
     (pause :accessor pause :initform nil)
  