diff options
author | iive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-10-18 15:43:35 +0000 |
---|---|---|
committer | iive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-10-18 15:43:35 +0000 |
commit | 11001c41647eb13fc738657fe1d2f18adf72d1f9 (patch) | |
tree | 23f198973481fc0ae45ad8240a7cdb4fb955b061 /libmpeg2 | |
parent | b5b7ce90a65fceebd44e0443733e12970ffbdcf7 (diff) | |
download | mpv-11001c41647eb13fc738657fe1d2f18adf72d1f9.tar.bz2 mpv-11001c41647eb13fc738657fe1d2f18adf72d1f9.tar.xz |
enable postprocess for interlaced fields
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2254 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpeg2')
-rw-r--r-- | libmpeg2/decode.c | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/libmpeg2/decode.c b/libmpeg2/decode.c index 4416fb4f30..aa0f7e194d 100644 --- a/libmpeg2/decode.c +++ b/libmpeg2/decode.c @@ -168,6 +168,35 @@ static void copy_slice (vo_frame_t * frame, uint8_t ** src){ ++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 @@ static int parse_chunk (vo_functions_t * output, int code, uint8_t * buffer, int 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(); |