X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fh264_slice.c;h=aee188ac5f57a7b3a66ce2f19039b169d021c560;hb=5358953cdfb8fe16e2d9d8cc5df4b417935c6bf2;hp=f12e4b75e8e68161cd3744b03d28345efcf4164a;hpb=ee08beb7d92150c61824a8eee722a6e4677a090c;p=ffmpeg diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index f12e4b75e8e..aee188ac5f5 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -251,11 +251,11 @@ static int alloc_picture(H264Context *h, H264Picture *pic) av_pix_fmt_get_chroma_sub_sample(pic->f->format, &h_chroma_shift, &v_chroma_shift); - for(i=0; iavctx->height, v_chroma_shift); i++) { + for(i=0; if->height, v_chroma_shift); i++) { memset(pic->f->data[1] + pic->f->linesize[1]*i, - 0x80, FF_CEIL_RSHIFT(h->avctx->width, h_chroma_shift)); + 0x80, FF_CEIL_RSHIFT(pic->f->width, h_chroma_shift)); memset(pic->f->data[2] + pic->f->linesize[2]*i, - 0x80, FF_CEIL_RSHIFT(h->avctx->width, h_chroma_shift)); + 0x80, FF_CEIL_RSHIFT(pic->f->width, h_chroma_shift)); } } @@ -497,6 +497,9 @@ int ff_h264_update_thread_context(AVCodecContext *dst, h->picture_structure = h1->picture_structure; h->droppable = h1->droppable; h->low_delay = h1->low_delay; + h->backup_width = h1->backup_width; + h->backup_height = h1->backup_height; + h->backup_pix_fmt = h1->backup_pix_fmt; for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) { ff_h264_unref_picture(h, &h->DPB[i]); @@ -1549,12 +1552,15 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl) * vectors. Given we are concealing a lost frame, this probably * is not noticeable by comparison, but it should be fixed. */ if (h->short_ref_count) { - if (prev) { + if (prev && + h->short_ref[0]->f->width == prev->f->width && + h->short_ref[0]->f->height == prev->f->height && + h->short_ref[0]->f->format == prev->f->format) { av_image_copy(h->short_ref[0]->f->data, h->short_ref[0]->f->linesize, (const uint8_t **)prev->f->data, prev->f->linesize, - h->avctx->pix_fmt, + prev->f->format, h->mb_width * 16, h->mb_height * 16); h->short_ref[0]->poc = prev->poc + 2;