return TRUE;
}
- if (enc_class->finish) {
+ if (enc_class->reset) {
GST_DEBUG_OBJECT (enc, "requesting subclass to finish");
- ret = enc_class->finish (enc);
+ ret = enc_class->reset (enc);
}
/* everything should be away now */
if (codec->frames) {
gst_base_video_encoder_sink_eventfunc (GstBaseVideoEncoder * base_video_encoder,
GstEvent * event)
{
+ GstBaseVideoEncoderClass *base_video_encoder_class;
gboolean ret = FALSE;
+ base_video_encoder_class =
+ GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
+
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
{
+ GstFlowReturn flow_ret;
+
base_video_encoder->a.at_eos = TRUE;
- gst_base_video_encoder_drain (base_video_encoder);
+
+ if (base_video_encoder_class->finish) {
+ flow_ret = base_video_encoder_class->finish (base_video_encoder);
+ } else {
+ flow_ret = GST_FLOW_OK;
+ }
+
+ ret = (flow_ret == GST_BASE_VIDEO_ENCODER_FLOW_DROPPED);
break;
}
case GST_EVENT_NEWSEGMENT:
*/
#define GST_BASE_VIDEO_ENCODER_SRC_NAME "src"
+/**
+ * GST_BASE_VIDEO_ENCODER_FLOW_DROPPED:
+ *
+ * Returned when the event/buffer should be dropped.
+ */
+#define GST_BASE_VIDEO_ENCODER_FLOW_DROPPED GST_FLOW_CUSTOM_SUCCESS_1
typedef struct _GstBaseVideoEncoder GstBaseVideoEncoder;
typedef struct _GstBaseVideoEncoderClass GstBaseVideoEncoderClass;
GstFlowReturn (*handle_frame) (GstBaseVideoEncoder *coder,
GstVideoFrame *frame);
- gboolean (*finish) (GstBaseVideoEncoder *coder);
+ gboolean (*reset) (GstBaseVideoEncoder *coder);
+ GstFlowReturn (*finish) (GstBaseVideoEncoder *coder);
GstFlowReturn (*shape_output) (GstBaseVideoEncoder *coder,
GstVideoFrame *frame);