Difference between revisions of "FFV1"

From MultimediaWiki
Jump to navigation Jump to search
(fixed broken link to documentation, added note on supported pixel formats)
 
(4 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html
 
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html
  
FFV1 stands for [[FFmpeg]] Video codec #1. It is a codec that features lossless, intraframe-only, arithmetic coding. FFV1 supports encoding the following pixel formats: YUV420P, YUV444P, YUV422P, YUV411P, YUV410P, RGB32, YUV420P16, YUV422P16, YUV444P16 (note that the use of 16 bit video encoding requires the use of '-coder 1').
+
The FFV1 video codec is a simple and efficient lossless intra-frame only codec.  
 +
 
 +
Multiple version of the codec are available. ([[User:Lu zero|lu_zero]] Describe only version 2?)
 +
 
 +
= Bitstream =
 +
 
 +
== Conventions ==
 +
 
 +
([[User:Lu zero|lu_zero]] Put a table with the description symbol and such)
 +
 
 +
== Bitstream structure ==
 +
 
 +
FFV1 consts of a global header and frames. Frames are structured in header and slices.
 +
The headers store information regarding encoding type, pixel format and slice geometry.
 +
Depending on the version most of it is stored in the global header or in the per-frame header.
 +
 
 +
=== Global Header ===
 +
 
 +
Version 1 does not have a global header, from version 2 the following field compose the global header.
 +
 
 +
([[User:Lu zero|lu_zero]] Make a table)
 +
 
 +
* version
 +
* minor version
 +
 
 +
* coder type
 +
 
 +
* state transition table
 +
 
 +
* colorspace type
 +
 
 +
* bits per sample
 +
 
 +
* chroma_planes
 +
 
 +
* horizontal subsampling
 +
* vertical subsampling 
 +
 
 +
* alpha plane presence
 +
 
 +
* number of horizontal slices
 +
* number of vertical slices
 +
 
 +
* quantization tables
 +
 
 +
* error correction
 +
 
 +
* cyclic redundancy check
 +
 
 +
=== Frame ===
 +
Each frame is composed by a small header and the frame data in slices.
 +
Version 0 and 1 use a larger per frame header, version 2 and later store
 +
only the initial 1bit Range Coded keyframe flag.
 +
Depending on the version the slice data provides additional information,
 +
a specific quantization table and a redundancy check.
 +
 
 +
==== Frame Header ====
 +
 
 +
Version 0 and 1 use a large per frame header, version 2 and later store
 +
only the initial 1bit Range Coded keyframe flag.
 +
 
 +
==== Slice ====
 +
 
 +
Version 2 slice has the following structure
 +
 
 +
= Encoding =
 +
 
 +
== Encoding modes ==
 +
 
 +
=== Range coding ===
 +
 
 +
=== Huffman coding ===
 +
 
 +
== Frame Encoding ==
 +
 
 +
=== Colorspace ===
 +
 
 +
=== Prediction ===
 +
 
 +
=== Quantization ===
 +
 
 +
= Common usage =
  
The bitstream is fix but the documentation lacks some details and a final review.
 
  
 
[[Category:Lossless Video Codecs]]
 
[[Category:Lossless Video Codecs]]
 
[[Category:Video Codecs]]
 
[[Category:Video Codecs]]
 
[[Category:Video FourCCs]]
 
[[Category:Video FourCCs]]

Latest revision as of 06:54, 27 October 2012

The FFV1 video codec is a simple and efficient lossless intra-frame only codec.

Multiple version of the codec are available. (lu_zero Describe only version 2?)

Bitstream

Conventions

(lu_zero Put a table with the description symbol and such)

Bitstream structure

FFV1 consts of a global header and frames. Frames are structured in header and slices. The headers store information regarding encoding type, pixel format and slice geometry. Depending on the version most of it is stored in the global header or in the per-frame header.

Global Header

Version 1 does not have a global header, from version 2 the following field compose the global header.

(lu_zero Make a table)

  • version
  • minor version
  • coder type
  • state transition table
  • colorspace type
  • bits per sample
  • chroma_planes
  • horizontal subsampling
  • vertical subsampling
  • alpha plane presence
  • number of horizontal slices
  • number of vertical slices
  • quantization tables
  • error correction
  • cyclic redundancy check

Frame

Each frame is composed by a small header and the frame data in slices. Version 0 and 1 use a larger per frame header, version 2 and later store only the initial 1bit Range Coded keyframe flag. Depending on the version the slice data provides additional information, a specific quantization table and a redundancy check.

Frame Header

Version 0 and 1 use a large per frame header, version 2 and later store only the initial 1bit Range Coded keyframe flag.

Slice

Version 2 slice has the following structure

Encoding

Encoding modes

Range coding

Huffman coding

Frame Encoding

Colorspace

Prediction

Quantization

Common usage