⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snow.txt

📁 ffmpeg移植到symbian的全部源代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
=============================================Snow Video Codec Specification Draft 20080110=============================================Introduction:=============This specification describes the Snow bitstream syntax and semantics aswell as the formal Snow decoding process.The decoding process is described precisely and any compliant decoderMUST produce the exact same output for a spec-conformant Snow stream.For encoding, though, any process which generates a stream compliant tothe syntactical and semantic requirements and which is decodable bythe process described in this spec shall be considered a conformantSnow encoder.Definitions:============MUST    the specific part must be done to conform to this standardSHOULD  it is recommended to be done that way, but not strictly requiredilog2(x) is the rounded down logarithm of x with basis 2ilog2(0) = 0Type definitions:=================b   1-bit range codedu   unsigned scalar value range codeds   signed scalar value range codedBitstream syntax:=================frame:    header    prediction    residualheader:    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    }    if(!keyframe){        update_mc                       b   header_state        if(update_mc){            for(plane=0; plane<2; plane++){                diag_mc                 b   header_state                htaps/2-1               u   header_state                for(i= p->htaps/2; i; i--)                    |hcoeff[i]|         u   header_state            }        }        update_qlogs                    b   header_state        if(update_qlogs){            spatial_decomposition_count 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_stateqlogs:    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_STATEprediction:    for(y=0; y<block_count_vertical; y++)        for(x=0; x<block_count_horizontal; x++)            block(0)block(level):    mvx_diff=mvy_diff=y_diff=cb_diff=cr_diff=0    if(keyframe){        intra=1    }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:    residual2(luma)    residual2(chroma_cr)    residual2(chroma_cb)residual2:    for(level=0; level<spatial_decomposition_count; level++){        if(level==0)            subband(LL, 0)        subband(HL, level)        subband(LH, level)        subband(HH, level)    }subband:    FIXMETag description:----------------version    0    this MUST NOT change within a bitstreamalways_reset    if 1 then the range coder contexts will be reset after each frametemporal_decomposition_type    0temporal_decomposition_count    0spatial_decomposition_count    FIXMEcolorspace_type    0    this MUST NOT change within a bitstreamchroma_h_shift    log2(luma.width / chroma.width)    this MUST NOT change within a bitstreamchroma_v_shift    log2(luma.height / chroma.height)    this MUST NOT change within a bitstreamspatial_scalability    0max_ref_frames    maximum number of reference frames    this MUST NOT change within a bitstreamupdate_mc    indicates that motion compensation filter parameters are stored in the    headerdiag_mc    flag to enable faster diagonal interpolation    this SHOULD be 1 unless it turns out to be covered by a valid patenthtaps    number of half pel interpolation filter taps, MUST be even, >0 and <10hcoeff    half pel interpolation filter coefficients, hcoeff[0] are the 2 middle    coefficients [1] are the next outer ones and so on, resulting in a filter    like: ...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ...    the sign of the coefficients is not explicitly stored but alternates    after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,...    hcoeff[0] is not explicitly stored but found by subtracting the sum    of all stored coefficients with signs from 32    hcoeff[0]= 32 - hcoeff[1] - hcoeff[2] - ...    a good choice for hcoeff and htaps is    htaps= 6    hcoeff={40,-10,2}    an alternative which requires more computations at both encoder and    decoder side and may or may not be better is    htaps= 8    hcoeff={42,-14,6,-2}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=1spatial_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 || keyframeqlog    quality (logarthmic quantizer scale)    stored as delta from last, last is reset to 0 if always_reset || keyframemv_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 framesqbias    dequantization bias    stored as delta from last, last is reset to 0 if always_reset || keyframeblock_max_depth    maximum depth of the block tree    stored as delta from last, last is reset to 0 if always_reset || keyframequant_table    quantiztation tableHighlevel bitstream structure:============================= --------------------------------------------|                   Header                   | --------------------------------------------|    ------------------------------------    ||   |               Block0               |   ||   |             split?                 |   ||   |     yes              no            |   ||   |  .........         intra?          |   ||   | : Block01 :    yes         no      |   ||   | : Block02 :  .......   ..........  |   ||   | : Block03 : :  y DC : : ref index: |   ||   | : Block04 : : cb DC : : motion x : |   ||   |  .........  : cr DC : : motion y : |   ||   |              .......   ..........  |   ||    ------------------------------------    ||    ------------------------------------    ||   |               Block1               |   ||                    ...                     | --------------------------------------------| ------------   ------------   ------------ ||| Y subbands | | Cb subbands| | Cr subbands||||  ---  ---  | |  ---  ---  | |  ---  ---  |||| |LL0||HL0| | | |LL0||HL0| | | |LL0||HL0| ||||  ---  ---  | |  ---  ---  | |  ---  ---  ||||  ---  ---  | |  ---  ---  | |  ---  ---  |||| |LH0||HH0| | | |LH0||HH0| | | |LH0||HH0| ||||  ---  ---  | |  ---  ---  | |  ---  ---  ||||  ---  ---  | |  ---  ---  | |  ---  ---  |||| |HL1||LH1| | | |HL1||LH1| | | |HL1||LH1| ||||  ---  ---  | |  ---  ---  | |  ---  ---  ||||  ---  ---  | |  ---  ---  | |  ---  ---  |||| |HH1||HL2| | | |HH1||HL2| | | |HH1||HL2| ||||    ...     | |    ...     | |    ...     ||| ------------   ------------   ------------ | --------------------------------------------Decoding process:=================                                         ------------                                        |            |                                        |  Subbands  |                   ------------         |            |                  |            |         ------------                  |  Intra DC  |               |                  |            |    LL0 subband prediction                   ------------                |                                \        Dequantizaton -------------------             \             ||  Reference frames |             \           IDWT| -------   ------- |    Motion    \           |||Frame 0| |Frame 1|| Compensation  .   OBMC   v      -------| -------   ------- | --------------. \------> + --->|Frame n|-->output| -------   ------- |                                 -------||Frame 2| |Frame 3||<----------------------------------/|        ...        | -------------------Range Coder:============Binary Range Coder:-------------------The implemented range coder is an adapted version based upon "Range encoding:an algorithm for removing redundancy from a digitised message." by G. N. N.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -