# HG changeset patch # User iive # Date 1003419815 0 # Node ID 0cc88042ff21642bdd5dab4ca07bca62973a5c80 # Parent 6697e0568f87be5214a5475d383a2c4070fed45e enable postprocess for interlaced fields diff -r 6697e0568f87 -r 0cc88042ff21 libmpeg2/decode.c --- 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();