diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-02-01 21:15:20 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-02-01 21:15:20 +0000 |
commit | 385671eb807bb0174002a71aa3fac99c3ebe8460 (patch) | |
tree | 6f6f04f42741138b54daf0a5362265c1cdfc6714 | |
parent | d40aa0a0dfbe2025f7451400348842753a7c8281 (diff) |
ext/ffmpeg/gstffmpegdec.c: Don´t SIGFPE right away.
Original commit message from CVS:
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_frame):
Don´t SIGFPE right away.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | ext/ffmpeg/gstffmpegdec.c | 31 |
2 files changed, 35 insertions, 11 deletions
@@ -1,3 +1,18 @@ +2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + + * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_frame): + Don´t SIGFPE right away. + +2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + + reviewed by: <delete if not using a buddy> + + * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_lowres_get_type), + (gst_ffmpegdec_skipframe_get_type), (gst_ffmpegdec_class_init), + (gst_ffmpegdec_init), (gst_ffmpegdec_connect), + (gst_ffmpegdec_frame), (gst_ffmpegdec_set_property), + (gst_ffmpegdec_get_property): + 2005-01-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net> * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_lowres_get_type), diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index 9b178c9..1ce74cd 100644 --- a/ext/ffmpeg/gstffmpegdec.c +++ b/ext/ffmpeg/gstffmpegdec.c @@ -660,26 +660,35 @@ gst_ffmpegdec_frame (GstFFMpegDec * ffmpegdec, * For B-frame containing movies, we get all pictures delayed * except for the I frames, so we synchronize only on I frames * and keep an internal counter based on FPS for the others. */ - if (ffmpegdec->picture->pict_type == FF_I_TYPE && - GST_CLOCK_TIME_IS_VALID (*in_ts) && - ffmpegdec->context->frame_rate > 0) { + if ((ffmpegdec->picture->pict_type == FF_I_TYPE || + !GST_CLOCK_TIME_IS_VALID (ffmpegdec->next_ts)) && + GST_CLOCK_TIME_IS_VALID (*in_ts)) { ffmpegdec->next_ts = *in_ts; } GST_BUFFER_TIMESTAMP (outbuf) = ffmpegdec->next_ts; - GST_BUFFER_DURATION (outbuf) = GST_SECOND * - ffmpegdec->context->frame_rate_base / - ffmpegdec->context->frame_rate; - ffmpegdec->next_ts += GST_BUFFER_DURATION (outbuf); + if (ffmpegdec->context->frame_rate_base != 0 && + ffmpegdec->context->frame_rate != 0) { + GST_BUFFER_DURATION (outbuf) = GST_SECOND * + ffmpegdec->context->frame_rate_base / + ffmpegdec->context->frame_rate; + ffmpegdec->next_ts += GST_BUFFER_DURATION (outbuf); + } else { + ffmpegdec->next_ts = GST_CLOCK_TIME_NONE; + } } else if (ffmpegdec->picture->pict_type != -1) { /* update time for skip-frame */ - if (ffmpegdec->picture->pict_type == FF_I_TYPE && - GST_CLOCK_TIME_IS_VALID (*in_ts) && - ffmpegdec->context->frame_rate > 0) { + if ((ffmpegdec->picture->pict_type == FF_I_TYPE || + !GST_CLOCK_TIME_IS_VALID (ffmpegdec->next_ts)) && + GST_CLOCK_TIME_IS_VALID (*in_ts)) { ffmpegdec->next_ts = *in_ts; - } else { + } + if (ffmpegdec->context->frame_rate_base != 0 && + ffmpegdec->context->frame_rate != 0) { ffmpegdec->next_ts += GST_SECOND * ffmpegdec->context->frame_rate_base / ffmpegdec->context->frame_rate; + } else { + ffmpegdec->next_ts = GST_CLOCK_TIME_NONE; } } break; |