View Full Version : VirtualDub2
sneaker_ger
7th May 2017, 20:18
When setting x264 SAR and exporting to mkv the mkv video display width/height headers are not set appropriately.
When setting x264 SAR and exporting to mkv the mkv video display width/height headers are not set appropriately.
Thanks. How do you know, from MediaInfo?
sneaker_ger
7th May 2017, 20:41
MkvToolNix GUI Header editor or mkvinfo.
sneaker_ger
7th May 2017, 20:44
On second look it's even worse:
1.) no mkv CodecPrivate written for integrated x264
2.) "DisplayUnit" is set to 4. Legal range is 0 to 3.
Same problem with MP4:
3.) Invalid AVCConfigurationBox.
nevcairiel
7th May 2017, 23:25
2.) "DisplayUnit" is set to 4. Legal range is 0 to 3.
Actually, 4 is a valid value for "unknown", it was added in the recent standardization efforts of the Matroska specification.
https://github.com/Matroska-Org/matroska-specification/blob/master/ebml_matroska.xml#L388
... couldn't find a page where the recent spec is properly rendered on. <.<
sneaker_ger
8th May 2017, 08:22
I see.
This part of the spec is interesting. The DAR when using DisplayUnit != 0 and DisplayWidth and DisplayHeight not set seems to be undefined.
I guess there is probably some imperfection at stream level too, like avcc/annexb stuff or unnecessary headers... never planned to dig deep into specifications :)
shekh
14th May 2017, 20:57
On second look it's even worse:
1.) no mkv CodecPrivate written for integrated x264
2.) "DisplayUnit" is set to 4. Legal range is 0 to 3.
Same problem with MP4:
3.) Invalid AVCConfigurationBox.
Should be much better with the new build 39460: aspect ratio certainly works, filled some missing headers.
In the good old VirtualDubMod, saving a screenshot of the currently displayed frame was so easy: Video » Snapshot source frame (Shift+1).
Trying the same in VDubFMod r38543 (32b) ... Video menu: No more matching entry. File menu: Export ... a submenu, that costs me precious time, unless there is a keyboard shortcut assigned; Single image ... no shortcut assigned yet, have to try to assign one later; click. Nothing happens?
Well, let's assign the shortcut. To File.SaveImage – seems valid. Test it ... nothing happens.
Let's try in VDubFMod r38544 (64b) ... pressing shortcut (was assigned for both versions, that's nice): OK, a dialog appears. Exporting a single image works. So it appears to be broken only in the 32b version.
Or is it? Trying again ... this time it works there as well?! Strange. A reliable bug could be found and fixed. But unreliable issues are the hardest. :o
Mystery solved! The picture was disappearing with most any command: just go to "frame rate" for example, press cancel and now you have "copy output" disabled.
I cant believe it was so simple :)
raffriff42
14th May 2017, 21:30
Hi shekh! When viewing a deep color image via AvisynthPlus, "copy output frame to clipboard" returns nothing but a black rectangle. Adding a ConvertFormat: RGB32 filter solves the problem.
sneaker_ger
14th May 2017, 21:47
@shekh
Thx, looking good for CodecPrivate, AVCConfigurationBox and MKV AR.
I see it sets H.264 matrix coefficients flag. How does it decide which one is set?
... "copy output frame to clipboard" returns nothing but a black rectangle. Adding a ConvertFormat: RGB32 filter solves the problem.
This feature will probably only work with DIB compatible formats...
shekh
14th May 2017, 22:08
@shekh
Thx, looking good for CodecPrivate, AVCConfigurationBox and MKV AR.
I see it sets H.264 matrix coefficients flag. How does it decide which one is set?
Colorspace matrix? Virtualdub understands 2 types of matrix 601/709. So it is set to one of these when encoding.
raffriff42
14th May 2017, 22:09
This feature will probably only work with DIB compatible formats...
I know, but it's probably easy to downconvert. But, now that you mention it, maybe silent downconversion should not be done. OK, how about either (a) disabling the copy function when it can't succeed and changing (grayed-out) menu text to "(cannot copy this format)" or (b) a popup message when copying fails.
Copying any non-standard format to the clipboard is probably complicated. IIRC you have to render multiple versions of your data so each client application gets the best version it can accept (see: Photoshop etc). I can understand if shekh gives a very low priority to something like that.
sneaker_ger
14th May 2017, 22:36
Colorspace matrix? Virtualdub understands 2 types of matrix 601/709. So it is set to one of these when encoding.
So only "Video">"Decoder format"? "Alias format" filter seems to be ignored.
shekh
15th May 2017, 10:21
I know, but it's probably easy to downconvert. But, now that you mention it, maybe silent downconversion should not be done. OK, how about either (a) disabling the copy function when it can't succeed and changing (grayed-out) menu text to "(cannot copy this format)" or (b) a popup message when copying fails.
Copying any non-standard format to the clipboard is probably complicated. IIRC you have to render multiple versions of your data so each client application gets the best version it can accept (see: Photoshop etc). I can understand if shekh gives a very low priority to something like that.
"Copy to clipboard" is supposed to always convert to rgb24.
Afaik no other clipboard picture format is widely supported; I tried to support alpha channel and gave up.
Why it does not work with some formats should be fixed, for some (historical?) reasons VD implemented 2 picture conversion routines: one is normal and the other (used for clipboard copy) covers only subset of formats.
shekh
15th May 2017, 11:29
So only "Video">"Decoder format"? "Alias format" filter seems to be ignored.
When you setup output codec there are 2 possible ways:
1) explicit - navigate to compression -> pixel format, set colorspace to rec 709
2) auto - when compression->pixel format is set to auto, it will match source file format/colorspace (not last filter!)
However "auto" is disabled with x264 codec.
"no change" option for colorspace seems ill-defined for output (in most cases it means default=601).
If you want to keep filter output as is, you need to repeat same settings as the filter.
For example:
If your last filter is alias format "709-FR"
Select "709-FR" in compression->pixel format dialog (it will be indicated in "save video" too).
In this setup there will be no colorspace change between filters and compression.
jpsdr
23rd May 2017, 09:55
SDK evolution suggestion.
I'm still using "standard" SDK, didn't make the leap to use yours yet (but intend to in a not too far future), but i've made a small change, maybe you can do the same in your next release.
The VDXVideoFilter class offers a "constructor" with the Init function, but doesn't offer a "destructor".
So, i've added a DeInit function (because i needed it).
The following change in the code are:
VideoFilter.h
virtual bool Init();
virtual void DeInit();
virtual uint32 GetParams()=0;
VideoFilter.cpp
bool VDXVideoFilter::Init() {
return true;
}
void VDXVideoFilter::DeInit() {
}
void VDXVideoFilter::Start() {
}
....
void __cdecl VDXVideoFilter::FilterDeinit (VDXFilterActivation *fa, const VDXFilterFunctions *ff) {
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa->filter_data);
pThis->fa=fa;
pThis->DeInit();
pThis->~VDXVideoFilter();
}
Do you think it's something you can add in your next release ?
shekh
23rd May 2017, 10:10
Just checked, this is not necessary.
There is virtual destructor:
class VDXVideoFilter {
public:
VDXVideoFilter();
virtual ~VDXVideoFilter();
And it is called exactly from DeinitProc wrapper:
void __cdecl VDXVideoFilter::FilterDeinit (VDXFilterActivation *fa, const VDXFilterFunctions *ff) {
(*reinterpret_cast<VDXVideoFilter **>(fa->filter_data))->~VDXVideoFilter();
}
virtual DeInit does not add any value here
jpsdr
23rd May 2017, 10:25
Yes, but how do i put the code i need to run on "destructor" if i don't create the DeInit function ?
Because you musn't create your own constructor/destructor in your filter, because of the copy there is sometimes, so if you want a specific code to be run on constructor, you have to put it on Init function, but it's missing actualy a DeInit function to do the same thing.
Because of the interface, there is "copy constructor" operations on the instance filter, when you call the interface menu, etc. The existance of the Init function ensure that a specific constructor code will be run only once, and not several times, and the same with the DeInit.
You can't create/change the destructor (and also the constructor), to put your code, otherwise it will be called each time a copy of the object will be created.
There is the Init function for that for the constructor, but there is not such function for the destructor.
The value added by DeInit is to ensure that your code wil be runned only when the system will call FilterDeinit.
The same way Init ensure that your code wil be runned only when the system will call FilterInit.
shekh
23rd May 2017, 11:25
I say DeInit has no value because it does not do anything differently.
You can see in your code:
void __cdecl VDXVideoFilter::FilterDeinit (VDXFilterActivation *fa, const VDXFilterFunctions *ff) {
VDXVideoFilter *pThis = *reinterpret_cast<VDXVideoFilter **>(fa->filter_data);
pThis->fa=fa;
pThis->DeInit();
pThis->~VDXVideoFilter();
}
DeInit and destructor are called in a row. There is no other entry point to either one! So you can just move code from DeInit to destructor and it will be the same.
you musn't create your own constructor/destructor in your filter
Wrong, you must create them!
I understand the idea of Init-Deinit symmetry, but it is impossible. The instance can be created differently, but is must always destroy itself the same way, no matter how it was created. There is no way you can run a complete destructor for "initial" object and partial destructor for cloned object. This cannot work.
I remember the copy-constructor issue.
The proper filter example:
class Filter: public VDXVideoFilter {
public:
Param param;
void* buf;
Filter(){ init(); }
Filter(const Filter& a){ init(); param=a.param; }
void init(){ buf=0; }
~Filter(){ free(buf); }
};
Here I have:
default constructor "Filter(){ init(); }"
copy constructor "Filter(const Filter& a){ init(); param=a.param; }"
helper function to avoid typing the same shit in both constructors "void init(){ buf=0; }"
destructor "~Filter(){ free(buf); }"
This is bare generic minimum to implement/think of.
What If instead I write something like this:
class Filter: public VDXVideoFilter {
public:
Param param;
void* buf;
virtual Init(){ buf=0; }
virtual DeInit(){ free(buf); }
};
Because I do not declare copy constructor it defaults to something like this:
Filter(const Filter& a){ param=a.param; buf=a.buf; }
So when the clone object is created it will share the same memory block pointed by buf, eventually this will result in double-free memory corruption.
How do you plan to sort this with virtual DeInit? It does not help at all. Only copy constructor can decide what to do.
jpsdr
23rd May 2017, 12:19
There is no way you can run a complete destructor for "initial" object and partial destructor for cloned object.
It think it's possible if the system call FilterInit and FilterDeinit only on "initial" object, and not the cloned.
This way, on cloned objet, "partial" constructor/destructor, without the specific code put in Init/DeInit will not be called.
And if "buff" is not allocated in constructor, but in Start, it must be freed in End, not DeInit or destructor.
The exemple code you put is not compatible with the filter SDK way. You de-allocate things on FilterDeinit (or deinitProc) only if they have been allocated on FilterInit (or initProc).
When you look at the SDK 1.2 help, in "Reference -> Video filter functions", there is initProc and deinitProc. All the "constructor stuff" must be put on initProc, and all the "destructor stuff" in deinitProc, they are "symmetrical", that what the SDK help says (well... not fully, because you can throw exceptions on initProc but not on deinitProc, but if we leave this appart). The Init in VDXVideoFilter class is somhow a wrapper to initProc (the same there is for Start/startProc, etc...), but there is actualy no wrapper for deinitProc, this is what i intended to do with DeInit.
Of course, SDK said also to put maximum allocation/buffer in Start and free of these in End, but there is things i have to do in initProc and deinitProc, and not in Start and End.
raffriff42
23rd May 2017, 12:57
2) auto - when compression->pixel format is set to auto, it will match source file format/colorspace (not last filter!)What do you think of showing the current format, alongside the auto-selected output format, where they are different? Maybe something like this:
https://www.dropbox.com/s/82eljrzx9qoc5iq/vdubfm-dlg-compress-pixfmt-04.png?raw=1
.
shekh
23rd May 2017, 13:16
The part you probably misread in the sdk:
With copyProc, it becomes possible to map the allocation and deallocation hooks onto traditional C++ object semantics, which makes filter data management much easier. In particular, the three hooks can be mapped as follows:
Filter API entry point Equivalent C++ method
initProc Constructor
deinitProc Destructor
copyProc Copy constructor
It think it's possible if the system call FilterInit and FilterDeinit only on "initial" object, and not the cloned.
But it is not, as soon as clone object is created both objects are equal in rights. FilterDeinit/destructor is called equally for both.
And if "buff" is not allocated in constructor, but in Start, it must be freed in End, not DeInit or destructor.
You can allocate stuff in constructor, init, start, run, config or anywhere else. There is no rule against this.
The only sane rule is: everything you allocate must be reasonably freed.
Where exactly to put something can only be advice, not rule.
btw can you share sdk 1.2? It seems I have lost it (only 1.1 is still on virtualdub.org)
If you want to read help to the letter:
initProc
Initializes a filter's per-instance data.
int initProc(VDXFilterActivation *fa, const VDXFilterFunctions *ff);
Remarks
This function is called whenever a filter instance is created, and is usually used to initialize variables in the private data structure. Regardless of whether it is provided, VirtualDub will initialize the data structure to zeroes, so most filters will not need this function.
ok except it does not mention that it is NOT called when copy instance is created, which somewhat changes the game.
copyProc
Creates a clone of the filter instance.
int copyProc(VDXFilterActivation *fa, const VDXFilterFunctions *ff, void *dst);
Remarks
This function allows you to implement a copy constructor for your filter, which then allows you to store pointers to allocated and destructable objects in your filter structure. To do this, you must tie copyProc to your class's copy constructor, initProc to your regular constructor, and deinitProc to your destructor. See using a class object for your filter for more details.
again (translating)
initProc = Constructor (constructor is wrapper for initProc)
deinitProc = Destructor (destructor is wrapper for deinitProc)
copyProc = Copy constructor (copy constructor is wrapper for copyProc)
Do you still insist to ignore copy constructor?
Why there exists virtual VDXVideoFilter::Init? IMO you are supposed to ignore it unless you want to return error to deny filter usage (maybe it cannot find required library).
Init is called anyway after constructor is called but there is no way to return error from a constructor.
shekh
23rd May 2017, 13:31
What do you think of showing the current format, alongside the auto-selected output format, where they are different? Maybe something like this:
https://www.dropbox.com/s/82eljrzx9qoc5iq/vdubfm-dlg-compress-pixfmt-04.png?raw=1
.
Do you mean "current" = whatever is coming to output pane?
I think it is good idea to show all steps
"source (YUV420) -> filters (RGB24) -> compression (YUV420)"
jpsdr
23rd May 2017, 13:39
I'll send you by mail the SDK when back home. So, according what you said, the "only" purpose of VDXVideoFilter::Init is to be able to return value and throw exception.
If i don't want to do either of them, i could just create a constructor (and also a destructor if needed) of my filter class, and it will also do the trick.
Ok.
I'll restore to the original, and add a destructor to my filter created from VDXVideoFilter instead do to the DeInit job, and keep Init, as it's allready implemented.
raffriff42
24th May 2017, 07:40
I think it is good idea to show all steps
"source (YUV420) -> filters (RGB24) -> compression (YUV420)"Sure, that would be even better.
StainlessS
24th May 2017, 11:40
I'll send you by mail the SDK
Posting link would be nicer and available to anyone :)
EDIT: VDub Filter SDK versions v1.00, v1.05, and v1.10
EDIT: LINK DELETED
shekh
24th May 2017, 12:03
Posting link would be nicer and available to anyone :)
Added here (https://sourceforge.net/p/vdfiltermod/wiki/sdk/) so hopefully I dont lose it again.
Anyone has source code for these chm docs? :)
StainlessS
24th May 2017, 12:09
All versions in one package, VDUB_FiltSDK_1-00_1-05_1-10_1-20.zip
http://www.mediafire.com/file/axfipba2p8pg4uj/VDUB_FiltSDK_1-00_1-05_1-10_1-20.zip
shekh
24th May 2017, 12:17
All versions in one package, VDUB_FiltSDK_1-00_1-05_1-10_1-20.zip
http://www.mediafire.com/file/axfipba2p8pg4uj/VDUB_FiltSDK_1-00_1-05_1-10_1-20.zip
Thanks, already downloaded from previous edit, but all of these are old versions. 1.2 is better
StainlessS
24th May 2017, 12:20
Yep, just so all versions available if required for whatever reason.
I thought that VirtualDub.org was down some time ago, but is now up:- http://www.virtualdub.org/
(I'm sure that you already knew that).
and all pre v1.20 filter SDK's also available here:- http://www.virtualdub.org/filtersdk.html
EDIT: Arh, forums are down though.
StainlessS
24th May 2017, 17:06
Anyone has source code for these chm docs? :)
Have had a go at creating a project for Compile/Decompile of the SDK helpfile.
http://www.mediafire.com/file/gu79u53eq9ec6x8/PluginSDK_TEM.7z
Best I can do at the moment, and gotta leave in a minute.
Produces error:
HHC5003: Error: Compilation failed while compiling Docs\index.htm.
which is said to be problem in help compiler where referenced file is missing.
See Readme.txt
(Still produces chm file, just that it opens wrongly).
Also, linkchecker-out.html show real missing targets "pad.gif" and "caution.gif".
Bye for now :)
(hope of some use).
EDIT: readme.txt
linkchecker-out.html output produced by Linkchecker on path
C:\TEM\ROOT\athelp_table.html
Which is a table of all source files produced by DirHTML as noted in athelp.txt
(paths ARE case dependant in linkchecker).
shows errors on pad.gif and caution.gif
On CHM compilation, produces error HHC5003
http://www.google.co.uk/search?site=&source=hp&q=HHC5003&oq=HHC5003&gs_l=hp.3..0j0i30k1l3.1552.1552.0.1822.1.1.0.0.0.0.204.204.2-1.1.0....0...1.1.64.hp..0.1.203.NA3wjvViVOc
athelp.log, compiler log
Microsoft HTML Help Compiler 4.74.8702
Compiling c:\TEM\ROOT\PluginSDK.chm
athelp.hhp
athelp.hhc
athelp.hhk
athelp_stoplist.txt
athelp_table.html
Copying.txt
athelp.txt
publish\directtest.script
publish\edittest.script
publish\filters.txt
publish\FilterTest.cmd
publish\filtertest.script
publish\languagetest.script
Docs\general_conventions.html
Docs\general_cpuextensions.html
Docs\general_devenv.html
Docs\general_dynamicloading.html
Docs\general_init.html
Docs\general_refcounting.html
Docs\index.html
Docs\inputdrv_autodetect.html
Docs\inputdrv_directmode.html
Docs\inputdrv_introduction.html
Docs\inputdrv_videodecoder.html
Docs\inputdrv_videodecodingmodel.html
Docs\inputdrv_videoframesvssamples.html
Docs\inputdrv_whatsnew.html
Docs\layout.css
Docs\legalinfo.html
Docs\pics\vdxa-border.png
Docs\pics\vdxa-overview.png
Docs\pics\vfbitmap.png
Docs\pics\vfframetiming.png
Docs\pics\vfframetiming2.png
Docs\ref_enum_VDXPixmapFormat.html
Docs\ref_iface_IVDXAContext__summary.html
Docs\ref_iface_IVDXAContext_CreateFragmentProgram.html
Docs\ref_iface_IVDXAContext_CreateRenderTexture.html
Docs\ref_iface_IVDXAContext_CreateTexture2D.html
Docs\ref_iface_IVDXAContext_DestroyObject.html
Docs\ref_iface_IVDXAContext_DrawRect.html
Docs\ref_iface_IVDXAContext_FillRects.html
Docs\ref_iface_IVDXAContext_GetTextureDesc.html
Docs\ref_iface_IVDXAContext_SetFragmentProgramConstF.html
Docs\ref_iface_IVDXAContext_SetSampler.html
Docs\ref_iface_IVDXAContext_SetTextureMatrix.html
Docs\ref_iface_IVDXAContext_SetTextureMatrixDual.html
Docs\ref_iface_IVDXAudioSource_GetAudioSourceInfo.html
Docs\ref_iface_IVDXFilterPreview__summary.html
Docs\ref_iface_IVDXFilterPreview_Close.html
Docs\ref_iface_IVDXFilterPreview_InitButton.html
Docs\ref_iface_IVDXFilterPreview_isPreviewEnabled.html
Docs\ref_iface_IVDXFilterPreview_RedoFrame.html
Docs\ref_iface_IVDXFilterPreview_RedoSystem.html
Docs\ref_iface_IVDXFilterPreview_SampleCurrentFrame.html
Docs\ref_iface_IVDXFilterPreview_SampleFrames.html
Docs\ref_iface_IVDXFilterPreview_SetButtonCallback.html
Docs\ref_iface_IVDXFilterPreview_SetSampleCallback.html
Docs\ref_iface_IVDXFilterPreview_Toggle.html
Docs\ref_iface_IVDXFilterPreview_UndoSystem.html
Docs\ref_iface_IVDXFilterPreview2__summary.html
Docs\ref_iface_IVDXFilterPreview2_IsPreviewDisplayed.html
Docs\ref_iface_IVDXInputDriver_CreateInputFile.html
Docs\ref_iface_IVDXInputDriver_DetectBySignature.html
Docs\ref_iface_IVDXInputFile_Append.html
Docs\ref_iface_IVDXInputFile_CreateOptions.html
Docs\ref_iface_IVDXInputFile_DisplayInfo.html
Docs\ref_iface_IVDXInputFile_GetAudioSource.html
Docs\ref_iface_IVDXInputFile_GetVideoSource.html
Docs\ref_iface_IVDXInputFile_Init.html
Docs\ref_iface_IVDXInputFile_PromptForOptions.html
Docs\ref_iface_IVDXInputOptions_Write.html
Docs\ref_iface_IVDXPluginCallbacks_GetCPUFeatureFlags.html
Docs\ref_iface_IVDXPluginCallbacks_SetError.html
Docs\ref_iface_IVDXPluginCallbacks_SetErrorOutOfMemory.html
Docs\ref_iface_IVDXStreamSource_GetDecodeErrorMode.html
Docs\ref_iface_IVDXStreamSource_GetDirectFormat.html
Docs\ref_iface_IVDXStreamSource_GetDirectFormatLen.html
Docs\ref_iface_IVDXStreamSource_GetStreamSourceInfo.html
Docs\ref_iface_IVDXStreamSource_IsDecodeErrorModeSupported.html
Docs\ref_iface_IVDXStreamSource_IsVBR.html
Docs\ref_iface_IVDXStreamSource_PositionToTimeVBR.html
Docs\ref_iface_IVDXStreamSource_Read.html
Docs\ref_iface_IVDXStreamSource_SetDecodeErrorMode.html
Docs\ref_iface_IVDXStreamSource_TimeToPositionVBR.html
Docs\ref_iface_IVDXStreamSourceV3_GetStreamSourceInfoV3.html
Docs\ref_iface_IVDXUnknown_AddRef.html
Docs\ref_iface_IVDXUnknown_AsInterface.html
Docs\ref_iface_IVDXUnknown_Release.html
Docs\ref_iface_IVDXVideoDecoder_DecodeFrame.html
Docs\ref_iface_IVDXVideoDecoder_GetDecodePadding.html
Docs\ref_iface_IVDXVideoDecoder_GetFrameBuffer_1.html
Docs\ref_iface_IVDXVideoDecoder_GetFrameBuffer_2.html
Docs\ref_iface_IVDXVideoDecoder_IsDecodable.html
Docs\ref_iface_IVDXVideoDecoder_IsFrameBufferValid.html
Docs\ref_iface_IVDXVideoDecoder_Reset.html
Docs\ref_iface_IVDXVideoDecoder_SetDecompressedFormat.html
Docs\ref_iface_IVDXVideoDecoder_SetTargetFormat.html
Docs\ref_iface_IVDXVideoDecoderModel_GetNextRequiredSample.html
Docs\ref_iface_IVDXVideoDecoderModel_GetRequiredCount.html
Docs\ref_iface_IVDXVideoDecoderModel_Reset.html
Docs\ref_iface_IVDXVideoDecoderModel_SetDesiredFrame.html
Docs\ref_iface_IVDXVideoPrefetcher_PrefetchFrame.html
Docs\ref_iface_IVDXVideoPrefetcher_PrefetchFrameDirect.html
Docs\ref_iface_IVDXVideoPrefetcher_PrefetchFrameSymbolic.html
Docs\ref_iface_IVDXVideoSource_CreateVideoDecoder.html
Docs\ref_iface_IVDXVideoSource_CreateVideoDecoderModel.html
Docs\ref_iface_IVDXVideoSource_GetFrameNumberForSample.html
Docs\ref_iface_IVDXVideoSource_GetRealFrame.html
Docs\ref_iface_IVDXVideoSource_GetSampleBytePosition.html
Docs\ref_iface_IVDXVideoSource_GetSampleInfo.html
Docs\ref_iface_IVDXVideoSource_GetSampleNumberForFrame.html
Docs\ref_iface_IVDXVideoSource_GetVideoSourceInfo.html
Docs\ref_iface_IVDXVideoSource_IsKey.html
Docs\ref_struct_VDXBitmap.html
Docs\ref_struct_VDXFBitmap.html
Docs\ref_struct_VDXFilterStateInfo.html
Docs\ref_struct_VDXFraction.html
Docs\ref_struct_VDXInputDriverDefinition.html
Docs\ref_struct_VDXPixmap.html
Docs\ref_struct_VDXStreamSourceInfoV3.html
Docs\ref_struct_VDXVideoFrameInfo.html
Docs\ref_vfcallback_addFilter.html
Docs\ref_vfcallback_Except.html
Docs\ref_vfcallback_ExceptOutOfMemory.html
Docs\ref_vfcallback_getCPUFlags.html
Docs\ref_vfcallback_getHostVersionInfo.html
Docs\ref_vfcallback_InitVTables.html
Docs\ref_vfcallback_isFPUEnabled.html
Docs\ref_vfcallback_isMMXEnabled.html
Docs\ref_vfcallback_removeFilter.html
Docs\ref_vfmethod_accelRunProc.html
Docs\ref_vfmethod_configProc.html
Docs\ref_vfmethod_copyProc.html
Docs\ref_vfmethod_copyProc2.html
Docs\ref_vfmethod_deinitProc.html
Docs\ref_vfmethod_endProc.html
Docs\ref_vfmethod_eventProc.html
Docs\ref_vfmethod_fssProc.html
Docs\ref_vfmethod_initProc.html
Docs\ref_vfmethod_paramProc.html
Docs\ref_vfmethod_prefetchProc.html
Docs\ref_vfmethod_prefetchProc2.html
Docs\ref_vfmethod_runProc.html
Docs\ref_vfmethod_startProc.html
Docs\ref_vfmethod_stringProc.html
Docs\ref_vfmethod_stringProc2.html
Docs\vdxa_3dbasics.html
Docs\vdxa_addingvdxasupport.html
Docs\vdxa_borderhandling.html
Docs\vdxa_drawingaquad.html
Docs\vdxa_fragmentprograms.html
Docs\vdxa_purpose.html
Docs\videofilt_aspectratio.html
Docs\videofilt_breakingchanges.html
Docs\videofilt_cpudependentoptimization.html
Docs\videofilt_creatingavideofilter.html
Docs\videofilt_creatingtimevaryingfilters.html
Docs\videofilt_deprecatedfeatures.html
Docs\videofilt_gotchas.html
Docs\videofilt_handlingbitmaps.html
Docs\videofilt_handlingmultiplesources.html
Docs\videofilt_introduction.html
Docs\videofilt_makingafilterconfigurable.html
Docs\videofilt_managingfilterdata.html
Docs\videofilt_migratingfromfiltersdk.html
Docs\videofilt_prefetchingmultiplesourceframes.html
Docs\videofilt_processingvideoframes.html
Docs\videofilt_programmingmodel.html
Docs\videofilt_scriptingsupport.html
Docs\videofilt_settingfilterparameters.html
Docs\videofilt_vdxframe_addingconfigurability.html
Docs\videofilt_vdxframe_addingscriptsupport.html
Docs\videofilt_vdxframe_creatingavideofilter.html
Docs\videofilt_vdxframe_gettingstarted.html
Docs\videofilt_vdxframe_writingthemoduleentrypoint.html
Docs\videofilt_whatsnew.html
Docs\whatsnew.html
HHC5003: Error: Compilation failed while compiling Docs\index.htm.
The following files were not compiled:
Docs\index.htm
EDIT: NOTE, I dont think the publish folder or contents are referenced in the help file.
If the project can be properley compiled, then should also carry with it all files necessary for decompile and recompile.
Hi all!
I am loading in avisynth script grey image 16 bit (thanks pinterf last release).
Which colorspace I could choose in script for properly show in Virtualdub? Y16 show me colour image. ConvertToRGB64 excessive, especially if export from Virtualdub to tif.
yup.
shekh
29th May 2017, 15:09
Hi all!
I am loading in avisynth script grey image 16 bit (thanks pinterf last release).
Which colorspace I could choose in script for properly show in Virtualdub? Y16 show me colour image. ConvertToRGB64 excessive, especially if export from Virtualdub to tif.
yup.
Why excessive? Which method of export, external encoder to 16-bit grey?
Not many options anyway: ConvertToRGB64 or ConvertToYV24 or ConvertToYV12.
shekh!
export to tiff.
In my case work only ConvertToRGB64.
yup.
shekh
29th May 2017, 15:26
Builtin export to 48bit tiff begins from rgb64 image anyway.
shekh!
Thanks for explanation.
yup.
lansing
7th June 2017, 02:45
Hi I just tried out this version today, I want to report that you forgot to add a seek bar in the filter's preview window
raffriff42
7th June 2017, 02:56
>forgot to add a seek bar in the filter's preview window
The main seek bar continues to work in the filter preview.
lansing
7th June 2017, 04:10
>forgot to add a seek bar in the filter's preview window
The main seek bar continues to work in the filter preview.
Ok I see it now.
To OP,
I played around with the color correction filter, I still don't think it's practical for anything without monitors like the RGB parade, vectorscope and the waveform monitor.
Also in the filter chain, can there be an option to disable the auto conversion to RGB32 when the video entered the filter chain? Because I have filter that can read higher bit depth input, and I would feel like losing out with any unnecessary conversion in between.
shekh
7th June 2017, 08:33
I played around with the color correction filter, I still don't think it's practical for anything without monitors like the RGB parade, vectorscope and the waveform monitor.
The last advance in this area was this filter / filter box: https://sourceforge.net/p/vdfiltermod/wiki/MasterBlend/
Also in the filter chain, can there be an option to disable the auto conversion to RGB32 when the video entered the filter chain? Because I have filter that can read higher bit depth input, and I would feel like losing out with any unnecessary conversion in between.
What filter? Do you develop it? There is no auto conversion to RGB32. Only filter tells which format it can work in.
lansing
7th June 2017, 15:10
The last advance in this area was this filter / filter box: https://sourceforge.net/p/vdfiltermod/wiki/MasterBlend/
People who're doing color correction needed those monitors I mentioned, because they need to know what is too much on their color corrections. For example, I have a video that has a red color cast, I need the RGB parade to tell me how much I need to adjust on each channel. And right now, the histogram isn't helping much.
The new filter UI is kind of buggy too. If I open a filter and move the filter control window to the right side of the main program window, and click "show preview", the preview window will not show up.
What filter? Do you develop it? There is no auto conversion to RGB32. Only filter tells which format it can work in.
I'm using neat video. iirc the original Virtualdub will convert the source to RGB32 when passing into the filter chain. Now I load in a 10 bit h264 video and opened the filter chain and checked the "show image format", it then reads RGB32 on any filter I tried.
shekh
7th June 2017, 15:33
The new filter UI is kind of buggy too. If I open a filter and move the filter control window to the right side of the main program window, and click "show preview", the preview window will not show up.
It is how I attempt to manage screen space. Afaik preview always appeared to the right of filter GUI.
For me, it does not help when preview window overlaps other active windows, it does not help when preview extends beyond active monitor, and it does not help when I must move it manually each time over and over.
So these are problems I tried to solve. If you keep filter GUI on the left everything should be as planned.
Describe your idea, I will take it into account next time.
I'm using neat video. iirc the original Virtualdub will convert the source to RGB32 when passing into the filter chain. Now I load in a 10 bit h264 video and opened the filter chain and checked the "show image format", it then reads RGB32 on any filter I tried.
VD 1.9 series and older was capable of RGB32 filters only. Many old filters do not support anything else.
Not many filters in the wild support YUV, let alone 10 bit.
Some examples that work:
crop (null transform)
resize
flip vertical/horizontal
StainlessS
7th June 2017, 17:10
Shekh,
Can you confirm/deny that what I provided as chm help file source is what you required (I know it did not work fully successfully),
dont wanna waste further time (when I have some) if I misinterpreted your requirement.
Thanx.
shekh
7th June 2017, 17:36
Shekh,
Can you confirm/deny that what I provided as chm help file source is what you required (I know it did not work fully successfully),
dont wanna waste further time (when I have some) if I misinterpreted your requirement.
Thanx.
Yes please don't waste time on it.
VirtualDub.chm is compiled from plain text sources with a special utility, so I thought maybe sdk.chm was prepared the same way. Just wanted to take a look and archive it.
jpsdr
7th June 2017, 19:02
@lansing
The VirtualDub version of Neatvideo can do only 8 bits for now.
StainlessS
7th June 2017, 20:41
Yes please don't waste time on it.
VirtualDub.chm is compiled from plain text sources with a special utility, so I thought maybe sdk.chm was prepared the same way. Just wanted to take a look and archive it.
You can find html -> text converters, I assume that would not be sufficient.
No reply necessary.
lansing
7th June 2017, 20:43
It is how I attempt to manage screen space. Afaik preview always appeared to the right of filter GUI.
For me, it does not help when preview window overlaps other active windows, it does not help when preview extends beyond active monitor, and it does not help when I must move it manually each time over and over.
So these are problems I tried to solve. If you keep filter GUI on the left everything should be as planned.
Describe your idea, I will take it into account next time.
The whole auto resize on the preview window now is based on the position and size of the main window, which creates problems. What happen if my main window was docked on the left side of the screen? And my video resolution is 1920x1080? What happen if I shrink the main window so that it only shows the "input" screen? In all 3 cases the previewing method now will fail, the window will either look out of proportion or not show up at all.
VD 1.9 series and older was capable of RGB32 filters only. Many old filters do not support anything else.
Not many filters in the wild support YUV, let alone 10 bit.
Some examples that work:
crop (null transform)
resize
flip vertical/horizontal
Ok I see, so this new version support higher bit in the filter chain, my 10 bit video stays at 10 bit input/output with "resize" and "flip vertical" filters, not "flip horizontal" though. And I found out that neatvideo haven't support higher bit depth on virtualdub yet.
Another question, I don't know if it has to do with Vdub. In the older version, if I was to load a vdub filter in Avisynth, I will need to convert the video to RGB32 before adding the filter, obviously this step won't be mandatory now with this newer version. So has the VDubfilter.dll in AVS+ updated to work with this newer version?
shekh
7th June 2017, 21:27
What happen if my main window was docked on the left side of the screen?
Docked - what does it mean? Some screenshots may help.
What happen if I shrink the main window so that it only shows the "input" screen?
And why you do that? Because right side is for browser to assist with drag-n-drop or something?
Just to explain my decisions:
- I never use shrinked main window except for testing. I made "maximize" option to get rid of title bar, and plan to acquire some remaining non-client space eventually.
- I assume if someone moved/shrinked main window, they want dependent windows be positioned/shrinked the same way.
Another question, I don't know if it has to do with Vdub. In the older version, if I was to load a vdub filter in Avisynth, I will need to convert the video to RGB32 before adding the filter, obviously this step won't be mandatory now with this newer version. So has the VDubfilter.dll in AVS+ updated to work with this newer version?
Last time I checked (year ago?) it wasn't working.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.