summaryrefslogtreecommitdiff
path: root/contrib/ffmpeg/doc/snow.txt
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ffmpeg/doc/snow.txt')
-rw-r--r--contrib/ffmpeg/doc/snow.txt259
1 files changed, 0 insertions, 259 deletions
diff --git a/contrib/ffmpeg/doc/snow.txt b/contrib/ffmpeg/doc/snow.txt
deleted file mode 100644
index 4b8fab75a..000000000
--- a/contrib/ffmpeg/doc/snow.txt
+++ /dev/null
@@ -1,259 +0,0 @@
-=============================================
-SNOW Video Codec Specification Draft 20070103
-=============================================
-
-
-Definitions:
-============
-
-MUST the specific part must be done to conform to this standard
-SHOULD it is recommended to be done that way, but not strictly required
-
-ilog2(x) is the rounded down logarithm of x with basis 2
-ilog2(0) = 0
-
-Type definitions:
-=================
-
-b 1-bit range coded
-u unsigned scalar value range coded
-s signed scalar value range coded
-
-
-Bitstream syntax:
-=================
-
-frame:
- header
- prediction
- residual
-
-header:
- keyframe b MID_STATE
- if(keyframe || always_reset)
- reset_contexts
- if(keyframe){
- version u header_state
- always_reset b header_state
- temporal_decomposition_type u header_state
- temporal_decomposition_count u header_state
- spatial_decomposition_count u header_state
- colorspace_type u header_state
- chroma_h_shift u header_state
- chroma_v_shift u header_state
- spatial_scalability b header_state
- max_ref_frames-1 u header_state
- qlogs
- }
-
- spatial_decomposition_type s header_state
- qlog s header_state
- mv_scale s header_state
- qbias s header_state
- block_max_depth s header_state
-
-qlogs:
- for(plane=0; plane<2; plane++){
- quant_table[plane][0][0] s header_state
- for(level=0; level < spatial_decomposition_count; level++){
- quant_table[plane][level][1]s header_state
- quant_table[plane][level][3]s header_state
- }
- }
-
-reset_contexts
- *_state[*]= MID_STATE
-
-prediction:
- for(y=0; y<block_count_vertical; y++)
- for(x=0; x<block_count_horizontal; x++)
- block(0)
-
-block(level):
- if(keyframe){
- intra=1
- y_diff=cb_diff=cr_diff=0
- }else{
- if(level!=max_block_depth){
- s_context= 2*left->level + 2*top->level + topleft->level + topright->level
- leaf b block_state[4 + s_context]
- }
- if(level==max_block_depth || leaf){
- intra b block_state[1 + left->intra + top->intra]
- if(intra){
- y_diff s block_state[32]
- cb_diff s block_state[64]
- cr_diff s block_state[96]
- }else{
- ref_context= ilog2(2*left->ref) + ilog2(2*top->ref)
- if(ref_frames > 1)
- ref u block_state[128 + 1024 + 32*ref_context]
- mx_context= ilog2(2*abs(left->mx - top->mx))
- my_context= ilog2(2*abs(left->my - top->my))
- mvx_diff s block_state[128 + 32*(mx_context + 16*!!ref)]
- mvy_diff s block_state[128 + 32*(my_context + 16*!!ref)]
- }
- }else{
- block(level+1)
- block(level+1)
- block(level+1)
- block(level+1)
- }
- }
-
-
-residual:
- FIXME
-
-
-
-Tag description:
-----------------
-
-version
- 0
- this MUST NOT change within a bitstream
-
-always_reset
- if 1 then the range coder contexts will be reset after each frame
-
-temporal_decomposition_type
- 0
-
-temporal_decomposition_count
- 0
-
-spatial_decomposition_count
- FIXME
-
-colorspace_type
- 0
- this MUST NOT change within a bitstream
-
-chroma_h_shift
- log2(luma.width / chroma.width)
- this MUST NOT change within a bitstream
-
-chroma_v_shift
- log2(luma.height / chroma.height)
- this MUST NOT change within a bitstream
-
-spatial_scalability
- 0
-
-max_ref_frames
- maximum number of reference frames
- this MUST NOT change within a bitstream
-
-ref_frames
- minimum of the number of available reference frames and max_ref_frames
- for example the first frame after a key frame always has ref_frames=1
-
-spatial_decomposition_type
- wavelet type
- 0 is a 9/7 symmetric compact integer wavelet
- 1 is a 5/3 symmetric compact integer wavelet
- others are reserved
- stored as delta from last, last is reset to 0 if always_reset || keyframe
-
-qlog
- quality (logarthmic quantizer scale)
- stored as delta from last, last is reset to 0 if always_reset || keyframe
-
-mv_scale
- stored as delta from last, last is reset to 0 if always_reset || keyframe
- FIXME check that everything works fine if this changes between frames
-
-qbias
- dequantization bias
- stored as delta from last, last is reset to 0 if always_reset || keyframe
-
-block_max_depth
- maximum depth of the block tree
- stored as delta from last, last is reset to 0 if always_reset || keyframe
-
-quant_table
- quantiztation table
-
-Range Coder:
-============
-FIXME
-
-Neighboring Blocks:
-===================
-left and top are set to the respective blocks unless they are outside of
-the image in which case they are set to the Null block
-
-top-left is set to the top left block unless its outside of the image in
-which case it is set to the left block
-
-if this block has no larger parent block or its at the left side of its
-parent block and the top right block is not outside of the image then the
-top right block is used for top-right else the top-left block is used
-
-Null block
-y,cb,cr are 128
-level, ref, mx and my are 0
-
-
-Motion Vector Prediction:
-=========================
-1. the motion vectors of all the neighboring blocks are scaled to
-compensate for the difference of reference frames
-
-scaled_mv= (mv * (256 * (current_reference+1) / (mv.reference+1)) + 128)>>8
-
-2. the median of the scaled left, top and top-right vectors is used as
-motion vector prediction
-
-3. the used motion vector is the sum of the predictor and
- (mvx_diff, mvy_diff)*mv_scale
-
-
-Intra DC Predicton:
-======================
-the luma and chroma values of the left block are used as predictors
-
-the used luma and chroma is the sum of the predictor and y_diff, cb_diff, cr_diff
-
-
-Motion Compensation:
-====================
-FIXME
-
-LL band prediction:
-===================
-FIXME
-
-Dequantizaton:
-==============
-FIXME
-
-Wavelet Transform:
-==================
-FIXME
-
-TODO:
-=====
-Important:
-finetune initial contexts
-spatial_decomposition_count per frame?
-flip wavelet?
-try to use the wavelet transformed predicted image (motion compensated image) as context for coding the residual coefficients
-try the MV length as context for coding the residual coefficients
-use extradata for stuff which is in the keyframes now?
-the MV median predictor is patented IIRC
-
-Not Important:
-spatial_scalability b vs u (!= 0 breaks syntax anyway so we can add a u later)
-
-
-Credits:
-========
-Michael Niedermayer
-Loren Merritt
-
-
-Copyright:
-==========
-GPL + GFDL + whatever is needed to make this a RFC