--- video_out/video_out_xvmc.c.orig 2006-04-16 23:45:21.000000000 -0700 +++ video_out/video_out_xvmc.c 2006-04-17 23:19:08.000000000 -0700 @@ -966,15 +966,34 @@ /* Make sure the surface has finished rendering before we display */ XvMCSyncSurface(this->display, &this->cur_frame->surface); - if (this->deinterlace_enabled && - (this->deinterlace_method == DEINTERLACE_ONEFIELD)) { + if ((this->deinterlace_enabled) && + (this->deinterlace_method == DEINTERLACE_BOB) && + !frame_gen->progressive_frame) { + + unsigned int first_field, second_field; + + if (frame_gen->top_field_first) { + first_field = XVMC_TOP_FIELD; + second_field = XVMC_BOTTOM_FIELD; + } else { + first_field = XVMC_BOTTOM_FIELD; + second_field = XVMC_TOP_FIELD; + } + + XvMCPutSurface(this->display, &this->cur_frame->surface, + this->drawable, + this->sc.displayed_xoffset, this->sc.displayed_yoffset, + this->sc.displayed_width, this->sc.displayed_height, + this->sc.output_xoffset, this->sc.output_yoffset, + this->sc.output_width, this->sc.output_height, + first_field); XvMCPutSurface(this->display, &this->cur_frame->surface, this->drawable, this->sc.displayed_xoffset, this->sc.displayed_yoffset, this->sc.displayed_width, this->sc.displayed_height, this->sc.output_xoffset, this->sc.output_yoffset, this->sc.output_width, this->sc.output_height, - XVMC_TOP_FIELD); + second_field | XVMC_SECOND_FIELD); } else { /* WEAVE */ XvMCPutSurface(this->display, &this->cur_frame->surface, this->drawable,