Browse code

avcodec/ffv1enc: Fix size of first slice

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>

Michael Niedermayer authored on 2016/12/09 08:19:19
Showing 1 changed files
... ...
@@ -1096,7 +1096,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
1096 1096
     FFV1Context *f      = avctx->priv_data;
1097 1097
     RangeCoder *const c = &f->slice_context[0]->c;
1098 1098
     AVFrame *const p    = f->picture.f;
1099
-    int used_count      = 0;
1100 1099
     uint8_t keystate    = 128;
1101 1100
     uint8_t *buf_p;
1102 1101
     int i, ret;
... ...
@@ -1185,11 +1184,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
1185 1185
         }
1186 1186
     }
1187 1187
 
1188
-    for (i = 1; i < f->slice_count; i++) {
1188
+    for (i = 0; i < f->slice_count; i++) {
1189 1189
         FFV1Context *fs = f->slice_context[i];
1190
-        uint8_t *start  = pkt->data + (pkt->size - used_count) * (int64_t)i / f->slice_count;
1190
+        uint8_t *start  = pkt->data + pkt->size * (int64_t)i / f->slice_count;
1191 1191
         int len         = pkt->size / f->slice_count;
1192
-        ff_init_range_encoder(&fs->c, start, len);
1192
+        if (i) {
1193
+            ff_init_range_encoder(&fs->c, start, len);
1194
+        } else {
1195
+            av_assert0(fs->c.bytestream_end >= fs->c.bytestream_start + len);
1196
+            av_assert0(fs->c.bytestream < fs->c.bytestream_start + len);
1197
+            fs->c.bytestream_end = fs->c.bytestream_start + len;
1198
+        }
1193 1199
     }
1194 1200
     avctx->execute(avctx, encode_slice, &f->slice_context[0], NULL,
1195 1201
                    f->slice_count, sizeof(void *));