dmACGetMinInputSize(3dm)dmACGetMinInputSize(3dm)NAME
dmACGetMinInputSize, dmACGetMinOutputSize - auxiliary routines for
querying input and output buffer sizes for dmACConvert.
SYNOPSIS
#include <dmedia/dm_audioconvert.h>
DMstatus dmACGetMinInputSize(
DMaudioconverter converter,
int outputSize,
int *minInputSize)
DMstatus dmACGetMinOutputSize(
DMaudioconverter converter,
int inputSize,
int *minOutputSize)
PARAMETERS
converter is a DMaudioconverter handle created by a previous call
to the creation method dmACCreate(3dm).
outputSize is a integer set to the requested output buffer size.
The units will be bytes if compressing, otherwise frames.
minInputSize is a pointer to integer which will be set to the minimum
allowable input buffer size for the given outputSize.
The units will be bytes if decompressing, otherwise
frames.
inputSize is a integer set to the requested input buffer size. The
units will be bytes if decompressing, otherwise frames.
minOutputSize is a pointer to integer which will be set to the minimum
allowable output buffer size for the given inputSize.
The units will be bytes if compressing, otherwise frames.
RETURNED VALUE
Returns DM_SUCCESS if the operation succeeds. If DM_FAILURE is returned,
the error number and/or message can be retrieved via dmGetError(3dm).
DESCRIPTION
The handle passed to these routines is declared as follows:
typedef struct _DMaudioconverter *DMaudioconverter;
dmACGetMinInputSize and dmACGetMinOutputSize are a faster way to query
the value of the two audio conversion parameters DM_AUDIO_MIN_INPUT_LEN
and DM_AUDIO_MIN_OUTPUT_LEN. These values may also be retrieved via
dmACGetParams(3dm) after a call to dmACSetParams(3dm) with the parameter
DM_AUDIO_MAX_REQUEST_LEN set to either the input or output size,
depending on the conversion mode.
Page 1
dmACGetMinInputSize(3dm)dmACGetMinInputSize(3dm)NOTE
Only one of these two routines will be valid for any given configuration
of the audio converter handle -- more specifically, dependent on the
value of DM_AUDIO_PROCESS_MODE. A fixed input size indicates the
converter is running in DM_AUDIO_PROCESS_PUSH mode; a fixed output size
similarly indicates DM_AUDIO_PROCESS_PULL mode. A call to the opposite
routine will return DM_FAILURE, and the error value will be set to
DM_AUDIO_BAD_REQUEST.
Typically, buffer sizes only need be set and queried if the audio data is
being compressed, decompressed, or rate-converted. In all other cases,
the output buffer length (in frames) will and must equal the input
length.
EXAMPLE
If an application wishes to compress blocks of data to be written to a
file or a device, the sequence might look like this (error checking has
been omitted for brevity):
#include <dmedia/dm_params.h>
#include <dmedia/dm_audioconvert.h>
DMaudioconverter converter;
DMparams *inputParams, *outputParams;
/* create the parameter lists and the converter */
dmParamsCreate(&inputParams);
dmParamsCreate(&outputParams);
dmACCreate(&converter);
/* set up input params for 16bit, mono, 44.1K */
dmSetAudioDefaults(inputParams, 16, 44100, 1);
/* set up output params for GSM compression */
dmSetAudioDefaults(outputParams, 16, 44100, 1);
dmParamsSetString(params, DM_AUDIO_COMPRESSION, DM_AUDIO_GSM);
/* configure the converter */
dmACSetParams(converter, inputParams, outputParams);
/* loop forever, compressing data from some buffer */
while(1) {
int inputFrames; /* app sets this */
int outputBytes; /* and queries for this */
void *inBuffer = getInputBuffer(&inputFrames);
void *outBuffer;
/* do the query */
dmACGetMinOutputSize(converter, inputFrames, &outputBytes);
/* then perhaps the output buffer will be dynamically alloc'd */
outBuffer = getLargeEnoughOutBuffer(outputBytes);
Page 2
dmACGetMinInputSize(3dm)dmACGetMinInputSize(3dm)
/* now we can compress our data into that buffer safely */
dmACConvert(converter, inBuffer, outBuffer,
&inputFrames, &outputBytes);
...
}
SEE ALSOdmACCreate(3dm), dmACSetParams(3dm), dmACGetParams(3dm),
dmACConvert(3dm), dmACReset(3dm), dmACDestroy(3dm),
Page 3