Rate This Document
Findability
Accuracy
Completeness
Readability

AMRNB

Encodes audio data streams in the PCM format into the AMRNB format.

The function is called as follows:

  1. Obtain the size of the memory to be applied for encoding (dstBufLen).
  2. Initialize the structure by calling Init.
  3. Call the main function HMPPA_Amrnb_Encode_16s8u for encoding.
  4. Call Release to release the memory allocated to the structure.

The function interface is declared as follows:

  • Obtaining the size of the memory to be applied for encoding:

    HmppResult HMPPA_Amrnb_GetEncodeDstBufLen_16s8u(int32_t len, int32_t *dstBufLen, HmppAmrnbMode mode);

  • Initialization:

    HmppResult HMPPA_Amrnb_EncodeInit_16s8u(HmppaAmrnbEncodePolicy_16s **policy, HmppAmrnbMode mode, int32_t dtx);

  • Encoding:

    HmppResult HMPPA_Amrnb_Encode_16s8u(const int16_t *src, int32_t len, uint8_t *dst, HmppaAmrnbEncodePolicy_16s *policy, int64_t *bytesConsumed, int32_t *bytesEncoded);

  • Release:

    HmppResult HMPPA_Amrnb_EncodeRelease_16s8u(HmppaAmrnbEncodePolicy_16s *policy);

Parameters

Parameter

Description

Value Range

Input/Output

src

Pointer to the AMRNB stream to be encoded

Not null

Input

len

Length of the data stream to be encoded (in dual-bytes)

(0, INT_MAX]

Input

dst

Pointer to the destination vector

Not null

Output

policy

Pointer to the special structure

Not null

Input/Output

bytesConsumed

Pointer to the data stream length (in bytes) actually consumed for encoding

[0, len]

Output

bytesEncoded

Pointer to the data stream length (in bytes) of the actual encoded output

[0, Theoretical output data stream length after encoding]

Output

dstBufLen

Pointer to the required destination vector length (in bytes)

Not null

Output

mode

Bit rate of the AMRNB streams to be encoded (Defined in the HmppAmrnbMode enumeration type. See Enumeration Types.)

The value is an element of HmppAmrnbMode:

  • HMPP_AMRNB_MR475
  • HMPP_AMRNB_MR515
  • HMPP_AMRNB_MR59
  • HMPP_AMRNB_MR67
  • HMPP_AMRNB_MR74
  • HMPP_AMRNB_MR795
  • HMPP_AMRNB_MR102
  • HMPP_AMRNB_MR122

Input

dtx

Whether to enable the discontinuous transmission (DTX) function

  • 0: disable
  • 1: enable

Input

Return Value

  • Success: HMPP_STS_NO_ERR
  • Failure: An error code is returned.

Error Codes

Error Code

Description

HMPP_STS_NULL_PTR_ERR

The value of src, dst, or policy is NULL.

HMPP_STS_MALLOC_FAILED

Memory allocation failed.

HMPP_STS_SIZE_WRN

The input data stream is not completely encoded.

Example

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <hmpp.h>

int main(int argc, char *argv[]) 
{
    if (argc < 3) {
        fprintf(stderr, "%s in.amr out.wav\n", argv[0]);
        return 1;
    }

    FILE *in = fopen(argv[1], "r");
    FILE *out = fopen(argv[2], "w+");
    if (!in || !out) {
        printf("Open file failed!\n");
        return 1;
    }

    fseek(in, 0, SEEK_END);
    int32_t srcLen = ftell(in) / 2;
    fseek(in, 0, SEEK_SET);
    int16_t *src = (int16_t*)malloc(srcLen * sizeof(int16_t));
    fread(src, sizeof(int16_t), srcLen, in);

    HmppaAmrnbEncodePolicy_16s *policy;
    int32_t re = HMPPA_Amrnb_EncodeInit_16s8u(&policy, HMPP_AMRNB_MR475, 0);

    int dstLen;
    re = HMPPA_Amrnb_GetEncodeDstBufLen_16s8u(srcLen, &dstLen, HMPP_AMRNB_MR475);
    uint8_t *dst = (uint8_t*)malloc(dstLen * sizeof(uint8_t));

    int64_t bytesConsumed = 0;
    int32_t bytesEncoded = 0;
    re = HMPPA_Amrnb_Encode_16s8u(src, srcLen, dst, policy, &bytesConsumed, &bytesEncoded);
    printf("HmppResult:%d, bytesConsumed:%d, bytesEncoded:%d\n", re, bytesConsumed, bytesEncoded);

    re = HMPPA_Amrnb_EncodeRelease_16s8u(policy);
    fwrite(dst, sizeof(uint8_t), bytesEncoded, out);

    fclose(in);
    fclose(out);

    return 0;
}

Output:

HmppResult:0, bytesConsumed:50560, bytesEncoded:2054