int main() { int i, n, coded_len, out_len, a, amp; memset(pad1, 0xff, 4); /* Memory overwrite test */ memset(pad2, 0xff, 4); memset(pad3, 0xff, 4); srandom(123213); for(n = 0; n < NUM_TESTS; n++) { amp = (random() &0x0f); for(i = 0; i< 80; i++) { a = (int)(amp * sin(M_PI * 2.0 * (float)i/16.0)); assert(abs(a) < 16); src[i] = (a << 4) & 0xf0; a = amp; assert(abs(a) < 16); src[i] |= (a & 0x0f); } memcpy(safe, src, 80); coded_len = vdvi_encode(src, 160, coded, 160); assert(!memcmp(src,safe,80)); check_padding(); out_len = vdvi_decode(coded, 160, dst, 160); assert(!memcmp(src,safe,80)); assert(!memcmp(dst,safe,80)); /* dst matches sources */ assert(coded_len == out_len); check_padding(); for(i = 0; i< 80; i++) { assert(src[i] == dst[i]); } if (0 == (n % 1000)) { printf("."); fflush(stdout); } } printf("\nTested %d frames\n", n); return 1; }
int vdvi_encoder(uint16_t idx, u_char *encoder_state, sample *inbuf, coded_unit *c) { int samples, len; u_char dvi_buf[80]; u_char vdvi_buf[160]; vdvi_state_t *v; assert(encoder_state); assert(inbuf); assert(idx < VDVI_NUM_FORMATS); UNUSED(idx); v = (vdvi_state_t*)encoder_state; /* Transfer state and fix ordering */ c->state = (u_char*)block_alloc(sizeof(struct adpcm_state)); c->state_len = sizeof(struct adpcm_state); memcpy(c->state, v->as, sizeof(struct adpcm_state)); /* Fix coded state for byte ordering */ ((struct adpcm_state*)c->state)->valprev = htons(((struct adpcm_state*)c->state)->valprev); samples = cs[idx].format.bytes_per_block * 8 / cs[idx].format.bits_per_sample; assert(samples == 160); adpcm_coder(inbuf, dvi_buf, samples, v->as); bs_attach(v->bs, vdvi_buf, sizeof(vdvi_buf)/sizeof(vdvi_buf[0])); memset(vdvi_buf, 0, sizeof(vdvi_buf)/sizeof(vdvi_buf[0])); len = vdvi_encode(dvi_buf, 160, v->bs); c->data = (u_char*)block_alloc(len); c->data_len = len; memcpy(c->data, vdvi_buf, len); return len; }