dvdspu: Push update frame, if any, when entering stills.
authorJan Schmidt <thaytan@noraisin.net>
Thu, 14 May 2009 09:55:38 +0000 (10:55 +0100)
committerJan Schmidt <thaytan@noraisin.net>
Thu, 14 May 2009 10:28:14 +0000 (11:28 +0100)
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.

gst/dvdspu/gstdvdspu.c

index 8204852..703c405 100644 (file)
@@ -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;