}
static GstVaapiDecoderStatus
-decode_step(GstVaapiDecoder *decoder)
+decode_step(GstVaapiDecoder *decoder, gboolean *try_again)
{
GstVaapiDecoderStatus status;
GstBuffer *buffer;
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;
* 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.
GstVaapiSurfaceProxy *
gst_vaapi_decoder_get_surface(
GstVaapiDecoder *decoder,
- GstVaapiDecoderStatus *pstatus
+ GstVaapiDecoderStatus *pstatus,
+ gboolean try_again
)
{
GstVaapiSurfaceProxy *proxy;
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);
}