On Mon, Jul 04, 2011 at 06:08:20AM -0700, Jason Garrett-Glaser wrote: > 2011/7/4 Måns Rullgård <[email protected]>: > > Jason Garrett-Glaser <[email protected]> writes: > > > >> 2011/7/4 Måns Rullgård <[email protected]>: > >>> "Jason Garrett-Glaser " <[email protected]> writes: > >>> > >>>> Module: libav > >>>> Branch: master > >>>> Commit: 4320a309ce10a7eec93aef239a0776a33b1a5a34 > >>>> > >>>> Author: Jason Garrett-Glaser <[email protected]> > >>>> Committer: Jason Garrett-Glaser <[email protected]> > >>>> Date: Mon Jun 27 13:07:26 2011 -0700 > >>>> > >>>> H.264: make filter_mb_fast support the case of unavailable top mb > >>>> > >>>> Significantly faster deblocking in streams with lots of slices. > >>>> > >>>> --- > >>>> > >>>> libavcodec/h264_loopfilter.c | 42 > >>>> ++++++++++++++++++++++++++++-------------- > >>>> 1 files changed, 28 insertions(+), 14 deletions(-) > >>> > >>> This seems to have introduced some invalid reads per > >>> http://fate.libav.org/x86_32-linux-gcc-valgrind/20110704043908 > >> > >> The valgrind log seems to suggest that qp0 = > >> s->current_picture.qscale_table[mb_xy-1]; also causes an invalid read. > >> This is interesting, as this line executed when we were on the left > >> edge -- even before my patch. > > > > Valgrind is only able to catch it on the top row though. > > > >> Does qscale_table not have edge padding? > > > > Apparently not. > > How's this? > > Jason
> From a9608ec7e4795079753eb649eaffdd1d3e90e4dd Mon Sep 17 00:00:00 2001 > From: Jason Garrett-Glaser <[email protected]> > Date: Mon, 4 Jul 2011 06:05:34 -0700 > Subject: [PATCH] H.264: fix overreads of qscale_table > > filter_mb_fast assumed that qscale_table was padded like many of the other > tables. > --- > libavcodec/mpegvideo.c | 5 +++-- > libavcodec/mpegvideo.h | 1 + > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c > index 4978d28..56c1b35 100644 > --- a/libavcodec/mpegvideo.c > +++ b/libavcodec/mpegvideo.c > @@ -285,9 +285,10 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, > int shared){ > } > > FF_ALLOCZ_OR_GOTO(s->avctx, pic->mbskip_table , mb_array_size * > sizeof(uint8_t)+2, fail) //the +2 is for the slice end check > - FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table , mb_array_size * > sizeof(uint8_t) , fail) > + FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table_base , (big_mb_num + > s->mb_stride) * sizeof(uint8_t) , fail) > FF_ALLOCZ_OR_GOTO(s->avctx, pic->mb_type_base , (big_mb_num + > s->mb_stride) * sizeof(uint32_t), fail) > pic->mb_type= pic->mb_type_base + 2*s->mb_stride+1; > + pic->qscale_table= pic->qscale_table_base + 2*s->mb_stride+1; Please stop writing assignments like that. Copypasting is not an excuse. But overall patch looks OK to me. _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
