Hi all,
I've been working these days on movie conversion for MSX (using MIF command line, see results here: Big Buck Bunny video on MSX 2 ). I also had a look at the EVA format and tools available.
The main problem with AVI2EVA now is that most of AVI files are not compatible (or they need pre-processing with VirtualDub). I think a good idea would be to use ffmpeg to convert the .AVI (or .MKV, or .MPG, ffmpeg supports lots of formats) into series of .PNG files and a single .WAV file. We then just need a tool to convert all .PNG and interleave the audio.
Converting a movie to EVA would not be so tricky (here for 12 fps and screen mode 2):
ffmpeg -i -r 12 msx%08d.png ffmpeg -i -acodec pcm_s16le -ac 1 msx.wav mif msx*.png msx.wav -sm2 -ct5 -fr12 -ofresult.eva del msx*.png del msx.wav
ffmpeg is really powerfull, and has lots of options for conversion. Maybe even the sound could be converted directly to 8 bit adpcm with it (or at least be converted to 16bits mono wav).
MIF has lots of options too, and can convert to all MSX screens with a good quality.
I think that combining this could produce very good results, and the encoding could even be multi-platform (ffmpeg is multi-platform, MIF command line will be too when I'll release the sources). I've already patched MIF to get wild-card filenames (*.png) and concatenate the output into a single video file, and made a small MSX player for it.
The current player code (screen 2/4 only for now) is quite simple, and works on all interfaces:
#include
#include
#include
#include
#include
#include
#include
char acBuffer[0x1800 * 2 + 0x20];
int main(int argc, char **argv)
{
/*~~~~~~~~~~~~*/
FILE *poFile;
/*~~~~~~~~~~~~*/
VDP_init();
VDP_screen(2);
if(BIOS_MSXVersion())
{
VDP_enable(VDP_HIDE_SPRITES);
VDP_enable(VDP_PALETTE0);
}
VDP_setBackgroundColor(0);
poFile = fopen("bbbunny.adm", "rb");
if(BIOS_MSXVersion())
{
/*~~~~~~~~~~*/
int iPage = 0;
/*~~~~~~~~~~*/
while(fread(acBuffer, 0x1800 * 2 + 0x20, poFile))
{
VDP_copyToVM(0x2000 + (iPage << 14), acBuffer + 0x1820, 0x1800);
VDP_copyToVM(0x0000 + (iPage << 14), acBuffer + 0x20, 0x1800);
VDP_waitSync();
VDP_setPalet((unsigned int *) acBuffer, 16);
VDP_writeRegister(10, iPage);
VDP_writeRegister(4, (iPage << 3) | 0x03);
iPage ^= 1;
}
}
else
{
/*~~~~~~~*/
int iIndex;
/*~~~~~~~*/
while(fread(acBuffer, 0x1800 * 2 + 0x20, poFile))
{
VDP_waitSync();
for(iIndex = 0; iIndex < 0x1800; iIndex += 256)
{
VDP_copyToVMMSX1(0x2000 + iIndex, acBuffer + 0x1820 + iIndex, 256);
VDP_copyToVMMSX1(0x0000 + iIndex, acBuffer + 0x20 + iIndex, 256);
}
}
}
fclose(poFile);
if(BIOS_MSXVersion()) BIOS_restorePalet();
VDP_screen(0);
if(BIOS_MSXVersion()) VDP_close();
}
The drawback is that I only have 5.4545 FPS instead of 11 or 12 with EVA, that uses direct access to the drive / SD Card.
I'm wondering too if I should keep compatibility with the EVA format or go for something new (as screen 4 is really an interesting encoding option, not sure if we can patch that into the existing EVA header format).
I'll continue my tests and post results or demos here.

It's MP3 instead of PCM, but... it's a compressed format and the cartridge does decode it 