[FFmpeg-cvslog] h264: er: Copy from the previous reference only if compatible

Andreas Cadhalpun git at videolan.org
Thu Jun 18 22:18:18 CEST 2015


ffmpeg | branch: release/2.7 | Andreas Cadhalpun <andreas.cadhalpun at googlemail.com> | Sun Jun 14 12:40:18 2015 +0200| [3ba55ea4aec2ce6c179017e12a933e20a20a14d1] | committer: Michael Niedermayer

h264: er: Copy from the previous reference only if compatible

Also use the frame pixel format instead of the one from the codec
context, which is more robust.

Signed-off-by: Luca Barbato <lu_zero at gentoo.org>
Reviewed-by: Michael Niedermayer <michaelni at gmx.at>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
(cherry picked from commit fdc64a104410f5fcc7f35b62287b0ae502b7061a)

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3ba55ea4aec2ce6c179017e12a933e20a20a14d1
---

 libavcodec/h264_slice.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 9c4d613..0712f2d 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1549,12 +1549,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;



More information about the ffmpeg-cvslog mailing list