mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 08:41:07 +00:00
omxvideoenc: drain encoder on ALLOCATION and DRAIN queries
Ensure that the encoder releases all its input buffers when requested by upstream. Encoder input buffers may be shared with downstreaming (when using dmabuf), upstream may then request the encoder to drain when reconfiguring before destroying its buffers. Also drain on ALLOCATION query as we already do in kmssink as that notify of a format change. Fix "decoder ! encoder" pipeline when decoding a file with different resolutions on Zynq.
This commit is contained in:
parent
76267ec55d
commit
7c40a91c31
1 changed files with 28 additions and 0 deletions
|
@ -231,6 +231,8 @@ static GstCaps *gst_omx_video_enc_getcaps (GstVideoEncoder * encoder,
|
|||
GstCaps * filter);
|
||||
static gboolean gst_omx_video_enc_decide_allocation (GstVideoEncoder * encoder,
|
||||
GstQuery * query);
|
||||
static gboolean gst_omx_video_enc_sink_query (GstVideoEncoder * encoder,
|
||||
GstQuery * query);
|
||||
|
||||
static GstFlowReturn gst_omx_video_enc_drain (GstOMXVideoEnc * self);
|
||||
|
||||
|
@ -488,6 +490,8 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass)
|
|||
video_encoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_omx_video_enc_getcaps);
|
||||
video_encoder_class->decide_allocation =
|
||||
GST_DEBUG_FUNCPTR (gst_omx_video_enc_decide_allocation);
|
||||
video_encoder_class->sink_query =
|
||||
GST_DEBUG_FUNCPTR (gst_omx_video_enc_sink_query);
|
||||
|
||||
klass->cdata.type = GST_OMX_COMPONENT_TYPE_FILTER;
|
||||
klass->cdata.default_sink_template_caps =
|
||||
|
@ -3295,3 +3299,27 @@ gst_omx_video_enc_decide_allocation (GstVideoEncoder * encoder,
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_omx_video_enc_sink_query (GstVideoEncoder * encoder, GstQuery * query)
|
||||
{
|
||||
GstOMXVideoEnc *self = GST_OMX_VIDEO_ENC (encoder);
|
||||
|
||||
switch (GST_QUERY_TYPE (query)) {
|
||||
case GST_QUERY_ALLOCATION:
|
||||
case GST_QUERY_DRAIN:
|
||||
{
|
||||
GST_DEBUG_OBJECT (encoder, "%s query: drain encoder",
|
||||
GST_QUERY_TYPE_NAME (query));
|
||||
|
||||
gst_omx_video_enc_drain (self);
|
||||
return TRUE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return
|
||||
GST_VIDEO_ENCODER_CLASS (gst_omx_video_enc_parent_class)->sink_query
|
||||
(encoder, query);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue