Yesterday I’ve managed to beat more or less sane I-frame decoder.
It is not very good now but at least it works and produce something that could be recognized without lots of imagination:

Yesterday I’ve managed to beat more or less sane I-frame decoder.
It is not very good now but at least it works and produce something that could be recognized without lots of imagination:

Yesterday I’ve managed to hack FFmpeg bits of VC-1 decoder to actually parse and decode simple profile I-frames. Bits consumed are fine. But there is no sane picture yet. DC prediction is not good and AC coefficients also needs some operations, but at least they are decoded correctly.
OK, 8×8 transform is slightly optimized too.
This version gives 7x gain on PII and 15x on G4.
Here is vc1itrans.c file from VC-1 reference decoder with replaced transform.
See here
how to use VC-1 reference decoder in FFmpeg
and just replace one file in libvc1 with my version before compiling.
I was honoured to implement VC-1 decoder in course of Google Summer of Code.
I had almost no time to do anything this week but at least here is straightforward optimization of 4×4 transform.
Speed gain varies from 4 times (PII-266) to 7 times (PPC G4-1.42 GHz). My name is not Niedermayer and I’m not sure how to further optimize it / rewrite with MMX/AltiVec but it’s a good start. 8×8 transform will follow soon (I hope).
The test code is given below.
Read the rest of this entry »
I’ve managed to make another bunch of Worms videos to work correctly and plan to commit that patch soon. Here is one frame from TV.AVI:

Looks like they’re watching UZI.AVI from previous Worms, eh?
Too bad that correct output can be obtained through FFmpeg transcoding only. Those happens because of different handling of ‘palette change’ block in AVI:
I don’t know the situation with Xine and VLC but suspect it’s nothing good there also.
I just had to express that. Recently I’ve opportunity to examine two DVD disks – one with 8 films-in-one and another one is 7 films-in-one (our pirates usually pack at least two films on each disk). Every DVD has a proud label ‘Real DVD Quality’ (but sometimes even VHS tapes are marked so).
As expected, those films had slightly lesser resolution than 720×576, one disk had 352×576 films, but another one… 352×288 !!! If disk was labeled ‘Real VCD Quality’ – that should be fair.
I’ve committed today another decoder – for KMVC codec, used in Worms games. This is the final step to the completion of my task.
Multimedia Mike has a simple goal – to have a player which will play any multimedia file you like. My task for now is much simpler – have a decoder for each letter of alphabet.
With the latest addition there are only two letters left: E and Y. But considering that TSCC is now called Ensharpen and only known formats on Y are YUV variants, I declare this task complete. Future RE’ing will be just for fun 😉
I have looked at about dozen of codecs and for me KMVC (codec used for FMV in Worms games) is surely the kinkiest.
Here is what I think is kinky:
jmp L2
L1:
; load something into al
jmp L3
L2:
add al, al
jz L1
L3:
I hope to finish spec and decoder to May.
Yesterday I’ve added implementation of Smacker demuxer and decoder, so you can enjoy you favourite pieces of video from various games.
I cannot credit the person who did the actual reverse engineering as he prefers to stay anonymous. Anyway, thank you very much!
The most interesting things in Smacker are Huffman trees. Smacker has trees by principle “every byte must have a tree”. Video operates with 16-bits values from Huffman trees, every of this trees stores values as two codes from Huffman trees. So you must construct two smaller Huffman trees before decoding large one. And packed audio data has also 1,2 or 4 Huffman trees depending if we have 8-bit or 16-bit data and stereo or not.
And now spotted inefficiencies in Smacker:
And the final thought – the main difference between Smacker and M$ Video 1 is the packing scheme, block structure is almost identical. Anyone volunteering to write convertor from one format to another?
I think there is no need to introduce DosBox. And to make it even more usable DosBox developer niknamed Harekiet added screen output recording capability with his own codec ZMBV – Zip Motion Blocks Video.
This codec employs intraframes and motion compensation (and XOR’ing instead of substracting/adding difference). ZLib is used for packing. For more detailed description go
here.
For now, 8-bit, 16-bit and 32-bit depths are supported by codec as for recording. And FFmpeg decoder is already available – I could not miss that codec and not port it.