2006-03-23 Wim Taymans <wim@fluendo.com>
+ Patch by: Julien MOUTTE <julien at moutte dot net>
+
+ * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_query),
+ (gst_video_test_src_do_seek), (gst_video_test_src_create):
+ Partially handle 0 framerate, only EOS after the first frame
+ is missing.
+
+2006-03-23 Wim Taymans <wim@fluendo.com>
+
Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
switch (dest_fmt) {
case GST_FORMAT_TIME:
/* frames to time */
- dest_val = gst_util_uint64_scale (src_val,
- src->rate_denominator * GST_SECOND, src->rate_numerator);
+ if (src->rate_numerator) {
+ dest_val = gst_util_uint64_scale (src_val,
+ src->rate_denominator * GST_SECOND, src->rate_numerator);
+ } else {
+ dest_val = 0;
+ }
break;
default:
goto error;
switch (dest_fmt) {
case GST_FORMAT_DEFAULT:
/* time to frames */
- dest_val = gst_util_uint64_scale (src_val,
- src->rate_numerator, src->rate_denominator * GST_SECOND);
+ if (src->rate_numerator) {
+ dest_val = gst_util_uint64_scale (src_val,
+ src->rate_numerator, src->rate_denominator * GST_SECOND);
+ } else {
+ dest_val = 0;
+ }
break;
default:
goto error;
time = segment->time = segment->start;
/* now move to the time indicated */
- src->n_frames = gst_util_uint64_scale (time,
- src->rate_numerator, src->rate_denominator * GST_SECOND);
- src->running_time = gst_util_uint64_scale (src->n_frames,
- src->rate_denominator * GST_SECOND, src->rate_numerator);
+ if (src->rate_numerator) {
+ src->n_frames = gst_util_uint64_scale (time,
+ src->rate_numerator, src->rate_denominator * GST_SECOND);
+ } else {
+ src->n_frames = 0;
+ }
+ if (src->rate_numerator) {
+ src->running_time = gst_util_uint64_scale (src->n_frames,
+ src->rate_denominator * GST_SECOND, src->rate_numerator);
+ } else {
+ /* FIXME : Not sure what to set here */
+ src->running_time = 0;
+ }
g_assert (src->running_time <= time);
src = GST_VIDEO_TEST_SRC (psrc);
- if (src->fourcc == NULL || src->rate_numerator == 0)
+ if (src->fourcc == NULL)
goto not_negotiated;
newsize = gst_video_test_src_get_size (src, src->width, src->height);
GST_BUFFER_OFFSET (outbuf) = src->n_frames;
src->n_frames++;
GST_BUFFER_OFFSET_END (outbuf) = src->n_frames;
- next_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND,
- src->rate_denominator, src->rate_numerator);
- GST_BUFFER_DURATION (outbuf) = next_time - src->running_time;
+ if (src->rate_numerator) {
+ next_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND,
+ src->rate_denominator, src->rate_numerator);
+ GST_BUFFER_DURATION (outbuf) = next_time - src->running_time;
+ } else {
+ next_time = src->timestamp_offset;
+ /* NONE means forever */
+ GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
+ }
src->running_time = next_time;