changeset 2253:0cc88042ff21

enable postprocess for interlaced fields
author iive
date Thu, 18 Oct 2001 15:43:35 +0000
parents 6697e0568f87
children 6e5b548790c9
files libmpeg2/decode.c
diffstat 1 files changed, 37 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/libmpeg2/decode.c	Thu Oct 18 11:48:46 2001 +0000
+++ b/libmpeg2/decode.c	Thu Oct 18 15:43:35 2001 +0000
@@ -168,6 +168,35 @@
 
     ++picture->slice;
 }
+void draw_frame(vo_functions_t * output)
+{
+int stride[3];
+    
+    stride[0]=picture->coded_picture_width;
+    stride[1]=stride[2]=stride[0]/2;
+#ifdef MPEG12_POSTPROC
+    if( picture->pp_options ) 
+    {// apply postprocess filter
+	postprocess((picture->picture_coding_type == B_TYPE) ?
+			picture->current_frame->base :
+			picture->forward_reference_frame->base,
+			stride[0], frames[3].base, stride[0],
+                        picture->coded_picture_width, picture->coded_picture_height,
+                        &quant_store[1][1], (MBC+1), picture->pp_options);
+	output->draw_slice (frames[3].base, stride, 
+                        picture->display_picture_width,
+                        picture->display_picture_height, 0, 0);
+    }else
+#endif	    
+    {
+        output->draw_slice ((picture->picture_coding_type == B_TYPE) ?
+			picture->current_frame->base :
+			picture->forward_reference_frame->base,
+	    		stride, 
+                        picture->display_picture_width,
+                        picture->display_picture_height, 0, 0);
+    }
+}
 
 static int in_slice_flag=0;
 
@@ -186,36 +215,15 @@
 	    if(picture->picture_structure == FRAME_PICTURE) 
 	    {
 #ifdef MPEG12_POSTPROC
-	       if( (picture->pp_options) && (!framedrop) ){
-                    // apply postprocess filter
-            	    int stride[3];
-            	    stride[0]=picture->coded_picture_width;
-            	    stride[1]=stride[2]=stride[0]/2;
-                    postprocess((picture->picture_coding_type == B_TYPE) ?
-			    picture->current_frame->base :
-			    picture->forward_reference_frame->base,
-			stride[0], frames[3].base, stride[0],
-                        picture->coded_picture_width, picture->coded_picture_height,
-                        &quant_store[1][1], (MBC+1), picture->pp_options);
-		    output->draw_slice (frames[3].base, stride, 
-                        picture->display_picture_width,
-                        picture->display_picture_height, 0, 0);
-	       } 
+		if( (picture->pp_options) && (!framedrop) )
+		    draw_frame(output);
 #endif	    
-	    }else{
-	       if( (picture->second_field) && (!framedrop) )
-	       {
-            	    int stride[3];
-            	    stride[0]=picture->coded_picture_width;
-            	    stride[1]=stride[2]=stride[0]/2;
-		    output->draw_slice ((picture->picture_coding_type == B_TYPE) ?
-			    picture->current_frame->base :
-			    picture->forward_reference_frame->base,
-			stride, 
-                        picture->display_picture_width,
-                        picture->display_picture_height, 0, 0);
-                }else
-		is_frame_done=0;// we don't draw top fields
+	    }else
+	    {
+		if( (picture->second_field) && (!framedrop) )
+	    	    draw_frame(output);
+    		else
+		    is_frame_done=0;// we don't draw first fields
     	    }
 #ifdef ARCH_X86
 	if (config.flags & MM_ACCEL_X86_MMX) emms();