static int G7221Decode(const struct PluginCodec_Definition * codec, void * context, const void * fromPtr, unsigned * fromLen, void * toPtr, unsigned * toLen, unsigned int * flag) { if (context == NULL) return 0; *toLen = g722_1_decode((g722_1_decode_state_t *)context, (int16_t *)toPtr, fromPtr, *fromLen)*2; return 1; }
static switch_status_t switch_siren_decode(switch_codec_t *codec, switch_codec_t *other_codec, void *encoded_data, uint32_t encoded_data_len, uint32_t encoded_rate, void *decoded_data, uint32_t *decoded_data_len, uint32_t *decoded_rate, unsigned int *flag) { struct siren_context *context = codec->private_info; if (!context) { return SWITCH_STATUS_FALSE; } *decoded_data_len = g722_1_decode(&context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len) * sizeof(int16_t); return SWITCH_STATUS_SUCCESS; }
int g7221_decode(struct audec_state *ads, int fmt, void *sampv, size_t *sampc, const uint8_t *buf, size_t len) { size_t framec; if (!ads || !sampv || !sampc || !buf) return EINVAL; framec = len / ads->dec.bytes_per_frame; if (len != ads->dec.bytes_per_frame * framec) return EPROTO; if (*sampc < ads->dec.frame_size * framec) return ENOMEM; *sampc = g722_1_decode(&ads->dec, sampv, buf, (int)len); return 0; }