static tsk_size_t tdav_codec_g729ab_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size) { tsk_size_t ex_size, out_size = 0; tdav_codec_g729ab_t* g729a = (tdav_codec_g729ab_t*)self; int i, frame_count = (in_size / 160); if(!self || !in_data || !in_size || !out_data || (in_size % 160)){ TSK_DEBUG_ERROR("Invalid parameter"); return 0; } ex_size = (frame_count * 10); // allocate new buffer if needed if(*out_max_size <ex_size){ if(!(*out_data = tsk_realloc(*out_data, ex_size))){ TSK_DEBUG_ERROR("Failed to allocate new buffer"); *out_max_size = 0; return 0; } *out_max_size = ex_size; } for(i=0; i<frame_count; i++){ extern int16_t *new_speech; if(g729a->encoder.frame == 32767){ g729a->encoder.frame = 256; } else{ g729a->encoder.frame++; } memcpy(new_speech, &((uint8_t*)in_data)[i*L_FRAME*sizeof(int16_t)], sizeof(int16_t)*L_FRAME); Pre_Process(new_speech, L_FRAME); Coder_ld8a(g729a->encoder.prm, g729a->encoder.frame, g729a->encoder.vad_enable); prm2bits_ld8k(g729a->encoder.prm, g729a->encoder.serial); if(g729a->encoder.serial[1] == RATE_8000){ pack_G729(&g729a->encoder.serial[2], &((uint8_t*)(*out_data))[out_size]); out_size += 10; } else if(g729a->encoder.serial[1] == RATE_SID_OCTET){ pack_SID(&g729a->encoder.serial[2], &((uint8_t*)(*out_data))[out_size]); out_size += 2; } else{ // RATE_0 //TSK_DEBUG_INFO("G729_RATE_0 - Not transmitted"); if (!g729a->encoder.vad_enable) { // silence memset(&((uint8_t*)(*out_data))[out_size], 0, 10); out_size += 10; } } } return out_size; }
void G729aCoder(Word16 SpeechBuf[],Word16 serial[]) { extern Word16 *new_speech; /* Pointer to new speech data */ Word16 prm[PRM_SIZE]; /* Analysis parameters. */ Word16 i; for(i=0;i<L_FRAME;i++) new_speech[i]=SpeechBuf[i]; Set_zero(prm, PRM_SIZE); Pre_Process(new_speech, L_FRAME); Coder_ld8a(prm); prm2bits_ld8k( prm, serial); }
int main(int argc, char *argv[] ) { FILE *f_speech; /* File of speech data */ FILE *f_serial; /* File of serial bits for transmission */ extern Word16 *new_speech; /* Pointer to new speech data */ Word16 prm[PRM_SIZE+1]; /* Analysis parameters + frame type */ Word16 serial[SERIAL_SIZE]; /* Output bitstream buffer */ Word16 frame; /* frame counter */ Word32 count_frame; /* For G.729B */ Word16 nb_words; Word16 vad_enable; printf("\n"); printf("*********** ITU G.729A 8 KBIT/S SPEECH CODER ***********\n"); printf(" (WITH ANNEX B) \n"); printf("\n"); printf("------------------- Fixed point C simulation -----------------\n"); printf("\n"); printf("------------ Version 1.5 (Release 2, November 2006) ----------\n"); printf("\n"); /*--------------------------------------------------------------------------* * Open speech file and result file (output serial bit stream) * *--------------------------------------------------------------------------*/ if ( argc != 4 ){ printf("Usage :%s speech_file bitstream_file VAD_flag\n", argv[0]); printf("\n"); printf("Format for speech_file:\n"); printf(" Speech is read from a binary file of 16 bits PCM data.\n"); printf("\n"); printf("Format for bitstream_file:\n"); printf(" One (2-byte) synchronization word \n"); printf(" One (2-byte) size word,\n"); printf(" 80 words (2-byte) containing 80 bits.\n"); printf("\n"); printf("VAD flag:\n"); printf(" 0 to disable the VAD\n"); printf(" 1 to enable the VAD\n"); exit(1); } if ( (f_speech = fopen(argv[1], "rb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[1]); exit(0); } printf(" Input speech file: %s\n", argv[1]); if ( (f_serial = fopen(argv[2], "wb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[2]); exit(0); } printf(" Output bitstream file: %s\n", argv[2]); vad_enable = (Word16)atoi(argv[3]); if (vad_enable == 1) printf(" VAD enabled\n"); else printf(" VAD disabled\n"); #ifndef OCTET_TX_MODE printf(" OCTET TRANSMISSION MODE is disabled\n"); #endif /*--------------------------------------------------------------------------* * Initialization of the coder. * *--------------------------------------------------------------------------*/ Init_Pre_Process(); Init_Coder_ld8a(); Set_zero(prm, PRM_SIZE+1); /* for G.729B */ Init_Cod_cng(); /* Loop for each "L_FRAME" speech data. */ frame = 0; count_frame = 0L; while( fread(new_speech, sizeof(Word16), L_FRAME, f_speech) == L_FRAME) { printf("Frame = %ld\r", count_frame++); if (frame == 32767) frame = 256; else frame++; Pre_Process(new_speech, L_FRAME); Coder_ld8a(prm, frame, vad_enable); prm2bits_ld8k( prm, serial); nb_words = serial[1] + (Word16)2; fwrite(serial, sizeof(Word16), nb_words, f_serial); } printf("%ld frames processed\n", count_frame); return (0); }
int main(int argc, char *argv[] ) { FILE *f_speech; /* File of speech data */ FILE *f_serial; /* File of serial bits for transmission */ extern Word16 *new_speech; /* Pointer to new speech data */ Word16 prm[PRM_SIZE+1]; /* Analysis parameters. */ Word16 serial[SERIAL_SIZE]; /* Output bitstream buffer */ Word16 syn[L_FRAME]; /* Buffer for synthesis speech */ Word16 i, frame; /* frame counter */ Word32 count_frame; /* For G.729B */ Word16 nb_words; Word16 vad_enable; printf("\n"); printf("*********** ITU G.729 8 KBIT/S SPEECH CODER ***********\n"); printf(" (WITH ANNEX B) \n"); printf("\n"); printf("------------------- Fixed point C simulation -----------------\n"); printf("\n"); printf("------------------ Version 1.4 ----------------\n"); printf("\n"); /*--------------------------------------------------------------------------* * Open speech file and result file (output serial bit stream) * *--------------------------------------------------------------------------*/ if ( argc != 4 ) { printf("Usage :%s speech_file bitstream_file VAD_flag\n",argv[0]); printf("\n"); printf("Format for speech_file:\n"); printf(" Speech is read from a binary file of 16 bits PCM data.\n"); printf("\n"); printf("Format for bitstream_file:\n"); printf(" One (2-byte) synchronization word \n"); printf(" One (2-byte) size word,\n"); printf(" 80 words (2-byte) containing 80 bits.\n"); printf("\n"); printf("VAD flag:\n"); printf(" 0 to disable the VAD\n"); printf(" 1 to enable the VAD\n"); exit(1); } if ( (f_speech = fopen(argv[1], "rb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[1]); exit(0); } printf(" Input speech file : %s\n", argv[1]); if ( (f_serial = fopen(argv[2], "wb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[2]); exit(0); } printf(" Output bitstream file: %s\n", argv[2]); vad_enable = (Word16)atoi(argv[3]); if (vad_enable == 1) printf(" VAD enabled\n"); else printf(" VAD disabled\n"); #ifndef OCTET_TX_MODE printf(" OCTET TRANSMISSION MODE is disabled\n"); #endif /*--------------------------------------------------------------------------* * Initialization of the coder. * *--------------------------------------------------------------------------*/ Init_Pre_Process(); Init_Coder_ld8k(); for(i=0; i<PRM_SIZE; i++) prm[i] = (Word16)0; /* for G.729B */ Init_Cod_cng(); /* To force the input and output to be time-aligned the variable SYNC has to be defined. Note: the test vectors were generated with this option disabled */ #ifdef SYNC /* Read L_NEXT first speech data */ fread(&new_speech[-L_NEXT], sizeof(Word16), L_NEXT, f_speech); #ifdef HARDW /* set 3 LSB's to zero */ for(i=0; i < L_NEXT; i++) new_speech[-L_NEXT+i] = new_speech[-L_NEXT+i] & 0xFFF8; #endif Pre_Process(&new_speech[-L_NEXT], L_NEXT); #endif /* Loop for each "L_FRAME" speech data. */ frame =0; count_frame = 0L; while( fread(new_speech, sizeof(Word16), L_FRAME, f_speech) == L_FRAME) { printf("Frame = %ld\r", count_frame++); #ifdef HARDW /* set 3 LSB's to zero */ for(i=0; i < L_FRAME; i++) new_speech[i] = new_speech[i] & 0xFFF8; #endif if (frame == 32767) frame = 256; else frame++; Pre_Process(new_speech, L_FRAME); Coder_ld8k(prm, syn, frame, vad_enable); prm2bits_ld8k( prm, serial); nb_words = add((Word16)serial[1], 2); fwrite(serial, sizeof(Word16), nb_words, f_serial); } printf("%ld frames processed\n", count_frame); return (0); }
int main(int argc, char *argv[] ) { FILE *f_speech; /* File of speech data */ FILE *f_serial; /* File of serial bits for transmission */ extern Word16 *new_speech; /* Pointer to new speech data */ Word16 prm[PRM_SIZE]; /* Analysis parameters. */ Word16 serial[SERIAL_SIZE]; /* Output bitstream buffer */ Word16 syn[L_FRAME]; /* Buffer for synthesis speech */ Word16 i, frame; /* frame counter */ printf("\n"); printf("*********** ITU G.729 8 KBIT/S SPEECH CODER ***********\n"); printf("\n"); printf("------------------- Fixed point C simulation -----------------\n"); printf("\n"); printf("------------ Version 3.3 (Release 2, November 2006) --------\n"); printf("\n"); /*--------------------------------------------------------------------------* * Open speech file and result file (output serial bit stream) * *--------------------------------------------------------------------------*/ if ( argc != 3 ) { printf("Usage : coder speech_file bitstream_file\n"); printf("\n"); printf("Format for speech_file:\n"); printf(" Speech is read from a binary file of 16 bits PCM data.\n"); printf("\n"); printf("Format for bitstream_file:\n"); printf(" One (2-byte) synchronization word \n"); printf(" One (2-byte) size word,\n"); printf(" 80 words (2-byte) containing 80 bits.\n"); printf("\n"); exit(1); } if ( (f_speech = fopen(argv[1], "rb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[1]); exit(0); } printf(" Input speech file : %s\n", argv[1]); if ( (f_serial = fopen(argv[2], "wb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[2]); exit(0); } printf(" Output bitstream file: %s\n", argv[2]); /*--------------------------------------------------------------------------* * Initialization of the coder. * *--------------------------------------------------------------------------*/ Init_Pre_Process(); Init_Coder_ld8k(); for(i=0; i<PRM_SIZE; i++) prm[i] = (Word16)0; /* To force the input and output to be time-aligned the variable SYNC has to be defined. Note: the test vectors were generated with this option disabled */ #ifdef SYNC /* Read L_NEXT first speech data */ fread(&new_speech[-L_NEXT], sizeof(Word16), L_NEXT, f_speech); #ifdef HARDW /* set 3 LSB's to zero */ for(i=0; i < L_NEXT; i++) new_speech[-L_NEXT+i] = new_speech[-L_NEXT+i] & 0xFFF8; #endif Pre_Process(&new_speech[-L_NEXT], L_NEXT); #endif /* Loop for each "L_FRAME" speech data. */ frame =0; while( fread(new_speech, sizeof(Word16), L_FRAME, f_speech) == L_FRAME) { #ifdef HARDW /* set 3 LSB's to zero */ for(i=0; i < L_FRAME; i++) new_speech[i] = new_speech[i] & 0xFFF8; #endif Pre_Process(new_speech, L_FRAME); Coder_ld8k(prm, syn); prm2bits_ld8k( prm, serial); if (fwrite(serial, sizeof(Word16), SERIAL_SIZE, f_serial) != SERIAL_SIZE) printf("Write Error for frame %d\n", frame); frame++; printf("Frame =%d\r", frame); } return (0); }
int main(int argc, char *argv[] ) { FILE *f_speech; /* File of speech data */ FILE *f_serial; /* File of serial bits for transmission */ extern Word16 *new_speech; /* Pointer to new speech data */ Word16 prm[PRM_SIZE]; /* Analysis parameters. */ Word16 serial[SERIAL_SIZE]; /* Output bitstream buffer */ Word16 frame; /* frame counter */ printf("\n"); printf("*********** ITU G.729A 8 KBIT/S SPEECH CODER ***********\n"); printf("\n"); printf("------------------- Fixed point C simulation -----------------\n"); printf("\n"); printf("------------ Version 1.1 (Release 2, November 2006) --------\n"); printf("\n"); /*--------------------------------------------------------------------------* * Open speech file and result file (output serial bit stream) * *--------------------------------------------------------------------------*/ if ( argc != 3 ) { printf("Usage : coder speech_file bitstream_file\n"); printf("\n"); printf("Format for speech_file:\n"); printf(" Speech is read from a binary file of 16 bits PCM data.\n"); printf("\n"); printf("Format for bitstream_file:\n"); printf(" One (2-byte) synchronization word \n"); printf(" One (2-byte) size word,\n"); printf(" 80 words (2-byte) containing 80 bits.\n"); printf("\n"); exit(1); } if ( (f_speech = fopen(argv[1], "rb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[1]); exit(0); } printf(" Input speech file : %s\n", argv[1]); if ( (f_serial = fopen(argv[2], "wb")) == NULL) { printf("%s - Error opening file %s !!\n", argv[0], argv[2]); exit(0); } printf(" Output bitstream file: %s\n", argv[2]); /*--------------------------------------------------------------------------* * Initialization of the coder. * *--------------------------------------------------------------------------*/ Init_Pre_Process(); Init_Coder_ld8a(); Set_zero(prm, PRM_SIZE); /* Loop for each "L_FRAME" speech data. */ frame =0; while( fread(new_speech, sizeof(Word16), L_FRAME, f_speech) == L_FRAME) { printf("Frame =%d\r", frame++); Pre_Process(new_speech, L_FRAME); Coder_ld8a(prm); prm2bits_ld8k( prm, serial); fwrite(serial, sizeof(Word16), SERIAL_SIZE, f_serial); } return (0); }