summaryrefslogtreecommitdiffstats
path: root/gst/dvdspu
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2009-05-14 10:55:38 +0100
committerJan Schmidt <thaytan@noraisin.net>2009-05-14 11:28:14 +0100
commit29b44a5e2f058689ba7ecec00b5355c8cf0dc642 (patch)
tree01e9215c44ad126dc520cbf56b97798ab51254ac /gst/dvdspu
parentb769f22404ca1d566b38b50854f184b5eda628fd (diff)
downloadgst-plugins-bad-29b44a5e2f058689ba7ecec00b5355c8cf0dc642.tar.gz
gst-plugins-bad-29b44a5e2f058689ba7ecec00b5355c8cf0dc642.tar.bz2
gst-plugins-bad-29b44a5e2f058689ba7ecec00b5355c8cf0dc642.zip
dvdspu: Push update frame, if any, when entering stills.
When entering a still frame generates an updated buffer, make sure to push it out, otherwise we may not put a frame onscreen with a rendered button, causing raciness as to whether buttons get drawn or not when jumping back to the menu on some discs.
Diffstat (limited to 'gst/dvdspu')
-rw-r--r--gst/dvdspu/gstdvdspu.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c
index 82048529..703c405b 100644
--- a/gst/dvdspu/gstdvdspu.c
+++ b/gst/dvdspu/gstdvdspu.c
@@ -417,6 +417,8 @@ gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
gboolean in_still;
if (gst_structure_get_boolean (structure, "still-state", &in_still)) {
+ GstBuffer *to_push = NULL;
+
GST_DEBUG_OBJECT (dvdspu,
"DVD event of type %s on video pad: in-still = %d", event_type,
in_still);
@@ -431,10 +433,15 @@ gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
* screen, otherwise the last frame might have been discarded
* by QoS */
gst_dvd_spu_redraw_still (dvdspu, TRUE);
+ to_push = dvdspu->pending_frame;
+ dvdspu->pending_frame = NULL;
+
} else {
state->flags &= ~(SPU_STATE_STILL_FRAME);
}
DVD_SPU_UNLOCK (dvdspu);
+ if (to_push)
+ gst_pad_push (dvdspu->srcpad, to_push);
}
gst_event_unref (event);
res = TRUE;