---
 libavcodec/mpegvideo.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 9d38d28..9280ab8 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -364,7 +364,10 @@ void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src){
 }
 
 void MPV_update_picture_pointers(MpegEncContext *dst, MpegEncContext *src){
+    int mb_array_size = src->mb_stride*src->mb_height;
+
     memcpy(dst->picture, src->picture, src->picture_count * sizeof(Picture));
+    memcpy(dst->prev_pict_types, src->prev_pict_types, PREV_PICT_TYPES_BUFFER_SIZE);
 
     dst->last_picture_ptr     = src->last_picture_ptr ? &dst->picture[src->last_picture_ptr - src->picture] : NULL;
     dst->current_picture_ptr  = src->current_picture_ptr ? &dst->picture[src->current_picture_ptr - src->picture] : NULL;
@@ -373,6 +376,26 @@ void MPV_update_picture_pointers(MpegEncContext *dst, MpegEncContext *src){
     dst->coded_picture_number = src->coded_picture_number;
     dst->picture_number       = src->picture_number;
     dst->input_picture_number = src->input_picture_number;
+
+    dst->last_pict_type       = src->pict_type;
+    if (src->current_picture_ptr) dst->last_lambda_for[src->pict_type] = src->current_picture_ptr->quality;
+
+    if(src->pict_type!=FF_B_TYPE){
+        dst->last_non_b_pict_type= src->pict_type;
+    }
+
+    //copy mpeg4 pts info
+    memcpy(&dst->time_increment_bits, &src->time_increment_bits, (char*)&src->shape - (char*)&src->time_increment_bits);
+    dst->padding_bug_score = src->padding_bug_score;
+
+    //memcpy(dst->mbintra_table, src->mbintra_table, mb_array_size);  //FIXME why does copying this break decoding?
+    memset(dst->mbskip_table, 0, mb_array_size+2);
+
+    if (src->bitstream_buffer) {
+        dst->bitstream_buffer      = av_fast_realloc(dst->bitstream_buffer, &dst->allocated_bitstream_buffer_size, src->allocated_bitstream_buffer_size);
+        dst->bitstream_buffer_size = src->bitstream_buffer_size;
+        memcpy(dst->bitstream_buffer, src->bitstream_buffer, src->bitstream_buffer_size);
+    }
 }
 
 /**
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to