this is my sourcecode for an internal vdub double framerate filter in my modified virtualdub should be easy enough to modify
| CODE | #include "stdafx.h"
#include <vd2/system/cpuaccel.h> #include <vd2/system/vdstl.h> #include <vd2/system/fraction.h> #include <vd2/system/memory.h> #include <vd2/VDXFrame/VideoFilter.h> #include <vd2/VDLib/Dialog.h> #include <vd2/Kasumi/pixmap.h> #include <vd2/Kasumi/pixmaputils.h> #include <intrin.h> #include <emmintrin.h>
#include "resource.h" #include "filter.h"
////////////////////////////////////////////////////////////
class VDVideoFilter_fps_doublerate : public VDXVideoFilter { public: uint32 GetParams(); void Start(); void Run(); bool Prefetch2(sint64 frame, IVDXVideoPrefetcher *prefetcher);
//VDXVF_DECLARE_SCRIPT_METHODS(); protected: bool mActive; };
//VDXVF_BEGIN_SCRIPT_METHODS(VDVideoFilter_fps_doublerate) //VDXVF_DEFINE_SCRIPT_METHOD(VDVideoFilter_fps_doublerate, ScriptConfig, "iii") //VDXVF_DEFINE_SCRIPT_METHOD2(VDVideoFilter_fps_doublerate, ScriptConfig, "iiii") //VDXVF_END_SCRIPT_METHODS()
uint32 VDVideoFilter_fps_doublerate::GetParams() { const VDXPixmapLayout& srcLayout = *fa->src.mpPixmapLayout;
if (srcLayout.format ==255 ) return FILTERPARAM_NOT_SUPPORTED;
VDFraction fr(fa->dst.mFrameRateHi, fa->dst.mFrameRateLo); double frConv=fr.asDouble();
fr *= VDFraction(2, 1);
fa->dst.mFrameRateHi = fr.getHi(); fa->dst.mFrameRateLo = fr.getLo(); fa->dst.mFrameCount = ((fa->dst.mFrameCount )<<1);
frConv=fr.asDouble(); mActive=true;
fa->dst.mpPixmapLayout = fa->src.mpPixmapLayout; return FILTERPARAM_SUPPORTS_ALTFORMATS; }
bool VDVideoFilter_fps_doublerate::Prefetch2(sint64 frame, IVDXVideoPrefetcher *prefetcher) { prefetcher->PrefetchFrame(0, frame>>1 , 0);
return true; }
void VDVideoFilter_fps_doublerate::Run() { const VDXPixmap *pxsrc[1]={ fa->mpSourceFrames[0]->mpPixmap };
const VDXPixmap& pxdst = *fa->mpOutputFrames[0]->mpPixmap;
fa->dst.pitch = fa->src.pitch; fa->dst.offset = fa->src.offset;
}
void VDVideoFilter_fps_doublerate::Start() {
}
///////////////////////////////////////////////////////////////////////////
extern const VDXFilterDefinition filterDef_fps_doublerate = VDXVideoFilterDefinition<VDVideoFilter_fps_doublerate>( NULL, // "half rate", "fps double", "Doubles frame rate");
// warning C4505: 'VDXVideoFilter::[thunk]: __thiscall VDXVideoFilter::`vcall'{24,{flat}}' }'' : unreferenced local function has been removed #pragma warning(disable: 4505)
| |