/*
Allows optional stealing of one of the voicing bits for use as a
- spare bit, only 1400 & 1600 bit/s supported for now. Experimental
- method of sending voice/data frames for FreeDV.
+ spare bit, only 1300 & 1400 & 1600 bit/s supported for now.
+ Experimental method of sending voice/data frames for FreeDV.
*/
int CODEC2_WIN32SUPPORT codec2_get_spare_bit_index(struct CODEC2 *c2)
assert(c2 != NULL);
switch(c2->mode) {
+ case CODEC2_MODE_1300:
+ return 2; // bit 2 (3th bit) is v2 (third voicing bit)
+ break;
case CODEC2_MODE_1400:
return 10; // bit 10 (11th bit) is v2 (third voicing bit)
break;
v1 = unpacked_bits[1];
switch(c2->mode) {
+ case CODEC2_MODE_1300:
+
+ v3 = unpacked_bits[1+1+1];
+
+ /* if either adjacent frame is voiced, make this one voiced */
+
+ unpacked_bits[2] = (v1 || v3);
+
+ return 0;
+
+ break;
+
case CODEC2_MODE_1400:
v3 = unpacked_bits[1+1+8+1];
unique_word = 0;
for(i=0; i<NSYNC_MEM-1; i++)
sync_mem[i] = sync_mem[i+1];
- sync_mem[i] = sync_bit;
+ sync_mem[i] = 1 - 2*sync_bit;
corr = 0;
for(i=0; i<NSYNC_MEM; i++)
corr += sync_mem[i]*sync_uw[i];
- if (corr == NSYNC_MEM)
+ if (abs(corr) == NSYNC_MEM)
unique_word = 1;
/* iterate state machine */
break;
}
+ printf("state: %d next_state: %d uw: %d timer: %d\n", *state, next_state, unique_word, *timer);
*state = next_state;
if (*state)
sync = 1;