Commit a3b5d523 authored by Padraig O'Briain's avatar Padraig O'Briain Committed by Jan Schmidt
Browse files

sys/sunaudio/: Implement reset functions to unblock the src/sink more quickly...

sys/sunaudio/: Implement reset functions to unblock the src/sink more quickly on state change requests.

Original commit message from CVS:
* sys/sunaudio/gstsunaudiosink.c: (gst_sunaudiosink_reset):
* sys/sunaudio/gstsunaudiosrc.c: (gst_sunaudiosrc_open),
(gst_sunaudiosrc_reset):
Implement reset functions to unblock the src/sink more quickly on
state change requests.
Patch by: Padraig O'Briain <padraig dot obriain at sun dot com>
parent f3df7a85
2006-12-08 Jan Schmidt <thaytan@mad.scientist.com>
* sys/sunaudio/gstsunaudiosink.c: (gst_sunaudiosink_reset):
* sys/sunaudio/gstsunaudiosrc.c: (gst_sunaudiosrc_open),
(gst_sunaudiosrc_reset):
Implement reset functions to unblock the src/sink more quickly on
state change requests.
Patch by: Padraig O'Briain <padraig dot obriain at sun dot com>
2006-12-08 Jan Schmidt <thaytan@mad.scientist.com>
* sys/sunaudio/gstsunaudiomixer.c:
......
......@@ -42,6 +42,7 @@
#include <fcntl.h>
#include <string.h>
#include <stropts.h>
#include <unistd.h>
#include <sys/mman.h>
......@@ -390,4 +391,45 @@ gst_sunaudiosink_delay (GstAudioSink * asink)
static void
gst_sunaudiosink_reset (GstAudioSink * asink)
{
/* Get current values */
GstSunAudioSink *sunaudiosink = GST_SUNAUDIO_SINK (asink);
audio_info_t ainfo;
int ret;
ret = ioctl (sunaudiosink->fd, AUDIO_GETINFO, &ainfo);
if (ret == -1) {
/*
* Should never happen, but if we couldn't getinfo, then no point
* trying to setinfo
*/
GST_ELEMENT_ERROR (sunaudiosink, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
return;
}
/*
* Pause the audio - so audio stops playing immediately rather than
* waiting for the ringbuffer to empty.
*/
ainfo.play.pause = !NULL;
ret = ioctl (sunaudiosink->fd, AUDIO_SETINFO, &ainfo);
if (ret == -1) {
GST_ELEMENT_ERROR (sunaudiosink, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
}
/* Flush the audio */
ret = ioctl (sunaudiosink->fd, I_FLUSH, FLUSHW);
if (ret == -1) {
GST_ELEMENT_ERROR (sunaudiosink, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
}
/* unpause the audio */
ainfo.play.pause = NULL;
ret = ioctl (sunaudiosink->fd, AUDIO_SETINFO, &ainfo);
if (ret == -1) {
GST_ELEMENT_ERROR (sunaudiosink, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
}
}
......@@ -398,5 +398,45 @@ gst_sunaudiosrc_delay (GstAudioSrc * asrc)
static void
gst_sunaudiosrc_reset (GstAudioSrc * asrc)
{
return;
/* Get current values */
GstSunAudioSrc *sunaudiosrc = GST_SUNAUDIO_SRC (asrc);
audio_info_t ainfo;
int ret;
ret = ioctl (sunaudiosrc->fd, AUDIO_GETINFO, &ainfo);
if (ret == -1) {
/*
* Should never happen, but if we couldn't getinfo, then no point
* trying to setinfo
*/
GST_ELEMENT_ERROR (sunaudiosrc, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
return;
}
/*
* Pause the audio - so audio stops playing immediately rather than
* waiting for the ringbuffer to empty.
*/
ainfo.record.pause = !NULL;
ret = ioctl (sunaudiosrc->fd, AUDIO_SETINFO, &ainfo);
if (ret == -1) {
GST_ELEMENT_ERROR (sunaudiosrc, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
}
/* Flush the audio */
ret = ioctl (sunaudiosrc->fd, I_FLUSH, FLUSHR);
if (ret == -1) {
GST_ELEMENT_ERROR (sunaudiosrc, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
}
/* unpause the audio */
ainfo.record.pause = NULL;
ret = ioctl (sunaudiosrc->fd, AUDIO_SETINFO, &ainfo);
if (ret == -1) {
GST_ELEMENT_ERROR (sunaudiosrc, RESOURCE, SETTINGS, (NULL), ("%s",
strerror (errno)));
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment