我要评分
获取效率
正确性
完整性
易理解

EVS

Encodes audio data streams in the PCM format into the Enhanced Voice Service (EVS) format.

The function calling process is 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_Evs_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_Evs_GetEncodeDstBufLen_16s8u(int32_t len, int32_t *dstBufLen, HmppEvsMode mode)

  • Initialization:

    HmppResult HMPPA_Evs_EncodeInit_16s8u(HmppaEvsEncodePolicy_16s **policy, HmppEvsMode mode, int32_t dtx);

  • Encoding:

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

  • Release:

    HmppResult HMPPA_Evs_EncodeRelease_16s8u(HmppaEvsEncodePolicy_16s *policy);

Parameters

Parameter

Description

Value Range

Input/Output

src

Pointer to the data stream to be encoded

Not null

Input

len

Length of the data stream to be encoded

> 0

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

Output

bytesEncoded

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

≥ 0

Output

dstBufLen

Pointer to the required destination vector length (in bytes)

Not null

Output

mode

Bit rate of the EVS streams to be encoded

Defined by the structure

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_Evs_EncodeInit_16s8u(&policy, HMPP_EVS_6600, 0);

    int dstLen;
    re = HMPPA_Evs_GetEncodeDstBufLen_16s8u(srcLen, &dstLen, HMPP_EVS_6600);
    uint8_t *dst = (uint8_t*)malloc(dstLen * sizeof(uint8_t));

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

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

    fclose(in);
    fclose(out);

    return 0;
}

Output:

HmppResult:0, bytesConsumed:50560, bytesDecoded:2054