

                       RequestLinear v1.4  -  HELP FILE  (20201020)


GENERAL INFO:


     * RequestLinear supports all colorspaces

       A little diagram to show downstream vs upstream in a script:

               UpstreamFilter()
               RequestLinear()
               DownstreamFilter()

       RequestLinear makes sure that all requests for frames from the filter
    downstream are turned into linear requests for frames from the filter
    upstream of it.  This can be useful when you want to use a filter that
    requests frames non-linearly in combination with a filter that requires
    linear requests.

       For example, if the filter downstream requests frame 0 and then requests
    frame 5, RequestLinear would get the request for frame 5 and then request
    frames 1, 2, 3, 4, and then 5 from the filter upstream.

       It is possible to set a maximum number of frames for the gap that it
    will fill and to specify how many frames it should cache.     


   syntax=>

        RequestLinear(int rlim, int clim, int elim, bool rall, bool debug)



PARAMETERS:


     rlim -

         If the current frame request if greater than the last delivered frame
         and the difference between the two is less than or equal to rlim, then
         all frames between the last request and the current request will be
         requested.  If the current request is less than or equal to the 
         last request then the distance is measured from 0 to the current
         request. rlim must be >= 0.

         Default:  50  (int)


     clim -

         Sets the number of frames that the filter should cache.  Frames that
         are in the cache can be delivered without having to request any frames
         from upstream.  clim must be >= 0.

         Default:  10  (int)


     elim -

         If the current frame ends up being requested without the previous frames
         being requested (due to rlim not being large enough, clim not being large
         enough, etc...), elim sets the number of frames prior to the current frame
         to request in linear order prior to requesting the current frame.

         Default:  5  (int)


     rall -

         If true, it is the same as if rlim is set to infinity.  If false,
         it does nothing.

         Default:  false  (bool)


     debug -

         Will show which frames are being requested from upstream and
         downstream.  Use the utility "Debugview" from sysinternals to
         view the output.

         Default:  false  (bool)



EXAMPLE SCENARIOS:


   1.) Downstream filter has requested every frame from 0 to 20 and then
       requests frame 25.

           if rlim >= 5 or rall = true, then RequestLinear will request frames
              21 through 25 from the upstream filter

           else if elim > 0, then all frames from 25-elim to 25 will be requested

           else, frame 25 is requested by itself


   2.) Downstream filter has requested every frame from 0 to 50 and then
       requests frame 10.

           if clim >= 40, then frame 10 will be returned from the cache w/o
              making any upstream requests

           else if rlim >= 10 or rall = true, then frames 0 through 10 will be
              requested from the upstream filter

           else if elim > 0, then all frames from 10-elim to 10 will be requested

           else, frame 10 will be requested by itself


   3.) Given RequestLinear(50,10,5) and last requested frame = 300 (assume linear
       access so far)

           current request: frame 320
           -> linear request of all frames 301, ..., 320   (due to rlim)

           current request: frame 295
           -> read from cache   (due to clim)

           current request: frame 400
           -> linear request 395,396,397,398,399,400   (due to elim)

           current request: frame 230
           -> linear request 225,226,227,228,229,230   (due to elim)



CHANGE LIST:

   v1.4   (20201020)

      - fix: initial large frame number difference out of order frame requests
             e.g. 24, 25, 26, 6 (caused by heavy multithreading) could result in
             internal error - frame not in cache
             

   v1.3   (20200611)

      - filter reports MT_SERIALIZED mt mode for Avisynth+

   v1.2   (11/21/2007)

      - added elim parameter


   v1.1 - (4/09/2006)

      - fixed not testing if n <= rlim if the current request was <=
           to the last request (it was only testing if rall=true)

   v1.0 - (3/23/2006)

      - initial release



contact:   forum.doom9.org  nick = tritical  or  email:  kes25c@mizzou.edu
