mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-12 18:35:35 +00:00
parent
4f432e09fa
commit
50e1a73bbc
2 changed files with 13 additions and 1 deletions
|
@ -92,6 +92,8 @@ gst_base_video_encoder_init (GstBaseVideoEncoder * base_video_encoder,
|
||||||
gst_pad_set_query_type_function (pad, gst_base_video_encoder_get_query_types);
|
gst_pad_set_query_type_function (pad, gst_base_video_encoder_get_query_types);
|
||||||
gst_pad_set_query_function (pad, gst_base_video_encoder_src_query);
|
gst_pad_set_query_function (pad, gst_base_video_encoder_src_query);
|
||||||
gst_pad_set_event_function (pad, gst_base_video_encoder_src_event);
|
gst_pad_set_event_function (pad, gst_base_video_encoder_src_event);
|
||||||
|
|
||||||
|
base_video_encoder->a.at_eos = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -168,6 +170,7 @@ gst_base_video_encoder_sink_event (GstPad * pad, GstEvent * event)
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:
|
||||||
{
|
{
|
||||||
|
base_video_encoder->a.at_eos = TRUE;
|
||||||
if (base_video_encoder_class->finish) {
|
if (base_video_encoder_class->finish) {
|
||||||
base_video_encoder_class->finish (base_video_encoder);
|
base_video_encoder_class->finish (base_video_encoder);
|
||||||
}
|
}
|
||||||
|
@ -196,6 +199,7 @@ gst_base_video_encoder_sink_event (GstPad * pad, GstEvent * event)
|
||||||
GST_DEBUG ("new segment %" GST_TIME_FORMAT " %" GST_TIME_FORMAT,
|
GST_DEBUG ("new segment %" GST_TIME_FORMAT " %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (start), GST_TIME_ARGS (position));
|
GST_TIME_ARGS (start), GST_TIME_ARGS (position));
|
||||||
|
|
||||||
|
base_video_encoder->a.at_eos = FALSE;
|
||||||
gst_segment_set_newsegment_full (&GST_BASE_VIDEO_CODEC
|
gst_segment_set_newsegment_full (&GST_BASE_VIDEO_CODEC
|
||||||
(base_video_encoder)->segment, update, rate, applied_rate, format,
|
(base_video_encoder)->segment, update, rate, applied_rate, format,
|
||||||
start, stop, position);
|
start, stop, position);
|
||||||
|
@ -386,6 +390,10 @@ gst_base_video_encoder_chain (GstPad * pad, GstBuffer * buf)
|
||||||
base_video_encoder = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
|
base_video_encoder = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
|
||||||
klass = GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
|
klass = GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
|
||||||
|
|
||||||
|
if (base_video_encoder->a.at_eos) {
|
||||||
|
return GST_FLOW_UNEXPECTED;
|
||||||
|
}
|
||||||
|
|
||||||
if (base_video_encoder->sink_clipping) {
|
if (base_video_encoder->sink_clipping) {
|
||||||
gint64 start = GST_BUFFER_TIMESTAMP (buf);
|
gint64 start = GST_BUFFER_TIMESTAMP (buf);
|
||||||
gint64 stop = start + GST_BUFFER_DURATION (buf);
|
gint64 stop = start + GST_BUFFER_DURATION (buf);
|
||||||
|
|
|
@ -75,9 +75,13 @@ struct _GstBaseVideoEncoder
|
||||||
gint64 max_latency;
|
gint64 max_latency;
|
||||||
|
|
||||||
gboolean force_keyframe;
|
gboolean force_keyframe;
|
||||||
|
union {
|
||||||
|
void *padding;
|
||||||
|
gboolean at_eos;
|
||||||
|
} a;
|
||||||
|
|
||||||
/* FIXME before moving to base */
|
/* FIXME before moving to base */
|
||||||
void *padding[GST_PADDING_LARGE];
|
void *padding[GST_PADDING_LARGE-1];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstBaseVideoEncoderClass
|
struct _GstBaseVideoEncoderClass
|
||||||
|
|
Loading…
Reference in a new issue