VC-1: Blu-Ray is now supported too

February 10th, 2007

Now FFmpeg and MPlayer support VC-1 in MPEG2-TS streams which can be found on Blu-Ray discs.

Thanks to Martin for providing sample and Nico Sabbi for implementing handling of this in both FFmpeg and MPlayer.

HD-DVD decoding

February 7th, 2007

For those whom it may interest.
What are the things needed to play HD-DVD movies in open-source multimedia player?

  • Decrypted movie (use this tool)
  • Demuxer support
  • Video decoder
  • Audio decoder

EVO demuxer is really just slightly modified MPEG stream demuxer. FFmpeg and MPlayer fresh SVN versions support it (MPlayer was there first). I don’t know about other multimedia players but that’s quite easy to implement.

Video decoding: there are three possible choices – MPEG-2, H.264 and VC-1. First two should work fine, the last one should work but with some bugs (I will fix them eventually).

Audio decoding: is also tricky – standard AC3 audio will work, DTS is supported via libdca and E-AC3 is still to be figured out.

Conclusion – try current SVN of MPlayer and see if it works to you. And if you care about Blu-Ray support (and it does not work) – please provide a sample.

VC-1: Process continues

January 24th, 2007

See this picture?

I don’t know why it appears in quite a few VC-1 Advanced Profile official test samples (the rest I could decode are football trainings as in SP/MP samples).

Yesterday I’ve written VC-1 Elementary Stream demuxer and now have enough material to test interlaced decoding and other AP features (when I implement them).

And another task – make work VC-1 embedded in .EVO – official format of BlueRay/HD-DVD.

Plans for the Future

January 13th, 2007

Let’s see what I have done in 2006:

  1. Fraps (FPS1) version 2/4 decoder
  2. Intel Music Coder decoder (some cleaning and lavc’ization)
  3. KMVC (video codec for FMV used in Worms games) decoder
  4. Musepack SV7 demuxer and decoder
  5. Smacker demuxer and decoder implementation (no, I haven’t RE’d it)
  6. VMWare capture codec (VMnc) decoder (implementation and some RE work)
  7. Wavpack decoder
  8. ZMBV (DosBox capture codec) decoder and encoder (encoder for palettized format only)
  9. Some image formats reading support (TGA, TIFF)
  10. 16-bit grayscale support for some image formats
  11. And finally – VC-1 decoder (with some WMV3 support)

And here are my plans for this year. Warning! This is not the final list and may be changed in process.

  • Make some lossless audio decoders (MPEG-4 ALS and Monkey’s Audio)
  • Implement missing VC-1 Simple/Main profile features (there are few of them which nobody uses but who knows)
  • Implement VC-1 Advanced profile interlaced mode (looks like it will be needed in future)
  • Help with some other projects – DCA implementation and maybe even finish RE for Xan v4 (looks like Mike forgot to do this)
  • And ultimate goal – take participation in GSoC 2007 and write JPEG-2000 decoder (in very distant future – even encoder)

Final info about WMV3/VC-1 variants.

November 30th, 2006

Known fourccs:

  • WMV3
  • WMVP
  • WVP2
  • WMVA
  • WVC1

Known meaning of flags:

  • RES_SM: really that’s two flags, RES_SM&2 indicated 411 interlaced mode and RES_SM&1 indicates sprite mode(or so it seems). These flags are mostly used by WMVP and WVP2
  • RES_X8: I-frames may be packed with X8 algo. This also means that each I-frame has additional bit in frame header signalling if current frame should be encoded with X8 or with standard encoding scheme. Used in WMV3 Complex Profile.
  • RES_FASTTX: still unknown, somehow interferes with motion compensation (at least it does not affect bitstream)
  • RES_TRANSTAB: each macroblock should have its own DC/AC table index, not one global stored in the frame header.
  • RES_RTM: Old version of WMV3 with different P-frame coding mode

X8 frames use their own Huffman codes (code lengths are stored as nibbles somewhere in bitstream) and also blocks looks like to be decoded in this way:

for(y=0;y

for(x=0;x< mb_width*2;x++){

decode luma block

if( x & y & 1)

decode both chroma blocks

}

}

Some news

November 29th, 2006

Ever heard of codec with fourcc WMVP? That is another Windows Media variant designed for slideshows, video albums, ets. Why I have got interested in it? WMV3 Complex Profile (aka Ye Olde Undocumented and Incompatible Advanced Profile) uses exactly the same coding method to store I-frames when flag RES_X8 is set (if it is not set then VC-1 Main Profile decoder may decode that movies).

While standard decoder output mostly garbage, some blocks are decoded correctly thus I hope it’ll be possible to add support for both WMVP and WMV3 CP.

Fraps: path of trial and error

November 5th, 2006

I’ve just committed fully working (I hope) support for newer Fraps videos. While RE’ing that stuff I made two big mistakes: misunderstood bit reader to read only 31 bits from 32-bit word (which is not correct) and that Fraps version 4 is not identical to Fraps version 2. All of these is corrected now.

And now is a new category that Mike forgot to add to MultimediaWiki (hint, hint).

Supported screen capture codecs:

  • TechSmith codec (aka Ensharpen)
  • VMWare VMnc
  • DosBox ZMBV
  • Fraps
  • CamStudio

Unsupported screen capture codecs:

  • M$ Screen codecs MSS1 and MSS2
  • MSU Screen Capture Lossless Codec (SCLS)

Interesting – all those unsupported codecs use arithmetic coding (and as I suspect don’t work with palletized  images).

Some notes on Fraps

October 29th, 2006

Here is what I currently know about Fraps v2 (v1 is supported by FFmpeg):

  • all data is stored in 32-bit little-endian words
  • first word indicates codec version and flag 0x8000000 – delta frame
  • second word is zero
  • next word is ‘FPSx’ magic
  • next three words are offsets in frame (from position 8) to packed YUV planes
  • each plane starts with 256 words – frequencies for each possible value
  • the rest of data  is bits packed in words
  • each bit looks like an input to state machine which outputs pair (value, skip) and changes its internal state
  • the rest is still needs to be figured out

Recent developments

October 29th, 2006

Here is a quick list of what has been done recently:

  • LZW decoding in TIFF
  • 16-bit grayscale limited support (decoding PNG, read/write PGM and JPEG-LS but the latter is a bit buggy)
  • Some progress on Intel Music Codec decoder

Some progress

October 15th, 2006

Ah, I still remember those days when FFmpeg got one new decoder once week or two.

Mike once mentioned here that one coder searches for ideas to implement. My situation is rather complimentary – I hardly manage to fullfill all requests from other people. Recently I’ve added two image decoders to FFmpeg – Targa (.tga) and TIFF. Both of them were done by request. The same situation was with Worms Video.

WavPack decoder was written by my own wish but there are already some people asking to write MPEG-4 ALS and Monkey’s Audio decoders. While the later is not possible to implement right now, I’ll implement both MP4 ALS decoder and encoder.