summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2010-09-18 17:28:48 -0700
committerDavid Schleef <ds@schleef.org>2010-09-18 19:27:07 -0700
commit7cd2e0dd3e8e9b9f357b05c1ef4d3c94a8ed23a9 (patch)
treeebcafb0cc169b132067a4505545afaec4687cdf3 /gst-libs
parent8dfcc11bcb2e6b3c111318843ff7820e8e6c6038 (diff)
basevideo: Move deadline to frame structure
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/video/gstbasevideodecoder.c27
-rw-r--r--gst-libs/gst/video/gstbasevideodecoder.h6
-rw-r--r--gst-libs/gst/video/gstbasevideoutils.h1
3 files changed, 22 insertions, 12 deletions
diff --git a/gst-libs/gst/video/gstbasevideodecoder.c b/gst-libs/gst/video/gstbasevideodecoder.c
index f05fd4568..1aafeec1b 100644
--- a/gst-libs/gst/video/gstbasevideodecoder.c
+++ b/gst-libs/gst/video/gstbasevideodecoder.c
@@ -1341,8 +1341,6 @@ gst_base_video_decoder_have_frame_2 (GstBaseVideoDecoder * base_video_decoder)
GstVideoFrame *frame = base_video_decoder->current_frame;
GstBaseVideoDecoderClass *base_video_decoder_class;
GstFlowReturn ret = GST_FLOW_OK;
- GstClockTime running_time;
- GstClockTimeDiff deadline;
base_video_decoder_class =
GST_BASE_VIDEO_DECODER_GET_CLASS (base_video_decoder);
@@ -1361,17 +1359,11 @@ gst_base_video_decoder_have_frame_2 (GstBaseVideoDecoder * base_video_decoder)
base_video_decoder->frames = g_list_append (base_video_decoder->frames,
frame);
- running_time = gst_segment_to_running_time (&base_video_decoder->segment,
+ frame->deadline = gst_segment_to_running_time (&base_video_decoder->segment,
GST_FORMAT_TIME, frame->presentation_timestamp);
- if (GST_CLOCK_TIME_IS_VALID (base_video_decoder->earliest_time))
- deadline = GST_CLOCK_DIFF (base_video_decoder->earliest_time, running_time);
- else
- deadline = G_MAXINT64;
-
/* do something with frame */
- ret = base_video_decoder_class->handle_frame (base_video_decoder, frame,
- deadline);
+ ret = base_video_decoder_class->handle_frame (base_video_decoder, frame);
if (!GST_FLOW_IS_SUCCESS (ret)) {
GST_DEBUG ("flow error!");
}
@@ -1498,3 +1490,18 @@ gst_base_video_decoder_alloc_src_frame (GstBaseVideoDecoder *
return flow_ret;
}
+
+GstClockTimeDiff
+gst_base_video_decoder_get_max_decode_time (GstBaseVideoDecoder *
+ base_video_decoder, GstVideoFrame * frame)
+{
+ GstClockTimeDiff deadline;
+
+ if (GST_CLOCK_TIME_IS_VALID (base_video_decoder->earliest_time))
+ deadline = GST_CLOCK_DIFF (base_video_decoder->earliest_time,
+ frame->deadline);
+ else
+ deadline = G_MAXINT64;
+
+ return deadline;
+}
diff --git a/gst-libs/gst/video/gstbasevideodecoder.h b/gst-libs/gst/video/gstbasevideodecoder.h
index 02f1fd3a7..6bc606d9c 100644
--- a/gst-libs/gst/video/gstbasevideodecoder.h
+++ b/gst-libs/gst/video/gstbasevideodecoder.h
@@ -133,8 +133,7 @@ struct _GstBaseVideoDecoderClass
int offset, int n);
GstFlowReturn (*parse_data) (GstBaseVideoDecoder *decoder, gboolean at_eos);
GstFlowReturn (*finish) (GstBaseVideoDecoder *coder);
- GstFlowReturn (*handle_frame) (GstBaseVideoDecoder *coder, GstVideoFrame *frame,
- GstClockTimeDiff deadline);
+ GstFlowReturn (*handle_frame) (GstBaseVideoDecoder *coder, GstVideoFrame *frame);
GstFlowReturn (*shape_output) (GstBaseVideoDecoder *coder, GstVideoFrame *frame);
GstCaps *(*get_caps) (GstBaseVideoDecoder *coder);
@@ -171,6 +170,9 @@ void gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder *base_video_decode
GstFlowReturn gst_base_video_decoder_alloc_src_frame (GstBaseVideoDecoder *base_video_decoder,
GstVideoFrame *frame);
+GstClockTimeDiff gst_base_video_decoder_get_max_decode_time (
+ GstBaseVideoDecoder *base_video_decoder, GstVideoFrame *frame);
+
G_END_DECLS
#endif
diff --git a/gst-libs/gst/video/gstbasevideoutils.h b/gst-libs/gst/video/gstbasevideoutils.h
index f644218c3..2412eb22d 100644
--- a/gst-libs/gst/video/gstbasevideoutils.h
+++ b/gst-libs/gst/video/gstbasevideoutils.h
@@ -78,6 +78,7 @@ struct _GstVideoFrame
int n_fields;
void *coder_hook;
+ GstClockTime deadline;
};
gboolean gst_base_video_rawvideo_convert (GstVideoState *state,