diff options
author | David Schleef <ds@schleef.org> | 2010-09-18 17:28:48 -0700 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2010-09-18 19:27:07 -0700 |
commit | 7cd2e0dd3e8e9b9f357b05c1ef4d3c94a8ed23a9 (patch) | |
tree | ebcafb0cc169b132067a4505545afaec4687cdf3 /gst-libs | |
parent | 8dfcc11bcb2e6b3c111318843ff7820e8e6c6038 (diff) |
basevideo: Move deadline to frame structure
Diffstat (limited to 'gst-libs')
-rw-r--r-- | gst-libs/gst/video/gstbasevideodecoder.c | 27 | ||||
-rw-r--r-- | gst-libs/gst/video/gstbasevideodecoder.h | 6 | ||||
-rw-r--r-- | gst-libs/gst/video/gstbasevideoutils.h | 1 |
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, |