From 5d1eb8ce896f7a4140bab2f3de8862d9eaf986ed Mon Sep 17 00:00:00 2001 From: gb Date: Thu, 29 Apr 2010 17:51:57 +0000 Subject: [PATCH] Add gst_vaapi_decoder_pause(). --- gst-libs/gst/vaapi/gstvaapidecoder.c | 42 +++++++++++++++++++++++++----------- gst-libs/gst/vaapi/gstvaapidecoder.h | 3 +++ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapidecoder.c b/gst-libs/gst/vaapi/gstvaapidecoder.c index 568212b..a6c848c 100644 --- a/gst-libs/gst/vaapi/gstvaapidecoder.c +++ b/gst-libs/gst/vaapi/gstvaapidecoder.c @@ -440,18 +440,35 @@ gst_vaapi_decoder_init(GstVaapiDecoder *decoder) gboolean gst_vaapi_decoder_start(GstVaapiDecoder *decoder) { - /* This is an internal function */ - GstVaapiDecoderPrivate * const priv = decoder->priv; + g_return_val_if_fail(GST_VAAPI_IS_DECODER(decoder), FALSE); - if (priv->decoder_task) + if (decoder->priv->decoder_task) return TRUE; - priv->decoder_task = gst_task_create(decoder_task, decoder); - if (!priv->decoder_task) + decoder->priv->decoder_task = gst_task_create(decoder_task, decoder); + if (!decoder->priv->decoder_task) return FALSE; - gst_task_set_lock(priv->decoder_task, &priv->decoder_task_lock); - return gst_task_start(priv->decoder_task); + gst_task_set_lock(decoder->priv->decoder_task, &decoder->priv->decoder_task_lock); + return gst_task_start(decoder->priv->decoder_task); +} + +/** + * gst_vaapi_decoder_pause: + * @decoder: a #GstVaapiDecoder + * + * Pauses the decoder. It can be made active again through + * gst_vaapi_decoder_start() or definitely stopped through + * gst_vaapi_decoder_stop(). + * + * Return value: %TRUE on success + */ +gboolean +gst_vaapi_decoder_pause(GstVaapiDecoder *decoder) +{ + g_return_val_if_fail(GST_VAAPI_IS_DECODER(decoder), FALSE); + + return gst_task_pause(decoder->priv->decoder_task); } /** @@ -468,15 +485,16 @@ gst_vaapi_decoder_start(GstVaapiDecoder *decoder) gboolean gst_vaapi_decoder_stop(GstVaapiDecoder *decoder) { - /* This is an internal function */ - GstVaapiDecoderPrivate * const priv = decoder->priv; gboolean success; - if (!priv->decoder_task) + g_return_val_if_fail(GST_VAAPI_IS_DECODER(decoder), FALSE); + + if (!decoder->priv->decoder_task) return FALSE; - success = gst_task_join(priv->decoder_task); - priv->decoder_task = NULL; + success = gst_task_join(decoder->priv->decoder_task); + g_object_unref(decoder->priv->decoder_task); + decoder->priv->decoder_task = NULL; return success; } diff --git a/gst-libs/gst/vaapi/gstvaapidecoder.h b/gst-libs/gst/vaapi/gstvaapidecoder.h index f526cde..b3a212e 100644 --- a/gst-libs/gst/vaapi/gstvaapidecoder.h +++ b/gst-libs/gst/vaapi/gstvaapidecoder.h @@ -128,6 +128,9 @@ gboolean gst_vaapi_decoder_start(GstVaapiDecoder *decoder); gboolean +gst_vaapi_decoder_pause(GstVaapiDecoder *decoder); + +gboolean gst_vaapi_decoder_stop(GstVaapiDecoder *decoder); gboolean -- 2.7.4