Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2019-03-15 01:52:59 +0300
committerJean-Marc Valin <jmvalin@jmvalin.ca>2019-03-15 01:52:59 +0300
commit40ceb487c91da129794b02fce5f2b6b99b61cc84 (patch)
tree823d8303f2f3ba24640ff3bb7950965a3fefa964 /dnn/dump_data.c
parent23859d74ff6861b73bad1fd0c2bc12e9b7ce3c6e (diff)
Now encoding to a binary bit-stream (64 bytes/packet)
Diffstat (limited to 'dnn/dump_data.c')
-rw-r--r--dnn/dump_data.c69
1 files changed, 61 insertions, 8 deletions
diff --git a/dnn/dump_data.c b/dnn/dump_data.c
index 8c11d99e..5b9a9f8e 100644
--- a/dnn/dump_data.c
+++ b/dnn/dump_data.c
@@ -474,7 +474,22 @@ typedef struct {
unsigned char *chars;
} packer;
-void bits_init(packer *bits, unsigned char *buf, int size) {
+typedef struct {
+ int byte_pos;
+ int bit_pos;
+ int max_bytes;
+ const unsigned char *chars;
+} unpacker;
+
+void bits_packer_init(packer *bits, unsigned char *buf, int size) {
+ bits->byte_pos = 0;
+ bits->bit_pos = 0;
+ bits->max_bytes = size;
+ bits->chars = buf;
+ RNN_CLEAR(buf, size);
+}
+
+void bits_unpacker_init(unpacker *bits, unsigned char *buf, int size) {
bits->byte_pos = 0;
bits->bit_pos = 0;
bits->max_bytes = size;
@@ -503,7 +518,7 @@ void bits_pack(packer *bits, unsigned int data, int nb_bits) {
}
}
-unsigned int bits_unpack(packer *bits, int nb_bits) {
+unsigned int bits_unpack(unpacker *bits, int nb_bits) {
unsigned int d=0;
while(nb_bits)
{
@@ -787,7 +802,20 @@ static void process_superframe(DenoiseState *st, FILE *ffeat, int encode, int qu
//printf("\n");
RNN_COPY(st->vq_mem, &st->features[3][0], NB_BANDS);
if (encode) {
- fprintf(ffeat, "%d %d %d %d %d %d %d %d %d\n", c0_id+64, main_pitch, voiced ? modulation+4 : 0, corr_id, vq_end[0], vq_end[1], vq_end[2], vq_mid, interp_id);
+ unsigned char buf[8];
+ packer bits;
+ //fprintf(stdout, "%d %d %d %d %d %d %d %d %d\n", c0_id+64, main_pitch, voiced ? modulation+4 : 0, corr_id, vq_end[0], vq_end[1], vq_end[2], vq_mid, interp_id);
+ bits_packer_init(&bits, buf, 8);
+ bits_pack(&bits, c0_id+64, 7);
+ bits_pack(&bits, main_pitch, 6);
+ bits_pack(&bits, voiced ? modulation+4 : 0, 3);
+ bits_pack(&bits, corr_id, 2);
+ bits_pack(&bits, vq_end[0], 10);
+ bits_pack(&bits, vq_end[1], 10);
+ bits_pack(&bits, vq_end[2], 10);
+ bits_pack(&bits, vq_mid, 13);
+ bits_pack(&bits, interp_id, 3);
+ fwrite(buf, 1, 8, ffeat);
} else {
for (i=0;i<4;i++) {
fwrite(st->features[i], sizeof(float), NB_FEATURES, ffeat);
@@ -795,13 +823,36 @@ static void process_superframe(DenoiseState *st, FILE *ffeat, int encode, int qu
}
}
-void decode_packet(FILE *ffeat, float *vq_mem, int c0_id, int main_pitch, int modulation, int corr_id, int vq_end[3], int vq_mid, int interp_id)
+void decode_packet(FILE *ffeat, float *vq_mem, unsigned char buf[8])
{
+ int c0_id;
+ int main_pitch;
+ int modulation;
+ int corr_id;
+ int vq_end[3];
+ int vq_mid;
+ int interp_id;
+
int i;
int sub;
int voiced = 1;
float frame_corr;
float features[4][NB_FEATURES];
+ unpacker bits;
+
+ bits_unpacker_init(&bits, buf, 8);
+ c0_id = bits_unpack(&bits, 7);
+ main_pitch = bits_unpack(&bits, 6);
+ modulation = bits_unpack(&bits, 3);
+ corr_id = bits_unpack(&bits, 2);
+ vq_end[0] = bits_unpack(&bits, 10);
+ vq_end[1] = bits_unpack(&bits, 10);
+ vq_end[2] = bits_unpack(&bits, 10);
+ vq_mid = bits_unpack(&bits, 13);
+ interp_id = bits_unpack(&bits, 3);
+ //fprintf(stdout, "%d %d %d %d %d %d %d %d %d\n", c0_id, main_pitch, modulation, corr_id, vq_end[0], vq_end[1], vq_end[2], vq_mid, interp_id);
+
+
for (i=0;i<4;i++) RNN_CLEAR(&features[i][0], NB_FEATURES);
modulation -= 4;
@@ -990,10 +1041,12 @@ int main(int argc, char **argv) {
float vq_mem[NB_BANDS] = {0};
while (1) {
int ret;
- int c0_id, main_pitch, modulation, corr_id, vq_end[3], vq_mid, interp_id;
- ret = fscanf(f1, "%d %d %d %d %d %d %d %d %d\n", &c0_id, &main_pitch, &modulation, &corr_id, &vq_end[0], &vq_end[1], &vq_end[2], &vq_mid, &interp_id);
- if (ret != 9) break;
- decode_packet(ffeat, vq_mem, c0_id, main_pitch, modulation, corr_id, vq_end, vq_mid, interp_id);
+ unsigned char buf[8];
+ //int c0_id, main_pitch, modulation, corr_id, vq_end[3], vq_mid, interp_id;
+ //ret = fscanf(f1, "%d %d %d %d %d %d %d %d %d\n", &c0_id, &main_pitch, &modulation, &corr_id, &vq_end[0], &vq_end[1], &vq_end[2], &vq_mid, &interp_id);
+ ret = fread(buf, 1, 8, f1);
+ if (ret != 8) break;
+ decode_packet(ffeat, vq_mem, buf);
}
return 0;
}