|
|
|
@ -1656,7 +1656,7 @@ static void reset_contexts(SnowContext *s){ //FIXME better initial contexts |
|
|
|
|
int plane_index, level, orientation; |
|
|
|
|
|
|
|
|
|
for(plane_index=0; plane_index<3; plane_index++){ |
|
|
|
|
for(level=0; level<s->spatial_decomposition_count; level++){ |
|
|
|
|
for(level=0; level<MAX_DECOMPOSITIONS; level++){ |
|
|
|
|
for(orientation=level ? 1:0; orientation<4; orientation++){ |
|
|
|
|
memset(s->plane[plane_index].band[level][orientation].state, MID_STATE, sizeof(s->plane[plane_index].band[level][orientation].state)); |
|
|
|
|
} |
|
|
|
@ -3697,7 +3697,6 @@ static void init_qexp(void){ |
|
|
|
|
static int common_init(AVCodecContext *avctx){ |
|
|
|
|
SnowContext *s = avctx->priv_data; |
|
|
|
|
int width, height; |
|
|
|
|
int level, orientation, plane_index; |
|
|
|
|
int i, j; |
|
|
|
|
|
|
|
|
|
s->avctx= avctx; |
|
|
|
@ -3745,12 +3744,6 @@ static int common_init(AVCodecContext *avctx){ |
|
|
|
|
if(!qexp[0]) |
|
|
|
|
init_qexp(); |
|
|
|
|
|
|
|
|
|
s->spatial_decomposition_count= 5; |
|
|
|
|
s->spatial_decomposition_type= avctx->prediction_method; //FIXME add decorrelator type r transform_type
|
|
|
|
|
|
|
|
|
|
s->chroma_h_shift= 1; //FIXME XXX
|
|
|
|
|
s->chroma_v_shift= 1; |
|
|
|
|
|
|
|
|
|
// dec += FFMAX(s->chroma_h_shift, s->chroma_v_shift);
|
|
|
|
|
|
|
|
|
|
width= s->avctx->width; |
|
|
|
@ -3759,8 +3752,18 @@ static int common_init(AVCodecContext *avctx){ |
|
|
|
|
s->spatial_idwt_buffer= av_mallocz(width*height*sizeof(IDWTELEM)); |
|
|
|
|
s->spatial_dwt_buffer= av_mallocz(width*height*sizeof(DWTELEM)); //FIXME this doesnt belong here
|
|
|
|
|
|
|
|
|
|
s->mv_scale= (s->avctx->flags & CODEC_FLAG_QPEL) ? 2 : 4; |
|
|
|
|
s->block_max_depth= (s->avctx->flags & CODEC_FLAG_4MV) ? 1 : 0; |
|
|
|
|
for(i=0; i<MAX_REF_FRAMES; i++) |
|
|
|
|
for(j=0; j<MAX_REF_FRAMES; j++) |
|
|
|
|
scale_mv_ref[i][j] = 256*(i+1)/(j+1); |
|
|
|
|
|
|
|
|
|
s->avctx->get_buffer(s->avctx, &s->mconly_picture); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int common_init_after_header(AVCodecContext *avctx){ |
|
|
|
|
SnowContext *s = avctx->priv_data; |
|
|
|
|
int plane_index, level, orientation; |
|
|
|
|
|
|
|
|
|
for(plane_index=0; plane_index<3; plane_index++){ |
|
|
|
|
int w= s->avctx->width; |
|
|
|
@ -3773,13 +3776,6 @@ static int common_init(AVCodecContext *avctx){ |
|
|
|
|
s->plane[plane_index].width = w; |
|
|
|
|
s->plane[plane_index].height= h; |
|
|
|
|
|
|
|
|
|
s->plane[plane_index].diag_mc= 1; |
|
|
|
|
s->plane[plane_index].htaps= 6; |
|
|
|
|
s->plane[plane_index].hcoeff[0]= 40; |
|
|
|
|
s->plane[plane_index].hcoeff[1]= -10; |
|
|
|
|
s->plane[plane_index].hcoeff[2]= 2; |
|
|
|
|
s->plane[plane_index].fast_mc= 1; |
|
|
|
|
|
|
|
|
|
//av_log(NULL, AV_LOG_DEBUG, "%d %d\n", w, h);
|
|
|
|
|
for(level=s->spatial_decomposition_count-1; level>=0; level--){ |
|
|
|
|
for(orientation=level ? 1 : 0; orientation<4; orientation++){ |
|
|
|
@ -3807,6 +3803,8 @@ static int common_init(AVCodecContext *avctx){ |
|
|
|
|
|
|
|
|
|
if(level) |
|
|
|
|
b->parent= &s->plane[plane_index].band[level-1][orientation]; |
|
|
|
|
//FIXME avoid this realloc
|
|
|
|
|
av_freep(&b->x_coeff); |
|
|
|
|
b->x_coeff=av_mallocz(((b->width+1) * b->height+1)*sizeof(x_and_coeff)); |
|
|
|
|
} |
|
|
|
|
w= (w+1)>>1; |
|
|
|
@ -3814,18 +3812,6 @@ static int common_init(AVCodecContext *avctx){ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for(i=0; i<MAX_REF_FRAMES; i++) |
|
|
|
|
for(j=0; j<MAX_REF_FRAMES; j++) |
|
|
|
|
scale_mv_ref[i][j] = 256*(i+1)/(j+1); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
width= s->width= avctx->width; |
|
|
|
|
height= s->height= avctx->height; |
|
|
|
|
|
|
|
|
|
assert(width && height); |
|
|
|
|
*/ |
|
|
|
|
s->avctx->get_buffer(s->avctx, &s->mconly_picture); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3931,7 +3917,26 @@ static int encode_init(AVCodecContext *avctx) |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
s->spatial_decomposition_count= 5; |
|
|
|
|
s->spatial_decomposition_type= avctx->prediction_method; //FIXME add decorrelator type r transform_type
|
|
|
|
|
|
|
|
|
|
s->chroma_h_shift= 1; //FIXME XXX
|
|
|
|
|
s->chroma_v_shift= 1; |
|
|
|
|
|
|
|
|
|
s->mv_scale = (avctx->flags & CODEC_FLAG_QPEL) ? 2 : 4; |
|
|
|
|
s->block_max_depth= (avctx->flags & CODEC_FLAG_4MV ) ? 1 : 0; |
|
|
|
|
|
|
|
|
|
for(plane_index=0; plane_index<3; plane_index++){ |
|
|
|
|
s->plane[plane_index].diag_mc= 1; |
|
|
|
|
s->plane[plane_index].htaps= 6; |
|
|
|
|
s->plane[plane_index].hcoeff[0]= 40; |
|
|
|
|
s->plane[plane_index].hcoeff[1]= -10; |
|
|
|
|
s->plane[plane_index].hcoeff[2]= 2; |
|
|
|
|
s->plane[plane_index].fast_mc= 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
common_init(avctx); |
|
|
|
|
common_init_after_header(avctx); |
|
|
|
|
alloc_blocks(s); |
|
|
|
|
|
|
|
|
|
s->version=0; |
|
|
|
@ -4414,6 +4419,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 |
|
|
|
|
|
|
|
|
|
s->current_picture.pict_type= FF_I_TYPE; //FIXME I vs. P
|
|
|
|
|
decode_header(s); |
|
|
|
|
common_init_after_header(avctx); |
|
|
|
|
|
|
|
|
|
// realloc slice buffer for the case that spatial_decomposition_count changed
|
|
|
|
|
slice_buffer_destroy(&s->sb); |
|
|
|
|