Group PJMED_AMR_CODEC_HELPER

group PJMED_AMR_CODEC_HELPER

AMR common tables and helper functions.

This sections describes common AMR constants tables (e.g: bits sensitivity order map, frame lengths, bitrates) and helper functions (e.g: pack AMR payload in octet-aligned mode or bandwidth-efficient mode, payload parser, reorder AMR bitstream).

Functions

pj_int8_t pjmedia_codec_amr_get_mode(unsigned bitrate)

Get AMR mode based on bitrate.

Parameters

bitrate – AMR bitrate.

Returns

AMR mode.

pj_int8_t pjmedia_codec_amr_get_mode2(pj_bool_t amrnb, unsigned frame_len)

Get AMR mode based on frame length.

Parameters
  • amrnb – Set to PJ_TRUE for AMR-NB domain or PJ_FALSE for AMR-WB.

  • frame_len – The frame length.

Returns

AMR mode.

pj_status_t pjmedia_codec_amr_predecode(const pjmedia_frame *in, const pjmedia_codec_amr_pack_setting *setting, pjmedia_frame *out)

Prepare a frame before pass it to decoder. This function will do:

  • reorder AMR bitstream from descending sensitivity order into encoder bits order. This can be enabled/disabled via param ‘setting’ by setting/resetting field ‘reorder’.

  • align left the start bit (make the start_bit to be 0).

Parameters
Returns

PJ_SUCCESS on success.

pj_status_t pjmedia_codec_amr_pack(const pjmedia_frame frames[], unsigned nframes, const pjmedia_codec_amr_pack_setting *setting, void *pkt, pj_size_t *pkt_size)

Pack encoded AMR frame(s) into an RTP payload.

Parameters
  • frames – AMR frames to be packed.

  • nframes – Number of frames to be packed.

  • setting – Settings, see pjmedia_codec_amr_pack_setting.

  • pkt – Payload.

  • pkt_size – Payload size, as input this specifies payload maximum size, as output this specifies payload packed size.

Returns

PJ_SUCCESS on success.

pj_status_t pjmedia_codec_amr_parse(void *pkt, pj_size_t pkt_size, const pj_timestamp *ts, const pjmedia_codec_amr_pack_setting *setting, pjmedia_frame frames[], unsigned *nframes, pj_uint8_t *cmr)

Parse AMR payload into frames.

Parameters
  • pkt – Payload.

  • pkt_size – Payload size.

  • ts – Base timestamp.

  • setting – Settings, see pjmedia_codec_amr_pack_setting.

  • frames – Frames parsed.

  • nframes – Number of frames parsed.

  • cmr – Change Mode Request message for local encoder.

Returns

PJ_SUCCESS on success.

Variables

PJ_BEGIN_DECL const pj_int16_t pjmedia_codec_amrnb_ordermap122 [244] ={      0,   1,   2,   3,   4,   5,   6,   7,   8,  9,     10,  11,  12,  13,  14,  23,  15,  16,  17,  18,     19,  20,  21,  22,  24,  25,  26,  27,  28,  38,    141,  39, 142,  40, 143,  41, 144,  42, 145,  43,    146,  44, 147,  45, 148,  46, 149,  47,  97, 150,    200,  48,  98, 151, 201,  49,  99, 152, 202,  86,    136, 189, 239,  87, 137, 190, 240,  88, 138, 191,    241,  91, 194,  92, 195,  93, 196,  94, 197,  95,    198,  29,  30,  31,  32,  33,  34,  35,  50, 100,    153, 203,  89, 139, 192, 242,  51, 101, 154, 204,     55, 105, 158, 208,  90, 140, 193, 243,  59, 109,    162, 212,  63, 113, 166, 216,  67, 117, 170, 220,     36,  37,  54,  53,  52,  58,  57,  56,  62,  61,     60,  66,  65,  64,  70,  69,  68, 104, 103, 102,    108, 107, 106, 112, 111, 110, 116, 115, 114, 120,    119, 118, 157, 156, 155, 161, 160, 159, 165, 164,    163, 169, 168, 167, 173, 172, 171, 207, 206, 205,    211, 210, 209, 215, 214, 213, 219, 218, 217, 223,    222, 221,  73,  72,  71,  76,  75,  74,  79,  78,     77,  82,  81,  80,  85,  84,  83, 123, 122, 121,    126, 125, 124, 129, 128, 127, 132, 131, 130, 135,    134, 133, 176, 175, 174, 179, 178, 177, 182, 181,    180, 185, 184, 183, 188, 187, 186, 226, 225, 224,    229, 228, 227, 232, 231, 230, 235, 234, 233, 238,    237, 236,  96, 199}
const pj_int16_t pjmedia_codec_amrnb_ordermap102[204] = {7, 6, 5, 4, 3, 2, 1, 0, 16, 15, 14, 13, 12, 11, 10, 9, 8, 26, 27, 28, 29, 30, 31, 115, 116, 117, 118, 119, 120, 72, 73, 161, 162, 65, 68, 69, 108, 111, 112, 154, 157, 158, 197, 200, 201, 32, 33, 121, 122, 74, 75, 163, 164, 66, 109, 155, 198, 19, 23, 21, 22, 18, 17, 20, 24, 25, 37, 36, 35, 34, 80, 79, 78, 77, 126, 125, 124, 123, 169, 168, 167, 166, 70, 67, 71, 113, 110, 114, 159, 156, 160, 202, 199, 203, 76, 165, 81, 82, 92, 91, 93, 83, 95, 85, 84, 94, 101, 102, 96, 104, 86, 103, 87, 97, 127, 128, 138, 137, 139, 129, 141, 131, 130, 140, 147, 148, 142, 150, 132, 149, 133, 143, 170, 171, 181, 180, 182, 172, 184, 174, 173, 183, 190, 191, 185, 193, 175, 192, 176, 186, 38, 39, 49, 48, 50, 40, 52, 42, 41, 51, 58, 59, 53, 61, 43, 60, 44, 54, 194, 179, 189, 196, 177, 195, 178, 187, 188, 151, 136, 146, 153, 134, 152, 135, 144, 145, 105, 90, 100, 107, 88, 106, 89, 98, 99, 62, 47, 57, 64, 45, 63, 46, 55, 56}
const pj_int16_t pjmedia_codec_amrnb_ordermap795[159] = {8, 7, 6, 5, 4, 3, 2, 14, 16, 9, 10, 12, 13, 15, 11, 17, 20, 22, 24, 23, 19, 18, 21, 56, 88, 122, 154, 57, 89, 123, 155, 58, 90, 124, 156, 52, 84, 118, 150, 53, 85, 119, 151, 27, 93, 28, 94, 29, 95, 30, 96, 31, 97, 61, 127, 62, 128, 63, 129, 59, 91, 125, 157, 32, 98, 64, 130, 1, 0, 25, 26, 33, 99, 34, 100, 65, 131, 66, 132, 54, 86, 120, 152, 60, 92, 126, 158, 55, 87, 121, 153, 117, 116, 115, 46, 78, 112, 144, 43, 75, 109, 141, 40, 72, 106, 138, 36, 68, 102, 134, 114, 149, 148, 147, 146, 83, 82, 81, 80, 51, 50, 49, 48, 47, 45, 44, 42, 39, 35, 79, 77, 76, 74, 71, 67, 113, 111, 110, 108, 105, 101, 145, 143, 142, 140, 137, 133, 41, 73, 107, 139, 37, 69, 103, 135, 38, 70, 104, 136}
const pj_int16_t pjmedia_codec_amrnb_ordermap74[148] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 26, 87, 27, 88, 28, 89, 29, 90, 30, 91, 51, 80, 112, 141, 52, 81, 113, 142, 54, 83, 115, 144, 55, 84, 116, 145, 58, 119, 59, 120, 21, 22, 23, 17, 18, 19, 31, 60, 92, 121, 56, 85, 117, 146, 20, 24, 25, 50, 79, 111, 140, 57, 86, 118, 147, 49, 78, 110, 139, 48, 77, 53, 82, 114, 143, 109, 138, 47, 76, 108, 137, 32, 33, 61, 62, 93, 94, 122, 123, 41, 42, 43, 44, 45, 46, 70, 71, 72, 73, 74, 75, 102, 103, 104, 105, 106, 107, 131, 132, 133, 134, 135, 136, 34, 63, 95, 124, 35, 64, 96, 125, 36, 65, 97, 126, 37, 66, 98, 127, 38, 67, 99, 128, 39, 68, 100, 129, 40, 69, 101, 130}
const pj_int16_t pjmedia_codec_amrnb_ordermap67[134] = {0, 1, 4, 3, 5, 6, 13, 7, 2, 8, 9, 11, 15, 12, 14, 10, 28, 82, 29, 83, 27, 81, 26, 80, 30, 84, 16, 55, 109, 56, 110, 31, 85, 57, 111, 48, 73, 102, 127, 32, 86, 51, 76, 105, 130, 52, 77, 106, 131, 58, 112, 33, 87, 19, 23, 53, 78, 107, 132, 21, 22, 18, 17, 20, 24, 25, 50, 75, 104, 129, 47, 72, 101, 126, 54, 79, 108, 133, 46, 71, 100, 125, 128, 103, 74, 49, 45, 70, 99, 124, 42, 67, 96, 121, 39, 64, 93, 118, 38, 63, 92, 117, 35, 60, 89, 114, 34, 59, 88, 113, 44, 69, 98, 123, 43, 68, 97, 122, 41, 66, 95, 120, 40, 65, 94, 119, 37, 62, 91, 116, 36, 61, 90, 115}
const pj_int16_t pjmedia_codec_amrnb_ordermap59[118] = {0, 1, 4, 5, 3, 6, 7, 2, 13, 15, 8, 9, 11, 12, 14, 10, 16, 28, 74, 29, 75, 27, 73, 26, 72, 30, 76, 51, 97, 50, 71, 96, 117, 31, 77, 52, 98, 49, 70, 95, 116, 53, 99, 32, 78, 33, 79, 48, 69, 94, 115, 47, 68, 93, 114, 46, 67, 92, 113, 19, 21, 23, 22, 18, 17, 20, 24, 111, 43, 89, 110, 64, 65, 44, 90, 25, 45, 66, 91, 112, 54, 100, 40, 61, 86, 107, 39, 60, 85, 106, 36, 57, 82, 103, 35, 56, 81, 102, 34, 55, 80, 101, 42, 63, 88, 109, 41, 62, 87, 108, 38, 59, 84, 105, 37, 58, 83, 104}
const pj_int16_t pjmedia_codec_amrnb_ordermap515[103] = {7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8, 23, 24, 25, 26, 27, 46, 65, 84, 45, 44, 43, 64, 63, 62, 83, 82, 81, 102, 101, 100, 42, 61, 80, 99, 28, 47, 66, 85, 18, 41, 60, 79, 98, 29, 48, 67, 17, 20, 22, 40, 59, 78, 97, 21, 30, 49, 68, 86, 19, 16, 87, 39, 38, 58, 57, 77, 35, 54, 73, 92, 76, 96, 95, 36, 55, 74, 93, 32, 51, 33, 52, 70, 71, 89, 90, 31, 50, 69, 88, 37, 56, 75, 94, 34, 53, 72, 91}
const pj_int16_t pjmedia_codec_amrnb_ordermap475[95] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 23, 24, 25, 26, 27, 28, 48, 49, 61, 62, 82, 83, 47, 46, 45, 44, 81, 80, 79, 78, 17, 18, 20, 22, 77, 76, 75, 74, 29, 30, 43, 42, 41, 40, 38, 39, 16, 19, 21, 50, 51, 59, 60, 63, 64, 72, 73, 84, 85, 93, 94, 32, 33, 35, 36, 53, 54, 56, 57, 66, 67, 69, 70, 87, 88, 90, 91, 34, 55, 68, 89, 37, 58, 71, 92, 31, 52, 65, 86}
const pj_int16_t pjmedia_codec_amrwb_ordermap_660[] = {0, 5, 6, 7, 61, 84, 107, 130, 62, 85, 8, 4, 37, 38, 39, 40, 58, 81, 104, 127, 60, 83, 106, 129, 108, 131, 128, 41, 42, 80, 126, 1, 3, 57, 103, 82, 105, 59, 2, 63, 109, 110, 86, 19, 22, 23, 64, 87, 18, 20, 21, 17, 13, 88, 43, 89, 65, 111, 14, 24, 25, 26, 27, 28, 15, 16, 44, 90, 66, 112, 9, 11, 10, 12, 67, 113, 29, 30, 31, 32, 34, 33, 35, 36, 45, 51, 68, 74, 91, 97, 114, 120, 46, 69, 92, 115, 52, 75, 98, 121, 47, 70, 93, 116, 53, 76, 99, 122, 48, 71, 94, 117, 54, 77, 100, 123, 49, 72, 95, 118, 55, 78, 101, 124, 50, 73, 96, 119, 56, 79, 102, 125}
const pj_int16_t pjmedia_codec_amrwb_ordermap_885[] = {0, 4, 6, 7, 5, 3, 47, 48, 49, 112, 113, 114, 75, 106, 140, 171, 80, 111, 145, 176, 77, 108, 142, 173, 78, 109, 143, 174, 79, 110, 144, 175, 76, 107, 141, 172, 50, 115, 51, 2, 1, 81, 116, 146, 19, 21, 12, 17, 18, 20, 16, 25, 13, 10, 14, 24, 23, 22, 26, 8, 15, 52, 117, 31, 82, 147, 9, 33, 11, 83, 148, 53, 118, 28, 27, 84, 149, 34, 35, 29, 46, 32, 30, 54, 119, 37, 36, 39, 38, 40, 85, 150, 41, 42, 43, 44, 45, 55, 60, 65, 70, 86, 91, 96, 101, 120, 125, 130, 135, 151, 156, 161, 166, 56, 87, 121, 152, 61, 92, 126, 157, 66, 97, 131, 162, 71, 102, 136, 167, 57, 88, 122, 153, 62, 93, 127, 158, 67, 98, 132, 163, 72, 103, 137, 168, 58, 89, 123, 154, 63, 94, 128, 159, 68, 99, 133, 164, 73, 104, 138, 169, 59, 90, 124, 155, 64, 95, 129, 160, 69, 100, 134, 165, 74, 105, 139, 170}
const pj_int16_t pjmedia_codec_amrwb_ordermap_1265[] = {0, 4, 6, 93, 143, 196, 246, 7, 5, 3, 47, 48, 49, 50, 51, 150, 151, 152, 153, 154, 94, 144, 197, 247, 99, 149, 202, 252, 96, 146, 199, 249, 97, 147, 200, 250, 100, 203, 98, 148, 201, 251, 95, 145, 198, 248, 52, 2, 1, 101, 204, 155, 19, 21, 12, 17, 18, 20, 16, 25, 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 156, 31, 102, 205, 9, 33, 11, 103, 206, 54, 157, 28, 27, 104, 207, 34, 35, 29, 46, 32, 30, 55, 158, 37, 36, 39, 38, 40, 105, 208, 41, 42, 43, 44, 45, 56, 106, 159, 209, 57, 66, 75, 84, 107, 116, 125, 134, 160, 169, 178, 187, 210, 219, 228, 237, 58, 108, 161, 211, 62, 112, 165, 215, 67, 117, 170, 220, 71, 121, 174, 224, 76, 126, 179, 229, 80, 130, 183, 233, 85, 135, 188, 238, 89, 139, 192, 242, 59, 109, 162, 212, 63, 113, 166, 216, 68, 118, 171, 221, 72, 122, 175, 225, 77, 127, 180, 230, 81, 131, 184, 234, 86, 136, 189, 239, 90, 140, 193, 243, 60, 110, 163, 213, 64, 114, 167, 217, 69, 119, 172, 222, 73, 123, 176, 226, 78, 128, 181, 231, 82, 132, 185, 235, 87, 137, 190, 240, 91, 141, 194, 244, 61, 111, 164, 214, 65, 115, 168, 218, 70, 120, 173, 223, 74, 124, 177, 227, 79, 129, 182, 232, 83, 133, 186, 236, 88, 138, 191, 241, 92, 142, 195, 245}
const pj_int16_t pjmedia_codec_amrwb_ordermap_1425[]
const pj_int16_t pjmedia_codec_amrwb_ordermap_1585[]
const pj_int16_t pjmedia_codec_amrwb_ordermap_1825[]
const pj_int16_t pjmedia_codec_amrwb_ordermap_1985[]
const pj_int16_t pjmedia_codec_amrwb_ordermap_2305[]
const pj_int16_t pjmedia_codec_amrwb_ordermap_2385[]
const pj_int16_t *const pjmedia_codec_amrnb_ordermaps[8] = {pjmedia_codec_amrnb_ordermap475, pjmedia_codec_amrnb_ordermap515, pjmedia_codec_amrnb_ordermap59, pjmedia_codec_amrnb_ordermap67, pjmedia_codec_amrnb_ordermap74, pjmedia_codec_amrnb_ordermap795, pjmedia_codec_amrnb_ordermap102, pjmedia_codec_amrnb_ordermap122}

AMR-NB bitstream sensitivity order maps.

const pj_int16_t *const pjmedia_codec_amrwb_ordermaps[9] = {pjmedia_codec_amrwb_ordermap_660, pjmedia_codec_amrwb_ordermap_885, pjmedia_codec_amrwb_ordermap_1265, pjmedia_codec_amrwb_ordermap_1425, pjmedia_codec_amrwb_ordermap_1585, pjmedia_codec_amrwb_ordermap_1825, pjmedia_codec_amrwb_ordermap_1985, pjmedia_codec_amrwb_ordermap_2305, pjmedia_codec_amrwb_ordermap_2385}

AMR-WB bitstream sensitivity order maps.

const pj_uint8_t pjmedia_codec_amrnb_framelen[16] = {12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0}

Constant of AMR-NB frame lengths in bytes.

const pj_uint16_t pjmedia_codec_amrnb_framelenbits[9] = {95, 103, 118, 134, 148, 159, 204, 244, 39}

Constant of AMR-NB frame lengths in bits.

const pj_uint16_t pjmedia_codec_amrnb_bitrates[8] = {4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200}

Constant of AMR-NB bitrates.

const pj_uint8_t pjmedia_codec_amrwb_framelen[16] = {17, 23, 32, 37, 40, 46, 50, 58, 60, 5, 0, 0, 0, 0, 0, 0}

Constant of AMR-WB frame lengths in bytes.

const pj_uint16_t pjmedia_codec_amrwb_framelenbits[10] = {132, 177, 253, 285, 317, 365, 397, 461, 477, 40}

Constant of AMR-WB frame lengths in bits.

const pj_uint16_t pjmedia_codec_amrwb_bitrates[9] = {6600, 8850, 12650, 14250, 15850, 18250, 19850, 23050, 23850}

Constant of AMR-WB bitrates.

struct pjmedia_codec_amr_bit_info
#include <amr_helper.h>

This structure describes AMR frame info, to be fitted into pjmedia_frame bit info.

struct pjmedia_codec_amr_pack_setting
#include <amr_helper.h>

This structure describes AMR settings.