vaapidecode: flush buffers when receiving EOS.
authorWind Yuan <feng.yuan@intel.com>
Mon, 27 Aug 2012 02:29:04 +0000 (22:29 -0400)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 9 Oct 2012 12:01:15 +0000 (14:01 +0200)
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
gst/vaapi/gstvaapidecode.c

index 100ca52..cd11f36 100644 (file)
@@ -407,6 +407,18 @@ gst_vaapidecode_reset(GstVaapiDecode *decode, GstCaps *caps)
     return gst_vaapidecode_create(decode, caps);
 }
 
+static gboolean
+gst_vaapidecode_flush(GstVaapiDecode *decode)
+{
+    g_return_val_if_fail(decode->decoder, FALSE);
+
+    if (!gst_vaapi_decoder_put_buffer(decode->decoder, NULL))
+        return FALSE;
+    if (gst_vaapidecode_step(decode) != GST_FLOW_OK)
+        return FALSE;
+    return TRUE;
+}
+
 /* GstImplementsInterface interface */
 
 static gboolean
@@ -680,6 +692,11 @@ gst_vaapidecode_sink_event(GstPad *pad, GstEvent *event)
             return TRUE;
         }
         break;
+    case GST_EVENT_EOS:
+        if (!gst_vaapidecode_flush(decode)) {
+            GST_WARNING("failed to flush buffers");
+        }
+        break;
     default:
         break;
     }