Investigated heavily on the storage patterns for 8x8 and 4x4 neighbouring flags, the matrices found are pretty cool :)
ctxIdxInc for 16x16 flags is now precomputed at macroblock start.
Parsing for mb_type in P/B slices, I took some more time to prepare a simple ref_idx/mvd parsing, and minimise branches, variables and get_ae calls.
Parsing for ref_idx and mvd, introducing the bypass based on binary division.
Intermediary commit.
I made a short break while struggling with motion vector prediction, the current code is not correct yet.
Parsing coded_block_pattern.
Motion vector prediction now has a very promissing solution, which I put on hold though, to breathe after these 3 PAINFUL weeks.
After much headaches about the program structure, I resigned myself to use a few gotos, making the flow a bit more readable than control variables.
P_skip motion vector prediction is sketched, the rest is still decanting :)
Intermediary commit before changing the convention for mbAddr storage.
mb_x/y now are directly related to the macroblock x/y position.
Next step is to reintegrate m as a register and write directly to it.
New breakthrough! Motion vectors are now stored in a separate circular buffer, sparing a sheer amount of copying.
Moved P/B_Skip to CABAC_parse_init to simplify the branch layout.
Direct Spatial mv prediction for B_Skip.
refIdxCol and mvCol are left undefined until I find a perfect replacement for mv_x/y.
Quick draft for temporal motion prediction, I probably need to settle the use of vector extensions now...
Bring the latest versions of SSSE3 decoding files.