123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
- * All rights reserved.
- *
- * This software is supplied "AS IS" without any warranties.
- * RDA assumes no responsibility or liability for the use of the software,
- * conveys no license or title under any patent, copyright, or mask work
- * right to the product. RDA reserves the right to make changes in the
- * software without notification. RDA also make no representation or
- * warranty that such application will be suitable for the specified use
- * without further testing or modification.
- */
- #ifndef _AUDIO_ENCODER_H_
- #define _AUDIO_ENCODER_H_
- #include "osi_api.h"
- #include "audio_types.h"
- OSI_EXTERN_C_BEGIN
- /**
- * \brief forward declaration
- */
- struct auEncoder;
- /**
- * \brief forward declaration
- */
- struct auWriter;
- /**
- * \brief audio encoder parameter id and value pair
- *
- * This will be used to set multiple parameters for audio encoder.
- */
- typedef struct
- {
- int id; ///< parameter id
- const void *val; ///< parameter value pointer
- } auEncoderParamSet_t;
- /**
- * \brief audio encoder operations
- */
- typedef struct
- {
- /** delete the audio encoder */
- void (*destroy)(struct auEncoder *d);
- /** refer to \p auEncoderEncode */
- int (*encode)(struct auEncoder *d, const auFrame_t *frame);
- /** refer to \p auEncoderSetParam */
- bool (*set_param)(struct auEncoder *d, int id, const void *val);
- /** refer to \p auEncoderGetParam */
- bool (*get_param)(struct auEncoder *d, int id, void *val);
- } auEncoderOps_t;
- /**
- * \brief opaque data structure of audio encoder
- *
- * When implement an audio encoder, the first field should be
- * <tt>const auEncoderOps_t *</tt>.
- */
- typedef struct auEncoder
- {
- auEncoderOps_t ops; ///< audio encoder operations
- } auEncoder_t;
- /**
- * \brief create audio encoder by stream format
- *
- * The audio frame information is unknown at creation. The audio frame
- * information in the first frame to be encoded will be used.
- *
- * \param w audio writer to be used in audio encoder
- * \param format stream format
- * \return
- * - created audio encoder
- * - NULL if invalid parameter, or out of memory
- */
- auEncoder_t *auEncoderCreate(struct auWriter *w, auStreamFormat_t format);
- /**
- * \brief delete the audio encoder
- *
- * \param d audio encoder
- */
- void auEncoderDelete(auEncoder_t *d);
- /**
- * \brief encoder an audio frame
- *
- * Audio decoder shall write data to \p auWriter_t. Encoder should consume
- * all frame data. When audio encoder is frame based, the remaining data
- * should be backup by encoder.
- *
- * \param d audio encoder
- * \param frame audio frame to be encoded, can't be NULL
- * \return
- * - encoded audio stream byte count
- * - -1 on error
- */
- int auEncoderEncode(auEncoder_t *d, const auFrame_t *frame);
- /**
- * \brief set encoder parameter
- *
- * Audio encoder may support configurable parameter. This is the unified
- * API to set parameter. Each audio encoder will have independent param_id
- * definition, and the data type may be different for each parameter.
- * For example:
- *
- * \code{.cpp}
- * auEncoder_t *encoder = auEncoderCreare(w, AUSTREAM_FORMAT_AMRNB);
- * auAmrnbMode_t mode = AU_AMRNB_MODE_795;
- * auEncoderSetParam(encoder, AU_AMBNB_ENC_PARAM_MODE, &mode);
- * auEncoderGetParam(encoder, AU_AMBNB_ENC_PARAM_MODE, &mode);
- * \endcode
- *
- * All pamameter id should be positive, zero and negative values are
- * invalid.
- *
- * \param d audio encoder
- * \param param_id parameter id
- * \param val parameter val to be set
- * \return
- * - true on success
- * - false on fail, invalud paramter id or invalid parameter value
- */
- bool auEncoderSetParam(auEncoder_t *d, int param_id, const void *val);
- /**
- * \brief set multiple encoder parameter
- *
- * Set multiple parameters of audio encoder. When \p params is not NULL,
- * it should be an array, and the \p id of the last element must be zero
- * to indicate the end.
- *
- * When one parameter set fails, it will return false. However, the
- * remaining parameters in the array will be set still.
- *
- * \param d audio encoder
- * \param params array of parameter id and value
- * \return
- * - true on success
- * - false when one set fails
- */
- bool auEncoderSetMultiParams(auEncoder_t *d, const auEncoderParamSet_t *params);
- /**
- * \brief get encoder parameter
- *
- * \param d audio encoder
- * \param param_id parameter id
- * \param val parameter val to be get
- * \return
- * - true on success
- * - false on fail, invalud paramter id
- */
- bool auEncoderGetParam(auEncoder_t *d, int param_id, void *val);
- /**
- * \brief opaque data structure of WAV encoder
- */
- typedef struct auWavEncoder auWavEncoder_t;
- /**
- * \brief create a WAV encoder
- *
- * \param w audio writer to be used in audio encoder
- * \return
- * - created audio encoder
- * - NULL if invalid parameter, or out of memory
- */
- auWavEncoder_t *auWavEncoderCreate(struct auWriter *w);
- /**
- * \brief opaque data structure of PCM encoder
- */
- typedef struct auPcmEncoder auPcmEncoder_t;
- /**
- * \brief create a PCM encoder
- *
- * \param w audio writer to be used in audio encoder
- * \return
- * - created audio encoder
- * - NULL if invalid parameter, or out of memory
- */
- auPcmEncoder_t *auPcmEncoderCreate(struct auWriter *w);
- /**
- * \brief opaque data structure of AMR-NB encoder
- */
- typedef struct auAmrnbEncoder auAmrnbEncoder_t;
- /**
- * \brief AMR-NB encoder parameter id
- */
- typedef enum
- {
- /** placeholder for param_id start */
- AU_AMRNB_ENC_PARAM_START = AUSTREAM_FORMAT_AMRNB << 16,
- /** \p auAmrnbMode_t, mode */
- AU_AMRNB_ENC_PARAM_MODE,
- /** placeholder for param_id end */
- AU_AMRNB_ENC_PARAM_END
- } auAmrnbEncoderParamId_t;
- /**
- * \brief AMR-NB encoder default mode at create
- */
- extern const auAmrnbMode_t gAmrnbEncodeDefaultMode;
- /**
- * \brief create a AMR-NB encoder
- *
- * \param w audio writer to be used in audio encoder
- * \return
- * - created audio encoder
- * - NULL if invalid parameter, or out of memory
- */
- auAmrnbEncoder_t *auAmrnbEncoderCreate(struct auWriter *w);
- /**
- * \brief opaque data structure of AMR-WB encoder
- */
- typedef struct auAmrwbEncoder auAmrwbEncoder_t;
- /**
- * \brief AMR-WB encoder parameter id
- */
- typedef enum
- {
- /** placeholder for param_id start */
- AU_AMRWB_ENC_PARAM_START = AUSTREAM_FORMAT_AMRWB << 16,
- /** \p auAmrnbMode_t, mode */
- AU_AMRWB_ENC_PARAM_MODE,
- /** placeholder for param_id end */
- AU_AMRWB_ENC_PARAM_END
- } auAmrwbEncoderParamId_t;
- /**
- * \brief AMR-WB encoder default mode at create
- */
- extern const auAmrwbMode_t gAmrwbEncodeDefaultMode;
- /**
- * \brief create a AMR-WB encoder
- *
- * \param w audio writer to be used in audio encoder
- * \return
- * - created audio encoder
- * - NULL if invalid parameter, or out of memory
- */
- auAmrwbEncoder_t *auAmrwbEncoderCreate(struct auWriter *w);
- OSI_EXTERN_C_END
- #endif
|