osxaudio fixes: multichannel and changing caps.
authorMichael Smith <msmith@songbirdnest.com>
Thu, 5 Feb 2009 00:40:13 +0000 (16:40 -0800)
committerMichael Smith <msmith@songbirdnest.com>
Thu, 5 Feb 2009 00:40:13 +0000 (16:40 -0800)
Ensure we create the ringbuffer segment size as a multiple of the
bytes per sample (fixes 6-channel output).
Reset the segoffset when acquiring the ringbuffer, so we don't retain
a bogus offset when caps change.

sys/osxaudio/gstosxringbuffer.c

index f6fd2e520f4b6632f157069f070dcb796ac2fa6e..f6a72db7fa1501843a50ec5c5c5ac4372335730a 100644 (file)
@@ -412,8 +412,8 @@ gst_osx_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
     goto done;
   }
 
-  spec->segsize = 4096;
-  spec->segtotal = 16;
+  spec->segsize = (spec->latency_time * spec->rate / G_USEC_PER_SEC) * spec->bytes_per_sample;
+  spec->segtotal = spec->buffer_time / spec->latency_time;
 
   /* create AudioBufferList needed for recording */
   if (osxbuf->is_src) {
@@ -433,6 +433,8 @@ gst_osx_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
   buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
   memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
 
+  osxbuf->segoffset = 0;
+
   status = AudioUnitInitialize (osxbuf->audiounit);
   if (status) {
     gst_buffer_unref (buf->data);
@@ -568,8 +570,9 @@ gst_osx_ring_buffer_start (GstRingBuffer * buf)
     }
 
     osxbuf->io_proc_active = TRUE;
-  } else
-    osxbuf->io_proc_needs_deactivation = FALSE;
+  }
+
+  osxbuf->io_proc_needs_deactivation = FALSE;
 
   status = AudioOutputUnitStart (osxbuf->audiounit);
   if (status) {