[Openal-devel] OpenAL Soft 1.2.218 released
Chris Robinson
chris.kcat at gmail.com
Tue Jan 29 01:36:54 PST 2008
On Monday 28 January 2008 08:56:32 am Jason Daly wrote:
> I'd just say go ahead and write up the extension first. If Creative is
> interested, they may weigh in. Some of the research folks at Creative
> have shared their wisdom on related topics in the past, but it's much
> easier to do so when you're discussing something concrete (or at least
> the mold that will eventually contain the concrete :-) ).
Perhaps. Though, I guess there are other extensions I'd like to get down
first.
For instance, being able to hint at a requested output format, and
subsequently, tell what the output format is. Something such as (to
shamelessly borrow the extension template):
Name
EXT_format_hint
Name Strings
ALC_EXT_format_hint
Version
1.0
Number
??
Dependencies
None
Overview
This extension provides a context attribute hint for setting a
requested output format, and provides a list of recognized output
formats. If the given format cannot be used, the implementation is
free to select another; either an implementation default, or something
close to the requested format.
Issues
Q: Should the format be specified as seperate bits-per-sample and
channel count attributes, or a single attribute using specific
format enums?
A: While two seperate attributes for the bit size and channel count
may be more intuitive, it may actually be more confusing in the
long run. For instance, if setting a 6-channel mode there's no way
to say whether it should be 6.0 surround sound, or 5.1. Such a
distinction may be important for applications trying to load audio
data that has a center channel audio track. Using specific enums
clears up this ambiguity.
Plus, specific enums is what's used to specify the format for
alBufferData. It's nice to remain consistent.
Q: Then how should we handle output formats that there aren't any
format enums for?
A: Unresolved. Although other extensions may be looked at for more
formats.
Q: Should new ALC-specific enums be made, or should the existing AL
format enums be used?
A: I don't forsee an issue using the same values as the AL format
enums, as they're only used in specific places, so value clashes
aren't a problem. Additionally, a file with access to ALC will
generally also have access to AL, so there shouldn't be a problem
using those predefined enums. We can make ALC-specific enums in the
future, if needed.
New Procedures and Functions
None
New Tokens
ALC_FORMATS_SIZE_EXT 0x????
ALC_ALL_FORMATS_EXT 0x????
ALC_FORMAT_HINT_EXT 0x????
Additions to Specification
With this extension, an application may specify ALC_FORMATS_SIZE_EXT
to alcGetIntegerv to retrieve a count for the number of recognized
output formats. An application should use the returned value to
allocate an ALCint array large enough for an integer list returned by
ALC_ALL_FORMATS_EXT. Typically, the format list returned by
ALC_ALL_FORMATS_EXT would then be filtered by the application against
known formats, and have the remaining presented as valid output
configurations to the user.
The format values returned by ALC_ALL_FORMATS_EXT will have the same
values as those passed to alBufferData (AL_FORMAT_STEREO16,
AL_FORMAT_MONO8, etc). An implementation must recognize all core
format values, however it is not required to implement them for
output. Extra formats, particularly those specified in the
AL_EXT_MCFORMATS extension, may also be recognized.
An application may also specify ALC_FORMAT_HINT_EXT as a context
creation attribute to hint at a requested output format. It must be
followed by one of the recognized formats returned by
ALC_ALL_FORMATS_EXT. If an unrecognized format is specified, context
creation will fail and generate an ALC_INVALID_VALUE error. After
context creation, regardless of if a format was requested, an
application may query ALC_FORMAT_HINT_EXT to retrieve the output
format set by the implementation for the device.
Errors
ALC_INVALID_VALUE is generated if alcCreateContext is called with an
unrecognized format for ALC_FORMAT_HINT_EXT.
ALC_INVALID_VALUE is generated if alcGetIntegerv is called to query
ALC_ALL_FORMATS_EXT and the provided array isn't large enough to store
all the formats.
ALC_INVALID_DEVICE is generated if alcGetIntegerv is called with a
NULL device when querying ALC_FORMATS_SIZE_EXT, ALC_ALL_FORMATS_EXT,
or ALC_FORMAT_HINT_EXT.
New State
None
New Implementation State
None
More information about the Openal-devel
mailing list