* added APIs for media player devs to draw their OSDs/GUIs in exclusive mode
* added API for media player devs to disable the madVR seekbar
Those wont help. MP needs to be able to access that video texture directly.
Hello everyone.
I won't open source madVR. But I'm willing to add custom interfaces, if they're needed to make it work with MediaPortal. FWIW, one of the features added recently was an interface which allows you to install a callback which is called once for every rendered video frame. Maybe that already helps? If not, but if you're interested in adding madVR support, let's discuss what you need exactly, and I'll add it (if reasonable and technically possible).
What would be needed is to have a callback that will provide a texture that contains only the video frame. MediaPortal's skin engine needs to be able to draw under and on top of that video frame. Skin Engine is responsible for calling the D3DDevice.Present(). Callback should be called when the frame is about to be rendered (there is slight overhead on the Skin Engine since it will do some drawing as well).
In addition to that there is fortcoming MediaPortal Audio Renderer that works like Reclock - video renderer is responsible for making the minor adjustments to allow the audio resampling to be used to eliminate dropped frames (the ones that are caused by A/V clocks running on different rates) and to allowe non 1:1 matching fps vs hz to used like with Reclock.
Hare's what the audio renderer's control interface looks like:
Code:
struct CLOCKDATA
{
double driftMultiplier;
double driftHWvsSystem;
double currentDrift;
double resamplingAdjustment;
};
// {91A198BA-1C78-4c31-A50F-0F5C7578F078}
static const GUID IID_IAVSyncClock = { 0x91a198ba, 0x1c78, 0x4c31, { 0xa5, 0xf, 0xf, 0x5c, 0x75, 0x78, 0xf0, 0x78 } };
DEFINE_GUID(CLSID_IAVSyncClock, 0x91a198ba, 0x1c78, 0x4c31, 0xa5, 0xf, 0xf, 0x5c, 0x75, 0x78, 0xf0, 0x78);
MIDL_INTERFACE("91A198BA-1C78-4c31-A50F-0F5C7578F078")
IAVSyncClock: public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE AdjustClock(DOUBLE adjustment) = 0;
virtual HRESULT STDMETHODCALLTYPE SetBias(DOUBLE bias) = 0;
virtual HRESULT STDMETHODCALLTYPE GetBias(DOUBLE *bias) = 0;
virtual HRESULT STDMETHODCALLTYPE GetMaxBias(DOUBLE *bias) = 0;
virtual HRESULT STDMETHODCALLTYPE GetMinBias(DOUBLE *bias) = 0;
virtual HRESULT STDMETHODCALLTYPE GetClockData(CLOCKDATA *clockData) = 0;
virtual HRESULT STDMETHODCALLTYPE SetEVRPresentationDelay(DOUBLE EVRDelay) = 0;
};