@ -2275,7 +2275,7 @@ static void vp8_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame,
# define update_pos(td, mb_y, mb_x) while(0)
# endif
static av_always_inline void decode_mb_row_no_filter ( AVCodecContext * avctx , void * tdata ,
static av_always_inline int decode_mb_row_no_filter ( AVCodecContext * avctx , void * tdata ,
int jobnr , int threadnr , int is_vp7 )
{
VP8Context * s = avctx - > priv_data ;
@ -2291,6 +2291,10 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void
curframe - > tf . f - > data [ 1 ] + 8 * mb_y * s - > uvlinesize ,
curframe - > tf . f - > data [ 2 ] + 8 * mb_y * s - > uvlinesize
} ;
if ( c - > end < = c - > buffer & & c - > bits > = 0 )
return AVERROR_INVALIDDATA ;
if ( mb_y = = 0 )
prev_td = td ;
else
@ -2394,18 +2398,19 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void
update_pos ( td , mb_y , mb_x ) ;
}
}
return 0 ;
}
static void vp7_decode_mb_row_no_filter ( AVCodecContext * avctx , void * tdata ,
static int vp7_decode_mb_row_no_filter ( AVCodecContext * avctx , void * tdata ,
int jobnr , int threadnr )
{
decode_mb_row_no_filter ( avctx , tdata , jobnr , threadnr , 1 ) ;
return decode_mb_row_no_filter ( avctx , tdata , jobnr , threadnr , 1 ) ;
}
static void vp8_decode_mb_row_no_filter ( AVCodecContext * avctx , void * tdata ,
static int vp8_decode_mb_row_no_filter ( AVCodecContext * avctx , void * tdata ,
int jobnr , int threadnr )
{
decode_mb_row_no_filter ( avctx , tdata , jobnr , threadnr , 0 ) ;
return decode_mb_row_no_filter ( avctx , tdata , jobnr , threadnr , 0 ) ;
}
static av_always_inline void filter_mb_row ( AVCodecContext * avctx , void * tdata ,
@ -2488,13 +2493,16 @@ int vp78_decode_mb_row_sliced(AVCodecContext *avctx, void *tdata, int jobnr,
VP8ThreadData * next_td = NULL , * prev_td = NULL ;
VP8Frame * curframe = s - > curframe ;
int mb_y , num_jobs = s - > num_jobs ;
int ret ;
td - > thread_nr = threadnr ;
for ( mb_y = jobnr ; mb_y < s - > mb_height ; mb_y + = num_jobs ) {
if ( mb_y > = s - > mb_height )
break ;
td - > thread_mb_pos = mb_y < < 16 ;
s - > decode_mb_row_no_filter ( avctx , tdata , jobnr , threadnr ) ;
ret = s - > decode_mb_row_no_filter ( avctx , tdata , jobnr , threadnr ) ;
if ( ret < 0 )
return ret ;
if ( s - > deblock_filter )
s - > filter_mb_row ( avctx , tdata , jobnr , threadnr ) ;
update_pos ( td , mb_y , INT_MAX & 0xFFFF ) ;