@ -326,7 +326,7 @@ static void vp56_mc(vp56_context_t *s, int b, uint8_t *src,
int stride , int x , int y )
{
int plane = vp56_b6to3 [ b ] ;
uint8_t * dst = s - > frames [ VP56_FRAME_CURRENT ] . data [ plane ] + s - > block_offset [ b ] ;
uint8_t * dst = s - > framep [ VP56_FRAME_CURRENT ] - > data [ plane ] + s - > block_offset [ b ] ;
uint8_t * src_block ;
int src_offset ;
int overlap_offset = 0 ;
@ -337,7 +337,7 @@ static void vp56_mc(vp56_context_t *s, int b, uint8_t *src,
if ( s - > avctx - > skip_loop_filter > = AVDISCARD_ALL | |
( s - > avctx - > skip_loop_filter > = AVDISCARD_NONKEY
& & ! s - > frames [ VP56_FRAME_CURRENT ] . key_frame ) )
& & ! s - > framep [ VP56_FRAME_CURRENT ] - > key_frame ) )
deblock_filtering = 0 ;
dx = s - > mv [ b ] . x / s - > vp56_coord_div [ b ] ;
@ -400,7 +400,7 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col)
vp56_frame_t ref_frame ;
int b , plan , off ;
if ( s - > frames [ VP56_FRAME_CURRENT ] . key_frame )
if ( s - > framep [ VP56_FRAME_CURRENT ] - > key_frame )
mb_type = VP56_MB_INTRA ;
else
mb_type = vp56_decode_mv ( s , row , col ) ;
@ -412,8 +412,8 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col)
vp56_add_predictors_dc ( s , ref_frame ) ;
frame_current = & s - > frames [ VP56_FRAME_CURRENT ] ;
frame_ref = & s - > frames [ ref_frame ] ;
frame_current = s - > framep [ VP56_FRAME_CURRENT ] ;
frame_ref = s - > framep [ ref_frame ] ;
switch ( mb_type ) {
case VP56_MB_INTRA :
@ -459,7 +459,7 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col)
static int vp56_size_changed ( AVCodecContext * avctx , vp56_context_t * s )
{
int stride = s - > frames [ VP56_FRAME_CURRENT ] . linesize [ 0 ] ;
int stride = s - > framep [ VP56_FRAME_CURRENT ] - > linesize [ 0 ] ;
int i ;
s - > plane_width [ 0 ] = s - > avctx - > coded_width ;
@ -468,7 +468,7 @@ static int vp56_size_changed(AVCodecContext *avctx, vp56_context_t *s)
s - > plane_height [ 1 ] = s - > plane_height [ 2 ] = s - > avctx - > coded_height / 2 ;
for ( i = 0 ; i < 3 ; i + + )
s - > stride [ i ] = s - > flip * s - > frames [ VP56_FRAME_CURRENT ] . linesize [ i ] ;
s - > stride [ i ] = s - > flip * s - > framep [ VP56_FRAME_CURRENT ] - > linesize [ i ] ;
s - > mb_width = ( s - > avctx - > coded_width + 15 ) / 16 ;
s - > mb_height = ( s - > avctx - > coded_height + 15 ) / 16 ;
@ -495,7 +495,7 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
uint8_t * buf , int buf_size )
{
vp56_context_t * s = avctx - > priv_data ;
AVFrame * const p = & s - > frames [ VP56_FRAME_CURRENT ] ;
AVFrame * const p = s - > framep [ VP56_FRAME_CURRENT ] ;
AVFrame * picture = data ;
int mb_row , mb_col , mb_row_flip , mb_offset = 0 ;
int block , y , uv , stride_y , stride_uv ;
@ -594,22 +594,22 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
}
}
if ( s - > frames [ VP56_FRAME_PREVIOUS ] . data [ 0 ]
& & ( s - > frames [ VP56_FRAME_PREVIOUS ] . data [ 0 ]
! = s - > frames [ VP56_FRAME_GOLDEN ] . data [ 0 ] ) ) {
avctx - > release_buffer ( avctx , & s - > frames [ VP56_FRAME_PREVIOUS ] ) ;
}
if ( s - > framep [ VP56_FRAME_PREVIOUS ] = = s - > framep [ VP56_FRAME_GOLDEN ] )
FFSWAP ( AVFrame * , s - > framep [ VP56_FRAME_PREVIOUS ] ,
s - > framep [ VP56_FRAME_UNUSED ] ) ;
else if ( s - > framep [ VP56_FRAME_PREVIOUS ] - > data [ 0 ] )
avctx - > release_buffer ( avctx , s - > framep [ VP56_FRAME_PREVIOUS ] ) ;
if ( p - > key_frame | | golden_frame ) {
if ( s - > frames [ VP56_FRAME_GOLDEN ] . data [ 0 ] )
avctx - > release_buffer ( avctx , & s - > frames [ VP56_FRAME_GOLDEN ] ) ;
s - > frames [ VP56_FRAME_GOLDEN ] = * p ;
if ( s - > framep [ VP56_FRAME_GOLDEN ] - > data [ 0 ] )
avctx - > release_buffer ( avctx , s - > framep [ VP56_FRAME_GOLDEN ] ) ;
s - > framep [ VP56_FRAME_GOLDEN ] = p ;
}
s - > frames [ VP56_FRAME_PREVIOUS ] = * p ;
FFSWAP ( AVFrame * , s - > framep [ VP56_FRAME_CURRENT ] ,
s - > framep [ VP56_FRAME_PREVIOUS ] ) ;
* picture = * p ;
* data_size = sizeof ( AVPicture ) ;
s - > frames [ VP56_FRAME_CURRENT ] . data [ 0 ] = NULL ;
return buf_size ;
}
@ -628,7 +628,8 @@ void vp56_init(vp56_context_t *s, AVCodecContext *avctx, int flip)
avcodec_set_dimensions ( s - > avctx , 0 , 0 ) ;
for ( i = 0 ; i < 3 ; i + + )
s - > frames [ i ] . data [ 0 ] = NULL ;
s - > framep [ i ] = & s - > frames [ i ] ;
s - > framep [ VP56_FRAME_UNUSED ] = s - > framep [ VP56_FRAME_GOLDEN ] ;
s - > edge_emu_buffer_alloc = NULL ;
s - > above_blocks = NULL ;
@ -656,11 +657,10 @@ int vp56_free(AVCodecContext *avctx)
av_free ( s - > above_blocks ) ;
av_free ( s - > macroblocks ) ;
av_free ( s - > edge_emu_buffer_alloc ) ;
if ( s - > frames [ VP56_FRAME_GOLDEN ] . data [ 0 ]
& & ( s - > frames [ VP56_FRAME_PREVIOUS ] . data [ 0 ]
! = s - > frames [ VP56_FRAME_GOLDEN ] . data [ 0 ] ) )
avctx - > release_buffer ( avctx , & s - > frames [ VP56_FRAME_GOLDEN ] ) ;
if ( s - > frames [ VP56_FRAME_PREVIOUS ] . data [ 0 ] )
avctx - > release_buffer ( avctx , & s - > frames [ VP56_FRAME_PREVIOUS ] ) ;
if ( s - > framep [ VP56_FRAME_GOLDEN ] - > data [ 0 ]
& & ( s - > framep [ VP56_FRAME_PREVIOUS ] ! = s - > framep [ VP56_FRAME_GOLDEN ] ) )
avctx - > release_buffer ( avctx , s - > framep [ VP56_FRAME_GOLDEN ] ) ;
if ( s - > framep [ VP56_FRAME_PREVIOUS ] - > data [ 0 ] )
avctx - > release_buffer ( avctx , s - > framep [ VP56_FRAME_PREVIOUS ] ) ;
return 0 ;
}