Fix seek issue
[profile/ivi/gstreamer-vaapi.git] / gst-libs / gst / vaapi / gstvaapidecoder.c
old mode 100644 (file)
new mode 100755 (executable)
index 0df566d..489ae2f
@@ -90,7 +90,7 @@ pop_buffer(GstVaapiDecoder *decoder)
 }
 
 static GstVaapiDecoderStatus
-decode_step(GstVaapiDecoder *decoder)
+decode_step(GstVaapiDecoder *decoder, gboolean *try_again)
 {
     GstVaapiDecoderStatus status;
     GstBuffer *buffer;
@@ -101,7 +101,15 @@ decode_step(GstVaapiDecoder *decoder)
         return status;
 
     do {
-        buffer = pop_buffer(decoder);
+        if (*try_again){
+            buffer = gst_buffer_new();
+            if (buffer){
+                gst_buffer_set_data(buffer, NULL, 0);
+            }
+            *try_again = FALSE;
+        }else{
+            buffer = pop_buffer(decoder);
+        }
         if (!buffer)
             return GST_VAAPI_DECODER_STATUS_ERROR_NO_DATA;
 
@@ -413,6 +421,7 @@ gst_vaapi_decoder_put_buffer(GstVaapiDecoder *decoder, GstBuffer *buf)
  * gst_vaapi_decoder_get_surface:
  * @decoder: a #GstVaapiDecoder
  * @pstatus: return location for the decoder status, or %NULL
+ * @try_again: a #gboolean
  *
  * Flushes encoded buffers to the decoder and returns a decoded
  * surface, if any.
@@ -424,7 +433,8 @@ gst_vaapi_decoder_put_buffer(GstVaapiDecoder *decoder, GstBuffer *buf)
 GstVaapiSurfaceProxy *
 gst_vaapi_decoder_get_surface(
     GstVaapiDecoder       *decoder,
-    GstVaapiDecoderStatus *pstatus
+    GstVaapiDecoderStatus *pstatus,
+    gboolean              try_again
 )
 {
     GstVaapiSurfaceProxy *proxy;
@@ -438,7 +448,7 @@ gst_vaapi_decoder_get_surface(
     proxy = pop_surface(decoder);
     if (!proxy) {
         do {
-            status = decode_step(decoder);
+            status = decode_step(decoder, &try_again);
         } while (status == GST_VAAPI_DECODER_STATUS_SUCCESS);
         proxy = pop_surface(decoder);
     }