[FFmpeg-cvslog] avcodec/h264: mark recovery_cnt==0 frames as keyframes

Michael Niedermayer git at videolan.org
Sat May 3 16:03:10 CEST 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun Nov  3 17:24:05 2013 +0100| [7ef01a7878149de43aa49e676a343ca67b24c6b2] | committer: Michael Niedermayer

avcodec/h264: mark recovery_cnt==0 frames as keyframes

Fixes Ticket3063

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

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

 libavcodec/h264.c         |    2 ++
 libavcodec/h264.h         |    1 +
 libavcodec/h264_picture.c |    1 +
 libavcodec/h264_slice.c   |    1 +
 4 files changed, 5 insertions(+)

diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index dd70af3..942ba7f 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1781,6 +1781,8 @@ static int output_frame(H264Context *h, AVFrame *dst, H264Picture *srcp)
 
     av_dict_set(&dst->metadata, "stereo_mode", ff_h264_sei_stereo_mode(h), 0);
 
+    if (srcp->sei_recovery_frame_cnt == 0)
+        dst->key_frame = 1;
     if (!srcp->crop)
         return 0;
 
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 70539bb..76f111b 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -324,6 +324,7 @@ typedef struct H264Picture {
     int reference;
     int recovered;          ///< picture at IDR or recovery point + recovery count
     int invalid_gap;
+    int sei_recovery_frame_cnt;
 
     int crop;
     int crop_left;
diff --git a/libavcodec/h264_picture.c b/libavcodec/h264_picture.c
index 36028dc..61ff862 100644
--- a/libavcodec/h264_picture.c
+++ b/libavcodec/h264_picture.c
@@ -122,6 +122,7 @@ int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
     dst->crop_top      = src->crop_top;
     dst->recovered     = src->recovered;
     dst->invalid_gap   = src->invalid_gap;
+    dst->sei_recovery_frame_cnt = src->sei_recovery_frame_cnt;
 
     return 0;
 fail:
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 65e8c73..c70814f 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -744,6 +744,7 @@ static int h264_frame_start(H264Context *h)
     pic->mmco_reset  = 0;
     pic->recovered   = 0;
     pic->invalid_gap = 0;
+    pic->sei_recovery_frame_cnt = h->sei_recovery_frame_cnt;
 
     if ((ret = alloc_picture(h, pic)) < 0)
         return ret;



More information about the ffmpeg-cvslog mailing list