summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--omx/gstomxvideoenc.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c
index f266596..1d302bd 100644
--- a/omx/gstomxvideoenc.c
+++ b/omx/gstomxvideoenc.c
@@ -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);
+}