summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-02-01 21:15:20 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-02-01 21:15:20 +0000
commit385671eb807bb0174002a71aa3fac99c3ebe8460 (patch)
tree6f6f04f42741138b54daf0a5362265c1cdfc6714
parentd40aa0a0dfbe2025f7451400348842753a7c8281 (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--ChangeLog15
-rw-r--r--ext/ffmpeg/gstffmpegdec.c31
2 files changed, 35 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 21b8e0e..6c8bb1f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;