CustomAllocator is a DirectShow object. Either you can let DirectShow render directly to a Window using VMR9 (VideoMixingRenderer9) or you can get it to ask YOU for the memory to decode in to. It's way more flexible to get the image in a texture rather than letting dshow render it for you. If the video is > 1024 wide then you need to use a 2048 wide texture. If so, then you're dealing with HD video anyway, and any PC with a card that can't handle that couldn't decode the video anyway! Any card from the last 7 years can do 1024x1024 sizes - you need to know your audience, who I would guess are mostly people with graphics cards under 2 years old which can handle textures 4 or 8k wide.
You won't be able to build anything DirectShowy at all without both an up-to-date DirectX SDK and Platform SDK, and all the samples are in there.
I've attached some tiny bits of code that might be some use, to get an idea of what you're in to - no chance of it building like it stands though, I've just chopped them out of another project I was working on.
rmp.cpp:StartGraph is the bit where a directshow rendering graph is built. A graph is just a collection of filters, like 'source', 'splitter', 'video decoder', 'audio decoder', 'video renderer', 'audio renderer' which are all linked together to make a player.
In allocator.cpp (which is almost straight from the samples) you get to see what it means to write an allocator.
InitializeDevice is where the graph asks you to allocate some textures
PresentImage is where the graph delivers a frame of data.
Jim