static switch_status_t switch_bv16_encode(switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag) { struct bv16_context *context = codec->private_info; if (!context) { return SWITCH_STATUS_FALSE; } *encoded_data_len = bv16_encode(context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2); return SWITCH_STATUS_SUCCESS; }
static void enc_process(MSFilter *f){ EncState *s=(EncState*)f->data; mblk_t *im; int size = BV16_CODE_SIZE *2; int i,frames; uint8_t buf[BV16_FRAME_SIZE * 2 * 4]; while((im=ms_queue_get(f->inputs[0]))!=NULL){ ms_bufferizer_put(s->bufferizer,im); } while(ms_bufferizer_read(s->bufferizer,(uint8_t*)buf,sizeof(buf))==sizeof(buf)) { mblk_t *om=allocb(BV16_CODE_SIZE*8,0); uint8_t *in_buf = (uint8_t *)buf; frames = sizeof(buf)/(BV16_FRAME_SIZE * 2); for(i=0;i<frames;i++) { //BV16_Encode(&s->ebs, &s->cs,(short *)in_buf); //BV16_BitPack((unsigned short *)om->b_wptr, &s->ebs); bv16_encode(s->enc, (uint8_t *)om->b_wptr, (int16_t *) in_buf, BV16_FRAME_SIZE); //ms_error("BV16_Encode frames %d",i); in_buf += 80; om->b_wptr += 10; } mblk_set_timestamp_info(om,s->ts); ms_queue_put(f->outputs[0],om); s->ts+=sizeof(buf)/2; } }