From 9500bfd54e85d71a08857709a6c04048dd63403f Mon Sep 17 00:00:00 2001 From: Andreas Auras Date: Wed, 2 Mar 2011 15:21:01 +0100 Subject: Recognize changes of cropping parameters within a frame and trigger recalculation of displayed window. This issue comes up when a post plugin only changes the cropping parameters of a frame without changing width, height or ratio of the frame. --HG-- extra : rebase_source : 18832d5ec6acdb8ebe7a0d1d10ceaefb2aef663f --- src/video_out/video_out_directfb.c | 10 +++++++--- src/video_out/video_out_vdpau.c | 8 +++++++- src/video_out/video_out_vidix.c | 10 +++++++--- src/video_out/video_out_xcbxv.c | 6 +++++- src/video_out/video_out_xv.c | 6 +++++- src/video_out/video_out_xvmc.c | 6 +++++- src/video_out/video_out_xxmc.c | 6 +++++- 7 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/video_out/video_out_directfb.c b/src/video_out/video_out_directfb.c index b9a21c179..d004939c2 100644 --- a/src/video_out/video_out_directfb.c +++ b/src/video_out/video_out_directfb.c @@ -701,9 +701,13 @@ static void directfb_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen lprintf ("failed=0x%08x.\n", failed); } - if (this->sc.delivered_width != frame->width || - this->sc.delivered_height != frame->height || - this->sc.delivered_ratio != frame->ratio) + if ( (frame->width != this->sc.delivered_width) + || (frame->height != this->sc.delivered_height) + || (frame->ratio != this->sc.delivered_ratio) + || (frame->vo_frame.crop_left != this->sc.crop_left) + || (frame->vo_frame.crop_right != this->sc.crop_right) + || (frame->vo_frame.crop_top != this->sc.crop_top) + || (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { { lprintf ("forcing redraw.\n"); this->sc.force_redraw = 1; diff --git a/src/video_out/video_out_vdpau.c b/src/video_out/video_out_vdpau.c index 0c47417c7..66db3b587 100644 --- a/src/video_out/video_out_vdpau.c +++ b/src/video_out/video_out_vdpau.c @@ -1598,7 +1598,13 @@ static void vdpau_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) uint32_t mix_h = this->video_mixer_height; VdpTime stream_speed; - if ( (frame->width != this->sc.delivered_width) || (frame->height != this->sc.delivered_height) || (frame->ratio != this->sc.delivered_ratio) ) { + if ( (frame->width != this->sc.delivered_width) || + (frame->height != this->sc.delivered_height) || + (frame->ratio != this->sc.delivered_ratio) || + (frame->vo_frame.crop_left != this->sc.crop_left) || + (frame->vo_frame.crop_right != this->sc.crop_right) || + (frame->vo_frame.crop_top != this->sc.crop_top) || + (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { this->sc.force_redraw = 1; /* trigger re-calc of output size */ } diff --git a/src/video_out/video_out_vidix.c b/src/video_out/video_out_vidix.c index 74529ebec..fa476c492 100644 --- a/src/video_out/video_out_vidix.c +++ b/src/video_out/video_out_vidix.c @@ -648,9 +648,13 @@ static void vidix_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) { pthread_mutex_lock(&this->mutex); if ( (frame->width != this->sc.delivered_width) - || (frame->height != this->sc.delivered_height) - || (frame->ratio != this->sc.delivered_ratio) - || (frame->format != this->delivered_format ) ) { + || (frame->height != this->sc.delivered_height) + || (frame->ratio != this->sc.delivered_ratio) + || (frame->format != this->delivered_format ) + || (frame->vo_frame.crop_left != this->sc.crop_left) + || (frame->vo_frame.crop_right != this->sc.crop_right) + || (frame->vo_frame.crop_top != this->sc.crop_top) + || (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { lprintf("video_out_vidix: change frame format\n"); this->sc.delivered_width = frame->width; diff --git a/src/video_out/video_out_xcbxv.c b/src/video_out/video_out_xcbxv.c index 81a799dca..b10aa8e78 100644 --- a/src/video_out/video_out_xcbxv.c +++ b/src/video_out/video_out_xcbxv.c @@ -591,7 +591,11 @@ static void xv_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) { */ if ( (frame->width != this->sc.delivered_width) || (frame->height != this->sc.delivered_height) - || (frame->ratio != this->sc.delivered_ratio) ) { + || (frame->ratio != this->sc.delivered_ratio) + || (frame->vo_frame.crop_left != this->sc.crop_left) + || (frame->vo_frame.crop_right != this->sc.crop_right) + || (frame->vo_frame.crop_top != this->sc.crop_top) + || (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { lprintf("frame format changed\n"); this->sc.force_redraw = 1; /* trigger re-calc of output size */ } diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c index 5c994c351..59ba3cbfe 100644 --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.c @@ -679,7 +679,11 @@ static void xv_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) { */ if ( (frame->width != this->sc.delivered_width) || (frame->height != this->sc.delivered_height) - || (frame->ratio != this->sc.delivered_ratio) ) { + || (frame->ratio != this->sc.delivered_ratio) + || (frame->vo_frame.crop_left != this->sc.crop_left) + || (frame->vo_frame.crop_right != this->sc.crop_right) + || (frame->vo_frame.crop_top != this->sc.crop_top) + || (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { lprintf("frame format changed\n"); this->sc.force_redraw = 1; /* trigger re-calc of output size */ } diff --git a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c index 7a0535818..14961074c 100644 --- a/src/video_out/video_out_xvmc.c +++ b/src/video_out/video_out_xvmc.c @@ -938,7 +938,11 @@ static void xvmc_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) { if ( (frame->width != this->sc.delivered_width) || (frame->height != this->sc.delivered_height) - || (frame->ratio != this->sc.delivered_ratio) ) { + || (frame->ratio != this->sc.delivered_ratio) + || (frame->vo_frame.crop_left != this->sc.crop_left) + || (frame->vo_frame.crop_right != this->sc.crop_right) + || (frame->vo_frame.crop_top != this->sc.crop_top) + || (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { lprintf("frame format changed\n"); /* diff --git a/src/video_out/video_out_xxmc.c b/src/video_out/video_out_xxmc.c index aa47eb2ae..e35ce5f12 100644 --- a/src/video_out/video_out_xxmc.c +++ b/src/video_out/video_out_xxmc.c @@ -1698,7 +1698,11 @@ static void xxmc_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) */ if ( (frame->width != this->sc.delivered_width) || (frame->height != this->sc.delivered_height) - || (frame->ratio != this->sc.delivered_ratio) ) { + || (frame->ratio != this->sc.delivered_ratio) + || (frame->vo_frame.crop_left != this->sc.crop_left) + || (frame->vo_frame.crop_right != this->sc.crop_right) + || (frame->vo_frame.crop_top != this->sc.crop_top) + || (frame->vo_frame.crop_bottom != this->sc.crop_bottom) ) { lprintf("frame format changed\n"); this->sc.force_redraw = 1; /* trigger re-calc of output size */ } -- cgit v1.2.3