static switch_status_t switch_g726_destroy(switch_codec_t *codec) { g726_state_t *context = codec->private_info; if (!context) { return SWITCH_STATUS_FALSE; } g726_free(context); codec->private_info = NULL; return SWITCH_STATUS_SUCCESS; }
int main(int argc, char *argv[]) { g726_state_t *enc_state; g726_state_t *dec_state; int opt; int itutests; int bit_rate; SNDFILE *inhandle; SNDFILE *outhandle; int16_t amp[1024]; int frames; int adpcm; int packing; bit_rate = 32000; itutests = true; packing = G726_PACKING_NONE; while ((opt = getopt(argc, argv, "b:LR")) != -1) { switch (opt) { case 'b': bit_rate = atoi(optarg); if (bit_rate != 16000 && bit_rate != 24000 && bit_rate != 32000 && bit_rate != 40000) { fprintf(stderr, "Invalid bit rate selected. Only 16000, 24000, 32000 and 40000 are valid.\n"); exit(2); } itutests = false; break; case 'L': packing = G726_PACKING_LEFT; break; case 'R': packing = G726_PACKING_RIGHT; break; default: //usage(); exit(2); } } if (itutests) { itu_compliance_tests(); } else { if ((inhandle = sf_open_telephony_read(IN_FILE_NAME, 1)) == NULL) { fprintf(stderr, " Cannot open audio file '%s'\n", IN_FILE_NAME); exit(2); } if ((outhandle = sf_open_telephony_write(OUT_FILE_NAME, 1)) == NULL) { fprintf(stderr, " Cannot create audio file '%s'\n", OUT_FILE_NAME); exit(2); } printf("ADPCM packing is %d\n", packing); enc_state = g726_init(NULL, bit_rate, G726_ENCODING_LINEAR, packing); dec_state = g726_init(NULL, bit_rate, G726_ENCODING_LINEAR, packing); while ((frames = sf_readf_short(inhandle, amp, 159))) { adpcm = g726_encode(enc_state, adpcmdata, amp, frames); frames = g726_decode(dec_state, amp, adpcmdata, adpcm); sf_writef_short(outhandle, amp, frames); } if (sf_close_telephony(inhandle)) { printf(" Cannot close audio file '%s'\n", IN_FILE_NAME); exit(2); } if (sf_close_telephony(outhandle)) { printf(" Cannot close audio file '%s'\n", OUT_FILE_NAME); exit(2); } printf("'%s' transcoded to '%s' at %dbps.\n", IN_FILE_NAME, OUT_FILE_NAME, bit_rate); g726_free(enc_state); g726_free(dec_state); } return 0; }