changeset 5675:0ff1b9ab7afc

slices+field pictures fixed, initial sig11 workaround
author arpi
date Thu, 18 Apr 2002 15:03:08 +0000
parents 6f3175f4151d
children f0c86c815e92
files libmpcodecs/vd_libmpeg2.c
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vd_libmpeg2.c	Thu Apr 18 14:45:43 2002 +0000
+++ b/libmpcodecs/vd_libmpeg2.c	Thu Apr 18 15:03:08 2002 +0000
@@ -73,6 +73,8 @@
 
     picture->pp_options=divx_quality;
     
+    memset(frames,0,3*sizeof(vo_frame_t));
+    
     picture->forward_reference_frame=&frames[0];
     picture->backward_reference_frame=&frames[1];
     picture->temp_frame=&frames[2];
@@ -154,7 +156,9 @@
 		mp_image_t* mpi;
 		int flags;
 		if (picture->picture_coding_type == B_TYPE){
-		    flags=(!framedrop && vd_use_slices)?MP_IMGFLAG_DRAW_CALLBACK:0;
+		    flags=(!framedrop && vd_use_slices && 
+			picture->picture_structure==FRAME_PICTURE) ?
+			    MP_IMGFLAG_DRAW_CALLBACK:0;
 		    picture->display_frame=
 		    picture->current_frame = picture->temp_frame;
 		} else {
@@ -179,6 +183,20 @@
 		picture->current_frame->base[1]=mpi->planes[1];
 		picture->current_frame->base[2]=mpi->planes[2];
 		picture->current_frame->mpi=mpi;	// tricky!
+#if 1
+		if(!picture->forward_reference_frame->base[0]){
+		    // workaround for sig11
+		    picture->forward_reference_frame->base[0]=mpi->planes[0];
+		    picture->forward_reference_frame->base[1]=mpi->planes[1];
+		    picture->forward_reference_frame->base[2]=mpi->planes[2];
+		}
+		if(!picture->backward_reference_frame->base[0]){
+		    // workaround for sig11
+		    picture->backward_reference_frame->base[0]=mpi->planes[0];
+		    picture->backward_reference_frame->base[1]=mpi->planes[1];
+		    picture->backward_reference_frame->base[2]=mpi->planes[2];
+		}
+#endif
 #ifdef MPEG12_POSTPROC
 		mpi->qscale=&picture->current_frame->quant_store[1][1];
 		mpi->qstride=(MPEG2_MBC+1);