[SCM] libav/experimental: Respect the gop size (-g) for marking I frames. Use -g 0 gives the old behaviour.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:57:35 UTC 2013


The following commit has been merged in the experimental branch:
commit 8736d68a80f2ba1bb034b0ad67575d3a7e477cb7
Author: Benjamin Larsson <banan at ludd.ltu.se>
Date:   Sun Mar 11 21:01:33 2007 +0000

    Respect the gop size (-g) for marking I frames. Use -g 0 gives the old behaviour.
    
    Originally committed as revision 8326 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/flashsvenc.c b/libavcodec/flashsvenc.c
index be07c65..cbf4883 100644
--- a/libavcodec/flashsvenc.c
+++ b/libavcodec/flashsvenc.c
@@ -74,6 +74,7 @@ typedef struct FlashSVContext {
     uint8_t* encbuffer;
     int block_size;
     z_stream zstream;
+    int last_key_frame;
 } FlashSVContext;
 
 static int copy_region_enc(uint8_t *sptr, uint8_t *dptr,
@@ -125,6 +126,8 @@ static int flashsv_encode_init(AVCodecContext *avctx)
     }
 */
 
+    s->last_key_frame=0;
+
     s->image_width = avctx->width;
     s->image_height = avctx->height;
 
@@ -238,6 +241,7 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_siz
 
     *p = *pict;
 
+    /* First frame needs to be a keyframe */
     if (avctx->frame_number == 0) {
         s->previous_frame = av_mallocz(p->linesize[0]*s->image_height);
         if (!s->previous_frame) {
@@ -247,6 +251,13 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_siz
         I_frame = 1;
     }
 
+    /* Check the placement of keyframes */
+    if (avctx->gop_size > 0) {
+        if (avctx->frame_number >= s->last_key_frame + avctx->gop_size) {
+            I_frame = 1;
+        }
+    }
+
 #if 0
     int w, h;
     int optim_sizes[16][16];
@@ -297,6 +308,8 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_siz
     if (I_frame) {
         p->pict_type = FF_I_TYPE;
         p->key_frame = 1;
+        s->last_key_frame = avctx->frame_number;
+        av_log(avctx, AV_LOG_DEBUG, "Inserting key frame at frame %d\n",avctx->frame_number);
     } else {
         p->pict_type = FF_P_TYPE;
         p->key_frame = 0;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list