static gboolean gst_dirac_enc_start (GstBaseVideoEncoder * base_video_encoder);
static gboolean gst_dirac_enc_stop (GstBaseVideoEncoder * base_video_encoder);
static gboolean gst_dirac_enc_finish (GstBaseVideoEncoder * base_video_encoder);
-static gboolean gst_dirac_enc_handle_frame (GstBaseVideoEncoder *
+static GstFlowReturn gst_dirac_enc_handle_frame (GstBaseVideoEncoder *
base_video_encoder, GstVideoFrame * frame);
static GstFlowReturn gst_dirac_enc_shape_output (GstBaseVideoEncoder *
base_video_encoder, GstVideoFrame * frame);
return TRUE;
}
-static gboolean
+static GstFlowReturn
gst_dirac_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder,
GstVideoFrame * frame)
{
GstDiracEnc *dirac_enc = GST_DIRAC_ENC (base_video_encoder);
- gboolean ret;
+ GstFlowReturn ret;
int r;
const GstVideoState *state;
uint8_t *data;
}
if (r != (int) GST_BUFFER_SIZE (frame->sink_buffer)) {
GST_ERROR ("failed to push picture");
- return FALSE;
+ return GST_FLOW_ERROR;
}
GST_DEBUG ("handle frame");
ret = gst_dirac_enc_process (dirac_enc, FALSE);
- return (ret == GST_FLOW_OK);
+ return ret;
}
#if 0
static gboolean gst_vp8_enc_set_format (GstBaseVideoEncoder *
base_video_encoder, GstVideoState * state);
static gboolean gst_vp8_enc_finish (GstBaseVideoEncoder * base_video_encoder);
-static gboolean gst_vp8_enc_handle_frame (GstBaseVideoEncoder *
+static GstFlowReturn gst_vp8_enc_handle_frame (GstBaseVideoEncoder *
base_video_encoder, GstVideoFrame * frame);
static GstFlowReturn gst_vp8_enc_shape_output (GstBaseVideoEncoder * encoder,
GstVideoFrame * frame);
return caps;
}
-static void
+static GstFlowReturn
gst_vp8_enc_process (GstVP8Enc * encoder)
{
vpx_codec_iter_t iter = NULL;
GstBaseVideoEncoder *base_video_encoder;
GstVP8EncCoderHook *hook;
GstVideoFrame *frame;
+ GstFlowReturn ret = GST_FLOW_OK;
base_video_encoder = GST_BASE_VIDEO_ENCODER (encoder);
hook->invisible = g_list_append (hook->invisible, buffer);
} else {
frame->src_buffer = buffer;
- gst_base_video_encoder_finish_frame (base_video_encoder, frame);
+ ret = gst_base_video_encoder_finish_frame (base_video_encoder, frame);
}
pkt = vpx_codec_get_cx_data (&encoder->encoder, &iter);
}
+
+ return ret;
}
static gboolean
VPX_DL_REALTIME,
};
-static gboolean
+static GstFlowReturn
gst_vp8_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder,
GstVideoFrame * frame)
{
return FALSE;
}
- gst_vp8_enc_process (encoder);
-
- return TRUE;
+ return gst_vp8_enc_process (encoder);
}
static guint64
GstBaseVideoEncoder *base_video_encoder;
GstBaseVideoEncoderClass *klass;
GstVideoFrame *frame;
+ GstFlowReturn ret = GST_FLOW_OK;
base_video_encoder = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
klass = GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
GST_LOG_OBJECT (base_video_encoder, "passing frame pfn %d to subclass",
frame->presentation_frame_number);
- klass->handle_frame (base_video_encoder, frame);
+ ret = klass->handle_frame (base_video_encoder, frame);
done:
g_object_unref (base_video_encoder);
- return GST_FLOW_OK;
+ return ret;
}
static GstStateChangeReturn
gboolean (*start) (GstBaseVideoEncoder *coder);
gboolean (*stop) (GstBaseVideoEncoder *coder);
gboolean (*finish) (GstBaseVideoEncoder *coder);
- gboolean (*handle_frame) (GstBaseVideoEncoder *coder, GstVideoFrame *frame);
+ GstFlowReturn (*handle_frame) (GstBaseVideoEncoder *coder, GstVideoFrame *frame);
GstFlowReturn (*shape_output) (GstBaseVideoEncoder *coder, GstVideoFrame *frame);
gboolean (*event) (GstBaseVideoEncoder *coder, GstEvent *event);
GstCaps *(*get_caps) (GstBaseVideoEncoder *coder);