summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2011-12-08 10:19:40 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2011-12-08 10:19:40 +0100
commitfd828c4ac70a7fb2d60a378ef8bc60cfcb1a9906 (patch)
tree297dd08c0d773eca19ea01fba09b6f9633071afe /gst-libs
parentbab4c11b4ca5ec63133ea8f56f1c78a41c3fcf98 (diff)
basevideoencoder: Fix handling of force-keyunit events
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/video/gstbasevideoencoder.c59
1 files changed, 31 insertions, 28 deletions
diff --git a/gst-libs/gst/video/gstbasevideoencoder.c b/gst-libs/gst/video/gstbasevideoencoder.c
index 8bef7e449..bdcb27525 100644
--- a/gst-libs/gst/video/gstbasevideoencoder.c
+++ b/gst-libs/gst/video/gstbasevideoencoder.c
@@ -1001,8 +1001,8 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
for (l = base_video_encoder->force_key_unit; l; l = l->next) {
ForcedKeyUnitEvent *tmp = l->data;
- /* Skip pending keyunits */
- if (tmp->pending)
+ /* Skip non-pending keyunits */
+ if (!tmp->pending)
continue;
/* Simple case, keyunit ASAP */
@@ -1017,36 +1017,39 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
break;
}
}
- base_video_encoder->force_key_unit =
- g_list_remove (base_video_encoder->force_key_unit, fevt);
- GST_OBJECT_UNLOCK (base_video_encoder);
- /* Should really be here */
- g_assert (fevt);
-
- stream_time =
- gst_segment_to_stream_time (&GST_BASE_VIDEO_CODEC
- (base_video_encoder)->segment, GST_FORMAT_TIME,
- frame->presentation_timestamp);
-
- ev = gst_video_event_new_downstream_force_key_unit
- (frame->presentation_timestamp, stream_time, running_time,
- fevt->all_headers, fevt->count);
-
- gst_pad_push_event (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder), ev);
+ if (fevt) {
+ base_video_encoder->force_key_unit =
+ g_list_remove (base_video_encoder->force_key_unit, fevt);
+ }
+ GST_OBJECT_UNLOCK (base_video_encoder);
- if (fevt->all_headers) {
- if (base_video_encoder->headers) {
- headers = gst_buffer_ref (base_video_encoder->headers);
- headers = gst_buffer_make_writable (headers);
+ if (fevt) {
+ stream_time =
+ gst_segment_to_stream_time (&GST_BASE_VIDEO_CODEC
+ (base_video_encoder)->segment, GST_FORMAT_TIME,
+ frame->presentation_timestamp);
+
+ ev = gst_video_event_new_downstream_force_key_unit
+ (frame->presentation_timestamp, stream_time, running_time,
+ fevt->all_headers, fevt->count);
+
+ gst_pad_push_event (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder),
+ ev);
+
+ if (fevt->all_headers) {
+ if (base_video_encoder->headers) {
+ headers = gst_buffer_ref (base_video_encoder->headers);
+ headers = gst_buffer_make_writable (headers);
+ }
}
- }
- GST_DEBUG_OBJECT (base_video_encoder,
- "Forced key unit: running-time %" GST_TIME_FORMAT
- ", all_headers %d, count %u",
- GST_TIME_ARGS (running_time), fevt->all_headers, fevt->count);
- forced_key_unit_event_free (fevt);
+ GST_DEBUG_OBJECT (base_video_encoder,
+ "Forced key unit: running-time %" GST_TIME_FORMAT
+ ", all_headers %d, count %u",
+ GST_TIME_ARGS (running_time), fevt->all_headers, fevt->count);
+ forced_key_unit_event_free (fevt);
+ }
}
if (frame->is_sync_point) {