I think in general you are doing in right way. You can use UMC splitter to extract compressed JPEG data (on frame by frame basis) from AVI Motion JPEG container. Then, having JPEG compressed data in memory buffer you can use UIC JPEG decoder to decode these data. From UIC point of view, you need to create CMemBuffInput object and attach compressed JPEG data to it. Then you need to initialize UIC JPEG decoder, attach CMemBuffInput object to it, and you can read JPEG header. Based on info you get from JPEG header (image parameters) you can allocate output buffer and call UIC decoder's ReadData method.