diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c
index c10ca20..6c8319b 100644
--- a/gst/audiotestsrc/gstaudiotestsrc.c
+++ b/gst/audiotestsrc/gstaudiotestsrc.c
@@ -1065,7 +1065,7 @@ gst_audio_test_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment)
   bpf = GST_AUDIO_INFO_BPF (&src->info);
 
   /* now move to the time indicated */
-  src->next_sample = gst_util_uint64_scale_int (time, samplerate, GST_SECOND);
+  src->next_sample = gst_util_uint64_scale_round (time, samplerate, GST_SECOND);
   src->next_byte = src->next_sample * bpf;
   if (samplerate == 0)
     src->next_time = 0;
@@ -1091,7 +1091,7 @@ gst_audio_test_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment)
 
   if (GST_CLOCK_TIME_IS_VALID (segment->stop)) {
     time = segment->stop;
-    src->sample_stop = gst_util_uint64_scale_int (time, samplerate, GST_SECOND);
+    src->sample_stop = gst_util_uint64_scale_round (time, samplerate, GST_SECOND);
     src->check_seek_stop = TRUE;
   } else {
     src->check_seek_stop = FALSE;
@@ -1190,6 +1190,7 @@ gst_audio_test_src_fill (GstBaseSrc * basesrc, guint64 offset,
   GST_LOG_OBJECT (src, "next_sample %" G_GINT64_FORMAT ", ts %" GST_TIME_FORMAT,
       next_sample, GST_TIME_ARGS (next_time));
 
+  gst_buffer_set_size(buffer, bytes);
   GST_BUFFER_OFFSET (buffer) = src->next_sample;
   GST_BUFFER_OFFSET_END (buffer) = next_sample;
   if (!src->reverse) {
