summaryrefslogtreecommitdiffstats
path: root/libmpeg2
diff options
context:
space:
mode:
authoriive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-10-18 15:43:35 +0000
committeriive <iive@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-10-18 15:43:35 +0000
commit11001c41647eb13fc738657fe1d2f18adf72d1f9 (patch)
tree23f198973481fc0ae45ad8240a7cdb4fb955b061 /libmpeg2
parentb5b7ce90a65fceebd44e0443733e12970ffbdcf7 (diff)
downloadmpv-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.c66
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();