Google
 

Open Sound System
OSS 4.x Programmer's Guide

Do you have problems with sound/audio application development? Don't panic! Click here for help!

SNDCTL_DSP_GETODELAY

Returns the playback buffering delay

Usage

int delay;
ioctl(fd, SNDCTL_DSP_GETODELAY, &delay):

The above code fragment lacks all error checks for clarity. Real world applications must always check for the errors and handle them as described below. Also most OSS ioctl calls will return information in the argument variable and it's usually necessary to check it too.

Description

This ioctl call tells how long time it's going to take before the next sample to be written gets played by the hardware. The delay is returned in bytes and it can be converted to seconds by dividing it by sample_rate*num_of_channels*sample_size_in_bytes.

This call takes in account the FIFO delays caused by the device as much as it's possible. For this reason the returned value will normally not drop to zero or anywhere close of it (the application must not assume this). If the application stops writing to the device it will sooner or later cause a buffer underrun. OSS will recover from this situation by appending some silent samples to the buffer.

Related ioctl calls

Compatibility issues

This ioctl call is supported by all official OSS versions. However some freeware clones don't support it. This is bit unfortunate because there is no good workaround. There are few ways to emulate this call using SNDCTL_DSP_GETOPTR or SNDCTL_DSP_GETIPTR but such methods will not be precise if the driver performs any sample rate or sample format conversions that change the size of the audio data.

Please look at the When OSS audio ioctl calls can be made section for information about DSP ioctl call ordering.

OSS ioctl return values

The return value from the OSS ioctl calls will be -1 if a fatal error occurred. Other values mean that the ioctl call was more or less successful. However in most cases the application must check the value returned in the argument to see what was the accepted value.

Please see the Possible error codes (errno) returned by OSS calls section for more info about the error codes returned by OSS.

Sample programs

osstest.cThe osstest program shipped with OSS
fulldup.cFull duplex sample program using the single device approach.
ioctl_test.cThis program has been used to verify that some of the ioctl calls work


Copyright (C) 4Front Technologies, 2007. All rights reserved.
Back to index OSS web site