codecs: {vp8,vp9}decoder: Cleanup drain code

Make them consistent with h26x decoder baseclass

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/987>
This commit is contained in:
Seungha Yang 2021-10-01 01:00:24 +09:00 committed by GStreamer Marge Bot
parent 9f4ea145e0
commit aab3ea2736
2 changed files with 36 additions and 23 deletions

View file

@ -76,7 +76,8 @@ static void gst_vp8_decoder_clear_output_frame (GstVp8DecoderOutputFrame *
output_frame);
static void gst_vp8_decoder_drain_output_queue (GstVp8Decoder * self,
guint num, GstFlowReturn * ret);
static GstFlowReturn gst_vp8_decoder_drain_internal (GstVp8Decoder * self,
gboolean wait_keyframe);
static void
gst_vp8_decoder_class_init (GstVp8DecoderClass * klass)
@ -273,18 +274,29 @@ done:
}
static GstFlowReturn
gst_vp8_decoder_finish (GstVideoDecoder * decoder)
gst_vp8_decoder_drain_internal (GstVp8Decoder * self, gboolean wait_keyframe)
{
GstVp8Decoder *self = GST_VP8_DECODER (decoder);
GstFlowReturn ret = GST_FLOW_OK;
GstVp8DecoderPrivate *priv = self->priv;
GST_DEBUG_OBJECT (self, "finish");
gst_vp8_decoder_drain_output_queue (self, 0, &ret);
gst_vp8_picture_clear (&self->last_picture);
gst_vp8_picture_clear (&self->golden_ref_picture);
gst_vp8_picture_clear (&self->alt_ref_picture);
gst_vp8_decoder_drain_output_queue (GST_VP8_DECODER (decoder), 0, &ret);
priv->wait_keyframe = wait_keyframe;
return ret;
}
static GstFlowReturn
gst_vp8_decoder_finish (GstVideoDecoder * decoder)
{
GST_DEBUG_OBJECT (decoder, "finish");
return gst_vp8_decoder_drain_internal (GST_VP8_DECODER (decoder), TRUE);
}
static gboolean
gst_vp8_decoder_flush (GstVideoDecoder * decoder)
{
@ -300,15 +312,9 @@ gst_vp8_decoder_flush (GstVideoDecoder * decoder)
static GstFlowReturn
gst_vp8_decoder_drain (GstVideoDecoder * decoder)
{
GstVp8Decoder *self = GST_VP8_DECODER (decoder);
GstFlowReturn ret = GST_FLOW_OK;
GST_DEBUG_OBJECT (decoder, "drain");
GST_DEBUG_OBJECT (self, "drain");
gst_vp8_decoder_drain_output_queue (GST_VP8_DECODER (decoder), 0, &ret);
gst_vp8_decoder_reset (self);
return ret;
return gst_vp8_decoder_drain_internal (GST_VP8_DECODER (decoder), TRUE);
}
static void

View file

@ -110,6 +110,8 @@ static void
gst_vp9_decoder_clear_output_frame (GstVp9DecoderOutputFrame * output_frame);
static void gst_vp9_decoder_drain_output_queue (GstVp9Decoder * self,
guint num, GstFlowReturn * ret);
static GstFlowReturn gst_vp9_decoder_drain_internal (GstVp9Decoder * self,
gboolean wait_keyframe);
static void
gst_vp9_decoder_class_init (GstVp9DecoderClass * klass)
@ -249,18 +251,28 @@ gst_vp9_decoder_reset (GstVp9Decoder * self)
}
static GstFlowReturn
gst_vp9_decoder_finish (GstVideoDecoder * decoder)
gst_vp9_decoder_drain_internal (GstVp9Decoder * self, gboolean wait_keyframe)
{
GstFlowReturn ret = GST_FLOW_OK;
GstVp9DecoderPrivate *priv = self->priv;
GST_DEBUG_OBJECT (decoder, "finish");
gst_vp9_decoder_drain_output_queue (self, 0, &ret);
if (priv->dpb)
gst_vp9_dpb_clear (priv->dpb);
gst_vp9_decoder_drain_output_queue (GST_VP9_DECODER (decoder), 0, &ret);
gst_vp9_decoder_reset (GST_VP9_DECODER (decoder));
priv->wait_keyframe = wait_keyframe;
return ret;
}
static GstFlowReturn
gst_vp9_decoder_finish (GstVideoDecoder * decoder)
{
GST_DEBUG_OBJECT (decoder, "finish");
return gst_vp9_decoder_drain_internal (GST_VP9_DECODER (decoder), TRUE);
}
static gboolean
gst_vp9_decoder_flush (GstVideoDecoder * decoder)
{
@ -274,14 +286,9 @@ gst_vp9_decoder_flush (GstVideoDecoder * decoder)
static GstFlowReturn
gst_vp9_decoder_drain (GstVideoDecoder * decoder)
{
GstFlowReturn ret = GST_FLOW_OK;
GST_DEBUG_OBJECT (decoder, "drain");
gst_vp9_decoder_drain_output_queue (GST_VP9_DECODER (decoder), 0, &ret);
gst_vp9_decoder_reset (GST_VP9_DECODER (decoder));
return ret;
return gst_vp9_decoder_drain_internal (GST_VP9_DECODER (decoder), TRUE);
}
static void