View Full Version : AviSynth 2.5.5 CVS Releases. [August 26th]
sh0dan
13th April 2004, 08:28
@Sigmatador: All built-in functions are defined in vdubmod - so vdubmod needs an update.
LigH
13th April 2004, 13:31
In contrary - AviSynth needs an interface to be queried for supported functions! ;)
At least, plugin DLLs shall provide an interface to query which functions they provide, as asked for some time ago. I hope you developers will set that on schedule for 3.0, to make the creation of AviSynth editors easier.
sh0dan
13th April 2004, 15:46
@LigH: I'll have a look at what's possible. It might be possible to use a similar scheme as the plugins have, but I don't know if it's possible.
Either way VdubMod needs an update :D
vion11
13th April 2004, 16:42
It might be possible to use a similar
scheme as the plugins have,
but I don't know if it's possible. Can you explain this scheme in simple words, please?
Does it include parameter layout?
sh0dan
13th April 2004, 22:54
A variable called $PluginFunctions$ is created containing the function names of all plugins separated by spaces.
For each plugin a variable called FUNCTIONNAME!Param$ (replace FUNCTIONNAME with the name of any function) contains the parameters (as defined in each plugin) as a string.
(Actually this is done every time env->AddFunction is called, so every plugin might add several functions)
Richard Berg
14th April 2004, 04:27
I committed a small change to avisynth.cpp that should allow internal functions to be exported as well. The list of functions is stored in $InternalFunctions$ and the parameter definitions are kept as $Plugin!NAME!Param$ for consistency's sake.
The code compiles but I can't do a link until this rather long encoding job is finished :)
Edit: for the VDubMod authors reading this, ImageSource is also missing from the new list
sh0dan
14th April 2004, 11:19
Great job Richard!!
Regarding ImageReader/ImageSource. I would very much like to change it, so:
Frame 0 output = start.
Length of clip = end - start.
I can see no reason for including a bunch of frames that just say "Out-of-Range" before reaching frame "start".
I've made the changes - just wanted your objections before I comitted it . :)
vion11
14th April 2004, 11:56
Originally posted by Richard Berg
The list of functions is stored in $InternalFunctions$
and the parameter definitions are kept as $Plugin!NAME!Param$
for consistency's sake. Sounds very good! :)
How can one access this information?
Through the API? I'd prefer it....
Richard Berg
14th April 2004, 12:19
Stickboy and I discussed the ImageReader thing here (http://forum.doom9.org/showthread.php?s=&threadid=72477). "To me it's more intuitive to have it such that when VDub requests the 50th frame, you get file50.png."
Stickboy doesn't mind writing a wrapper function, and I'm coming to realize I'm the only one in the world who uses ImageReader as above, so whether you commit the update or not nobody will be offended :cool:
vion -- it uses the same quasi-"API" as the current plugin info. Should be a relatively minor tweak in VDM.
vion11
14th April 2004, 12:58
What a pity. :(
Have thought of a small step for you and
a big step for avisynth.
Is it worthwhile waiting for 2.6 or 3.0 ?
Richard Berg
14th April 2004, 13:01
I'm sorry, I don't know what you're talking about :confused: If you have a suggestion that's possible in 2.xx we may try it.
vion11
14th April 2004, 13:10
Simply want to ask Avisynth which functions are available
and what parameter at which position accept what data type.
What you have done for vdm more general for other editors.
Richard Berg
14th April 2004, 13:42
Any editor that can call IScriptEnvironment::GetVar() has access to this information.
Richard Berg
14th April 2004, 14:35
Thought I'd mention, before someone asks: it is not possible to return filter/plugin default values in the current framework
sh0dan
17th June 2004, 17:13
June 17th binary posted, changelist:
- Added MMX optimizations to Overlay mode lighten+darken with opacity=1.0, with no mask.
- Removed overflow bug in ssrc upsampler.
- Fixed Audio cache crash if no audio.
- Cleaned up ApplyYV12 in textoverlay.
- Fixed float audio in Dissolve.
- Fixed audiobits clip properties now returning bits and not bytes.
- Added IsAudioFloat() and IsAudioInt() as clip properties.
- Added experimental "after_frame=true/false" to ScriptClip.
- Added FOURCC parameter to AviSource by stickboy.
- ImageReader: tweaked default parameters.
- ImageReader: made ColorBars parameters optional (like docs claim!)
- ImageReader: No more "Image not in range". First frame is ALWAYS frame 0.
- SSRC now has aligned data (slightly faster and SSE ready).
- Fixed ConditionalReader inaccuracies on integer interpolation.
- Updated SoftWire codegenerator to latest version.
- Fixed Mask() problem with footage with different pitches.
- Added French documentation.
As you might have noticed, I haven't had much time for AviSynth the last months or two. I've just moved, and haven't got any 'net at my new place (yet). Add that up with a lot of work, and you pretty much get this result.
Also the CVS binary link page is soon to be changed - but since they are hosted at Sourceforge that will probably not be a big deal anyway.
Anyway - a new version for you to check - and as always feel free to post your feedback or problems.
Wilbert
17th June 2004, 20:45
Very nice!
As you might have noticed, I haven't had much time for AviSynth the last months or two. I've just moved, and haven't got any 'net at my new place (yet). Add that up with a lot of work, and you pretty much get this result.
I hope you moved to a nice place :)
Some questions:
1) I saw that also the french documentation is installed (when selecting it). How is that possible, because I don't see it in AviSynth_2.5.nsi?
2) Is TCPDeliver still not working properly?
puschpull
18th June 2004, 06:26
shodan: thank's, but why i use this new avisynth (17.6.2004) then VirtualDubMod hat problem !! (version 1.5.10.1 build 2439)
:-(
http://puschpull.org/doc/error.png
why i uninstal this new alfa version and return version from 20.3.2004, its all OK !
:-)
sh0dan
18th June 2004, 09:35
Originally posted by puschpull
shodan: thank's, but why i use this new avisynth (17.6.2004) then VirtualDubMod hat problem !! (version 1.5.10.1 build 2439)
:-(
Could you supply a bit more information:
1) Script you are opening.
2) Does it help to temporarily empty your plugin directory.
3) Smallest script to reproduce.
puschpull
18th June 2004, 18:29
Sh0dan: thanks !!!
Problem is with this plugins:
AntiBlink.dll (60 kB , 25.4.2004)
AvsTimerS.dll (48 kB , 7.3.2004)
avstimer.dll (12 kB , 7.3.2004)
Without this plugins in directory (C:\Program Files\AviSynth 2.5\plugins) run VirtualDubMod OK !
:-)
kassandro
20th June 2004, 13:15
Originally posted by puschpull
Sh0dan: thanks !!!
Problem is with this plugins:
AntiBlink.dll (60 kB , 25.4.2004)
AvsTimerS.dll (48 kB , 7.3.2004)
avstimer.dll (12 kB , 7.3.2004)
Without this plugins in directory (C:\Program Files\AviSynth 2.5\plugins) run VirtualDubMod OK !
:-)
I wonder that there are problems with my avstimer plugin, but you did something which you shouldn't do, namely to put both AvsTimerS.dll and avstimer.dll in the plugin directory. One is enough! Try first avstimer.dll. If it doesn't work, because of a missing dll, replace it by AvsTimerS.dll. Perhaps the new avisynth has problems with duplicate identifiers (AvsTimerS.dll and avstimer.dll define the same filters).
puschpull
20th June 2004, 16:43
kassandro: I test what You say, but problem stay
if i copy AvsTimerS.dll (48 kB , 7.3.2004) or avstimer.dll (12 kB , 7.3.2004), VDubMod Crash :-(
without this plugins (one or two) it's all OK
kassandro
20th June 2004, 17:45
Originally posted by puschpull
kassandro: I test what You say, but problem stay
if i copy AvsTimerS.dll (48 kB , 7.3.2004) or avstimer.dll (12 kB , 7.3.2004), VDubMod Crash :-(
without this plugins (one or two) it's all OK
If avstimer.dll is only in the plugin directory but no filter from the plugin is used, then only the function AvisynthPluginInit2 is called. With this function the filters of the plugin are registered by delivering to Avisynth functions to creat instances of these filters. All this is nearly identical for all plugins (I just looked at other). Two things are different. Firstly I print a logo to debugview and secondly I return a real string instead of NULL. I have now disabled these two features and put up a new binary to www.avstimer.de.tf (http://www.avstimer.de.tf). Actually only avstimer.dll is new not AvsTimerS.dll. Could you please try the new avstimer.dll.
puschpull
20th June 2004, 22:17
kassandro: i download newest avstimer.dll (20.6.2004), but problem stay !
If I have only one plugin (avstimer.dll) in directory C:\Program Files\AviSynth 2.5\plugins
VDubMod Crash! :-(
http://puschpull.org/doc/error.png
puschpull
21st June 2004, 06:48
kassandro:
now i test the same problem in another my PC
here is all problem OK why i remove from plugins directory (Avisynth) plugin name: AntiBlink.dll (60 kB 25.4.2003),
AvsTimer.dll (11 kB 20.6.2004) and AvsTimerS.dll (48 kB 7.3.2004)
in every combination of this three plugins VDubMod Crash !
????????
kassandro
21st June 2004, 09:06
Originally posted by puschpull
kassandro:
now i test the same problem in another my PC
here is all problem OK why i remove from plugins directory (Avisynth) plugin name: AntiBlink.dll (60 kB 25.4.2003),
AvsTimer.dll (11 kB 20.6.2004) and AvsTimerS.dll (48 kB 7.3.2004)
in every combination of this three plugins VDubMod Crash !
????????
Thanks for your all efforts. I will install AVS 2.5.5 on my notebook next week to run my own tests, to see what is going on here.
cweb
23rd June 2004, 19:47
Originally posted by puschpull
shodan: thank's, but why i use this new avisynth (17.6.2004) then VirtualDubMod hat problem !! (version 1.5.10.1 build 2439)
:-(
http://puschpull.org/doc/error.png
why i uninstal this new alfa version and return version from 20.3.2004, its all OK !
:-)
I have the same problem. Running win98se, Virtualdubmod 1.5.4.1 and
1.5.10.1 have the same problem with the new 17th june avisynth.
I went back to 20/3/2004 without problems.
It happens as soon as you open virtualdubmod, without any script.
Fixed it: the problem was antiblink2_avs25.dll in the plugins dir which I don't use anyway, so I moved it to a subdirectory. Now virtualdubmod opens without problems.
cweb
23rd June 2004, 19:50
Originally posted by puschpull
kassandro:
now i test the same problem in another my PC
here is all problem OK why i remove from plugins directory (Avisynth) plugin name: AntiBlink.dll (60 kB 25.4.2003),
AvsTimer.dll (11 kB 20.6.2004) and AvsTimerS.dll (48 kB 7.3.2004)
in every combination of this three plugins VDubMod Crash !
????????
Just don't leave antiblink in your plugins dir and it will work.
Move it somewhere else.
mkanel
25th June 2004, 14:43
The documentation that comes with Avisynth 2.5.5 [June. 17th] has this example
# this will print the frame number, a ":" and the average luma for that frame
WriteFile(filename, "current_frame", ":", "AverageLuma") Write file sends an error message to the text file because of the ":"
This works:
colon= ":"
WriteFile(filename, "current_frame", "colon", "AverageLuma")
WriteFileEnd doesn't work in this exapmle from the documentation
filename = "c:\myprojects\output.txt"
# create a test video to get frames
Version()
# the expression here is only a variable, which is evaluated and put in the file
# you will get a file with the framenumber in each line
WriteFile(filename, "current_frame")
# this line is written when the script is opened
WriteFileStart(filename, """ "This is the header" """)
# and this when the script is closed
WriteFileEnd(filename, """ "Now the script was closed" """)
The header and frame numbers are written but not the "Now the script was closed"
#####################
Is there any way for WriteFile to write entries to the same line of a text file instead of always starting a new line? Could I send a backspace before a line of text to get the new line on the previous line?
#####################
I would like to use FrameEvaluate to assign a variable other than a clip. Something like
number = (FrameEvaluate("averageLuma>200")) ?number+1 :number-1 or text = (FrameEvaluate("averageLuma>200")) ?"text" + "abc" :"text" + "def" Is there any way to do this?
Thanks for all the new features. And thanks for keeping up with the documentation, it looks good.
Mike.
Wilbert
25th June 2004, 20:12
I corrected your first example.
The header and frame numbers are written but not the "Now the script was closed"
This example works for me :confused:
text = (FrameEvaluate("averageLuma>200")) ?"text" + "abc" :"text" + "def"
Is there any way to do this?
Yes, this is possible. Checkout ConditionalFilter: Advanced conditional filtering: parts I and III (http://www.avisynth.org/ConditionalFilter).
Something like:
function ME(clip c)
{
global w = c
global text = (luma>200) ? "text1" : "text2"
c = FrameEvaluate(c, "global luma = AverageLuma(w)")
}
v = AviSoure(...)
global c = v
global luma = 0
v = ScriptClip(v, "Subtitle(text)")
v = FrameEvaluate(v, "ME(c)")
It probably doesn't work, because I didn't check it. I hope you will get it to work. If not, feel free to ask.
esby
26th June 2004, 02:04
Time to ask a stupid question...
I updated my local version to the current cvs...
building in debug mode: ok , no problem it compiles...
but when building in release mode...
"SoundTouch.lib(FIRFilter.obj) : fatal error LNK1202: "
...\src\Release\vc60.pdb" is missing debugging information for referencing module
Will that get fixed?
thanks :)
esby
PS: if I ain't wrong, it's debugging information, which should not be used in release mode anyway... right?
mkanel
26th June 2004, 04:17
Wilbert,
Originally posted by Wilbert
This example works for me :confused:
Thanks for checking out my complaint. Your right WriteFileEnd works fine. I read the documentation but didn't grasp the obvious. I need to close the script, not just run it to invoke WriteFileEnd.
That leaves just one minor complaint. I'll post the output this time in case it helps. This is from the documentation.
# create a test video to get different frames
Version.Trim(0,2).FadeIn(2).ConvertToYV12 #Added Trim,changed FadeIn
filename = "D:\output.txt"
# this will print the frame number, a ":" and the average luma for that frame
WriteFile(filename, "current_frame", ":", "AverageLuma")
Here's the output
1Script error: syntax error
(, line 1, column 1)38.717766
2Script error: syntax error
(, line 1, column 1)62.042042
3Script error: syntax error
(, line 1, column 1)84.787239
It works if I define colon=":".
# create a test video to get different frames
Version.Trim(0,2).FadeIn(2).ConvertToYV12 #Added Trim,changed FadeIn
filename = "D:\output.txt"
colon = ":"
# this will print the frame number, a ":" and the average luma for that frame
WriteFile(filename, "current_frame", "colon", "AverageLuma")
Here's the output
1:38.717766
2:62.042042
3:84.787239
Thanks for your pointers and example concerning FrameEvaluate. That looks encouraging but I'll need some more time to experiment with it.
Mike.
stickboy
26th June 2004, 07:34
Right, that colon problem is a mistake in the documentation. Basically you need an extra set of quotes, so you can either to define colon=":" as you did, or you can use """:""".
sh0dan
12th July 2004, 11:03
New CVS version out!
News from last version (mostly courtesy of IanB)
- Added TCPDeliver. (TCPServer/TCPSource) More info here (http://forum.doom9.org/showthread.php?s=&postid=460200#post460200) .
- Centre PointResize image.
- Fix VideoFrameBuffer cache corruption.
- Added FrameRate Numerator & Denominator script functions.
- General Convolution updates:
* fix matrix string env corruption
* roll divisor into iCountDiv logic - fix overflow problem
* make divisor a float
* add auto option to control autoscaling/normalizing feature
* support legacy syntax
* tidy indentation
- Fixed bug in PointResize.
- Turn: Fix concurrent use of RGB/YUY2 turnleft/right in same script.
- TurnLeft: Fix 1 pixel offset down in yuy2.
- Added: Turn180() function.
- Loop should now support all kinds of audio.
- Fixed wrong weights in interlaced YUY2 -> YV12 conversion.
Enjoy.
Fizick
12th July 2004, 23:13
Good news! Because I know, that somebody want use turnleft-turnright with my DeScratch plugin right now.
malkion
12th July 2004, 23:14
Is the version @ SourceForge the correct latest release?
It says v2.5.5 beta (12-07-04), and it's dated July 11, 2004.
Cant wait to try the float divisor.
Wilbert
12th July 2004, 23:33
Yes, it is the latest :) (I guess Shodan compiled it on July 11th.)
malkion
13th July 2004, 01:23
I get a bug with this script.
internal error with coefficients.
vdub just says unrecognized exception on the 2nd resize..
loadplugin("e:\dll\dgdecode.dll")
mpeg2source("e:\medallion\the.d2v")
crop(0,58,-0,-64)
x=last.width
y=last.height
lanczosresize(x*2,y*2)
lanczosresize(x,y)
sh0dan
13th July 2004, 09:26
@IanB: It's reporting "Zero Coeff Total" - any idea why?
Wilbert
13th July 2004, 10:23
I also got a similar message yesterday, because (?) I forgot to crop mod4 vertically (it should give that mod4 warning). Dunno, if it is related.
sh0dan
13th July 2004, 13:36
ok - I'll remove the '0'-check, and post a new binary. SF.net is currently in "Read Only" mode, so I can neither commit the changes or upload new files. But I'll put it there as soon as it is possible.
btw - spend an hour (again) to trace down why Resize is unable to throw exceptions without causing an access violation, when the binary is compiled using optimizations.... But as last time... nothing. :(
Edit: New version uploaded.
13-07-04:
- Fixed occational crash in Resize
malkion
13th July 2004, 17:14
Originally posted by sh0dan
Edit: New version uploaded.
13-07-04:
- Fixed occational crash in Resize
Thanks sh0dan. SourceForge doesn't have it ready yet, will grab it when it is.
@Wilbert, I modified the script to mod 4.
mpeg2source("e:\medallion\the.d2v")
crop(0,60,-0,-64)
x=last.width
y=last.height
lanczosresize(x*2,y*2)
lanczosresize(x,y)
This still throws a crash. (Waiting on SourceForge now.. :)
Boulder
13th July 2004, 17:38
Choose another mirror, I got it off the university of Minnesota. For some odd reason I had to type the address manually, my browser wouldn't change the mirror (it wanted to download from OSDN).
malkion
13th July 2004, 18:30
Boulder,
Got it. Thanks. bug fixed.
IanB
14th July 2004, 12:35
Originally posted by sh0dan
@IanB: It's reporting "Zero Coeff Total" - any idea why? This is what I was getting all bent out shape about when I was analysing the code for PointResize. I couldn't prove the sum of the coefficients wouldn't be 0.0 for the higher order resizers, so to make absolutly sure I trapped for the condition, and sure enough someone found a case.
Reality :- Whenever the trap happened some element of the resize would be wrong, probably a chunk of 8 bytes, maybe not very visible. for (int j=0; j<fir_filter_size; ++j)
total += func->f((start_pos+j - pos) * filter_step);
// if (total == 0.0) // Just to be absolutly sure - IanB
// env->ThrowError("Resize: Internal error, zero coeff total.");
double total2 = 0.0;
for (int k=0; k<fir_filter_size; ++k) {
double total3 = total2 + func->f((start_pos+k - pos) * filter_step) / total;
// -- Code is screwed here if total==0.0 -- /^^^\
*cur++ = int(total3*FPScale+0.5) - int(total2*FPScale+0.5);
total2 = total3;
}
In hind site, the original fix I tried to just force total=1.0 when 0.0 would have been adequate.
When all the coeff are 0.0 there is no problem, just feed zeros into *cur++ (This is the case demonstrated).
It is in the case where the coeff sum to 0.0 that need very careful attention. It seems
total=0.5*sum[abs(coeff)] is a solution.
Thorts?
IanB
P.S. I propose the following code ...
double total = 0.0;
double total2 = 0.0;
for (int j=0; j<fir_filter_size; ++j) {
total += func->f((start_pos+j - pos) * filter_step);
total2 += fabs(func->f((start_pos+j - pos) * filter_step));
}
if (total == 0.0) {
if (total2 == 0.0)
total = 1.0; // All coeff are zero, just feed zeros
else
total = total2 / 2.0; // Coeff sum to zero, use a good guess
}
total2 = 0.0;
for (int k=0; k<fir_filter_size; ++k) {
...
sh0dan
14th July 2004, 14:30
Found the cause!
"pos" could get beyond image size, thus attempting to create resizers entirely outside the image.
The following code is my proposal:
if (original_width <= filter_support) {
env->ThrowError("Resize: Source image too small for this resize method");
}
This was never checked, but it will cause errors, if it isn't true.
This is the replacement for the coefficient calculation.
// the following code ensures that the coefficients add to exactly FPScale
double total = 0.0;
// Ensure that we have a valid position
double ok_pos = max(0.0,min(original_width - subrange_start,pos));
for (int j=0; j<fir_filter_size; ++j) { // Accumulate all coefficients
total += func->f((start_pos+j - ok_pos) * filter_step);
}
if (total == 0.0) {
// Shouldn't happend for valid positions.
#ifdef _DEBUG
env->ThrowError("Resizer: [Internal Error] Got Zero Coefficient");
#endif
total = 1.0;
}
[...]
IanB
14th July 2004, 14:52
Sh0dan,
And can you ( mathemagicly :devil: ) prove that the sum of the coeff can never be zero unless they are all zero?
This is what my total2=0.5*sum[fabs(coeff)] belt/braces is about.
IanB
P.S. If there is any doubt, how about this// the following code ensures that the coefficients add to exactly FPScale
double total = 0.0;
double total2 = 0.0;
// Ensure that we have a valid position
double ok_pos = max(0.0,min(original_width - subrange_start,pos));
for (int j=0; j<fir_filter_size; ++j) { // Accumulate all coefficients
double coeff = func->f((start_pos+j - ok_pos) * filter_step);
total += coeff;
total2 += fabs(coeff);
}
if (total == 0.0) {
if (total2 == 0.0) {
// Shouldn't happend for valid positions.
#ifdef _DEBUG
env->ThrowError("Resizer: [Internal Error] Got Zero Coefficient");
#endif
total = 1.0; // All coeff are zero, just feed zeros
}
else
total = total2 / 2.0; // Real bad luck, Coeff sum to zero, use a good guess
}
total2 = 0.0;
[...]
Leak
14th July 2004, 15:00
Originally posted by IanB
P.S. I propose the following code ...
[...]
for (int j=0; j<fir_filter_size; ++j) {
total += func->f((start_pos+j - pos) * filter_step);
total2 += fabs(func->f((start_pos+j - pos) * filter_step));
}
[...]
Please, if you're going to do this - store the right hand side of the "total+=" expression in a variable and feed that to fabs() instead of evaluating it 2 times, as I doubt an optimizing compiler will treat expressions containing a method call (which really isn't inline-able) as common subexpressions...
np: Luomo - Talk In Danger (Nohuume)
Manao
14th July 2004, 15:29
Leak : this is made at the initialization of the filter, so speed isn't really an issue.
IanB : Mathematically, it will be hard, because 'double' behavior is hard to modelize. However :
* except for pointresize, you always have a non zero coefficient.
* for bilinear, no problems, because the interpolating function is always positive.
* for bicubic, the interpolating function 'f' is defined on [-2, 2], negative on [-2,-1]U[1,2], positive elsewhere, and we take at least 4 coefficients, uniformely distributed, so we have at least 2 coefficients on [-1,1]. I don't know exactly how 'a' and 'b' influence the curb of the function, but in a 'usable' range for both these coefficients, I guess that abs(f) is a lot bigger on [-1,1] than on [-2,-1]U[1,2]. So it should be safe ( we pair positive and negative coefficients together, and we should always have the positive one greater in absolute than the negative one ).
* for lanczos3, the function is defined on [-3,3], negative on [-2,-1]U[1,2], positive elsewhere. We take at least 6 coefficients uniformely distributed. The same reasonning can apply
* also for lanczos4.
I proved nothing, but I really think you're on the safe side to suppose it's not possible.
sh0dan
14th July 2004, 16:07
No - thus the "total= 1.0", and the error message only present in the debug builds.
I removed the "total2"-stuff, because it doesn't really make any sense.
I thought about:total = (double)fir_filter_size; // Real bad luck, Coeff sum to zero, use a good guess- but it just doesn't make sense.
Consider:
fir size: 4 pixels
fir coefficients: [0.0, -0.5, -0.5, 1.0]
p: final pixel
p1-4: source pixels.
Then:
p = ( p1*0.0 + p2*-0.5 + p3*-0.5 + p4*1.0) / TOTALWhatever you choose for TOTAL, you will end up with p = 0 on a uniform surface (p1=p2=p3=p4)
Therefore I removed the cause for "total = 0", and just set total to 1.0, if it should (by mistake) be possible to get this result in the real world (ie. some strange border issue or something)
Bidoche
14th July 2004, 21:28
Maybe the simplest solution, would be to poison the input values by a small shift when a 0 happens.
ie instead of returning Resize(width, height)
you return Resize(width, height, .01, 0, width, height)
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.