+2007-03-23 Michael Smith <msmith@fluendo.com>
+
+ * gst/videorate/gstvideorate.c: (gst_video_rate_setcaps),
+ (gst_video_rate_reset), (gst_video_rate_chain):
+ If videorate changes caps, we can no longer use the old buffer
+ (which may have a different size, incompatible with our caps).
+ So don't do that; just duplicate the new frame more times.
+
2007-03-22 Jan Schmidt <thaytan@mad.scientist.com>
* gst/playback/gstplaybin.c: (gst_play_bin_class_init):
gst_object_unref (opeer);
}
done:
+ /* After a setcaps, our caps may have changed. In that case, we can't use
+ * the old buffer, if there was one (it might have different dimensions) */
+ gst_video_rate_swap_prev (videorate, NULL, 0);
+
gst_object_unref (videorate);
return ret;
videorate->out = 0;
videorate->drop = 0;
videorate->dup = 0;
- videorate->next_ts = G_GINT64_CONSTANT (0);
+ videorate->next_ts = GST_CLOCK_TIME_NONE;
gst_video_rate_swap_prev (videorate, NULL, 0);
gst_segment_init (&videorate->segment, GST_FORMAT_TIME);
if (videorate->prevbuf == NULL) {
gst_video_rate_swap_prev (videorate, buffer, intime);
videorate->in++;
- /* new buffer, we expect to output a buffer that matches the first
- * timestamp in the segment */
- videorate->next_ts = videorate->segment.start;
+ if (!GST_CLOCK_TIME_IS_VALID (videorate->next_ts)) {
+ /* new buffer, we expect to output a buffer that matches the first
+ * timestamp in the segment */
+ videorate->next_ts = videorate->segment.start;
+ }
} else {
GstClockTime prevtime;
gint count = 0;