=============================================
Snow Video Codec Specification Draft 20080110
=============================================
Introduction:
=============
This specification describes the Snow bitstream syntax and semantics as
well as the formal Snow decoding process.
The decoding process is described precisely and any compliant decoder
MUST produce the exact same output for a spec-conformant Snow stream.
For encoding, though, any process which generates a stream compliant to
the syntactical and semantic requirements and which is decodable by
the process described in this spec shall be considered a conformant
Snow encoder.
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
}
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_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):
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:
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
update_mc
indicates that motion compensation filter parameters are stored in the
header
diag_mc
flag to enable faster diagonal interpolation
this SHOULD be 1 unless it turns out to be covered by a valid patent
htaps
number of half pel interpolation filter taps, MUST be even, >0 and <10
hcoeff
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=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
Highlevel bitstream structure:
=============================
--------------------------------------------
| Header |
--------------------------------------------
| ------------------------------------ |
| | Block0 | |
| | split? | |
| | yes no | |
| | ......... intra? | |
| | : Block01 : yes no | |
| | : Bl
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ffmpeg-0.5.1.tar.gz (992个子文件)
COPYING.LGPLv2.1 26KB
APIchanges 1KB
h264_deblock_sse2.asm 19KB
x86inc.asm 14KB
fft_mmx.asm 11KB
x86util.asm 5KB
dsputil_yasm.asm 4KB
h264_idct_sse2.asm 2KB
build_avopt 387B
h264.c 315KB
h263.c 215KB
snow.c 180KB
dsputil.c 167KB
postprocess_template.c 161KB
vc1.c 155KB
ffserver.c 150KB
ffmpeg.c 139KB
mpegvideo_enc.c 139KB
vorbis_data.c 129KB
swscale_template.c 128KB
dsputil_mmx.c 124KB
dsputil_vis.c 119KB
swscale.c 107KB
utils.c 101KB
rgb2rgb_template.c 98KB
h264dsp_mmx.c 92KB
mpegvideo.c 87KB
mpeg12.c 87KB
msmpeg4data.c 83KB
vp3.c 81KB
imgconvert.c 80KB
ffplay.c 79KB
mpegaudiodec.c 78KB
mov.c 74KB
simple_idct_mmx.c 71KB
motion_est.c 71KB
mxfenc.c 71KB
qdm2.c 66KB
matroskadec.c 65KB
aac.c 64KB
movenc.c 63KB
adpcm.c 61KB
qpel.c 61KB
msmpeg4.c 60KB
vorbis_dec.c 59KB
ac3dec_data.c 59KB
dsputil_altivec.c 57KB
postprocess_altivec_template.c 53KB
rtsp.c 52KB
rv34.c 52KB
h264_altivec.c 51KB
mjpegdec.c 51KB
aactab.c 49KB
dca.c 48KB
dv.c 48KB
ac3dec.c 47KB
huffyuv.c 47KB
dsputil_iwmmxt_rnd_template.c 47KB
indeo3.c 47KB
mpegts.c 45KB
motion_est_template.c 44KB
dsputilenc_mmx.c 43KB
jrevdct.c 43KB
mpegenc.c 42KB
options.c 41KB
dnxhddata.c 40KB
flacenc.c 40KB
ac3enc.c 39KB
asfdec.c 39KB
h264pred.c 39KB
error_resilience.c 39KB
snowdsp_mmx.c 39KB
cook.c 38KB
dvbsubdec.c 38KB
mxfdec.c 38KB
yuv2rgb_altivec.c 38KB
avidec.c 37KB
svq3.c 37KB
dsputil_mmx_avg_template.c 37KB
postprocess.c 37KB
mlpdec.c 35KB
utils.c 35KB
mpeg12enc.c 34KB
vorbis_enc.c 33KB
atrac3.c 33KB
ratecontrol.c 32KB
roqvideoenc.c 31KB
matroskaenc.c 31KB
ffv1.c 30KB
asfenc.c 29KB
raw.c 29KB
nutdec.c 29KB
flicvideo.c 28KB
dnxhdenc.c 28KB
mpegvideo_mmx.c 28KB
apedec.c 28KB
interplayvideo.c 27KB
wmadec.c 27KB
rmdec.c 27KB
h263dec.c 27KB
共 992 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
- 去吧皮卡丘20242015-04-27在ubuntu12.10下tar zxvf 解压出错,错误码如下: tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable: exiting now
- 爱吃馒头012015-12-08在ubuntu12.10下tar zxvf 解压出错,错误码如下: tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable: exiting now
bihaichentian
- 粉丝: 19
- 资源: 197
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列.txt
- 基于android5.1适配Rk3288系统的人脸声纹识别系统源码.zip
- 基于Tensorflow架构深度学习声纹识别系统python源码+预训练模型.zip
- 自定义用于读取matlab数据的类,仿照pytorch设计.zip
- 使用Matlab来对通信系统和通信信号进行仿真 对相关算法进行验证 .zip
- 使用Matlab对单频激光倍频的仿真.zip
- 乐享matlab项目,以matlab为编程语言,提供一些数值计算、数学建模等服务.zip
- 本仓库用于存储使用Matlab写的作业、科研代码.zip
- matlab语言实现的曲线PVT插值.zip
- MATLAB-PTB 自用程序模板.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功