shithub: opus

Download patch

ref: d53531d0bd600e9d1d2400bb801cb381245321c4
parent: 0b75501270eef6477bd337987fd24d92ba80112f
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Sun Oct 29 12:33:57 EDT 2023

Update blob loading code

--- a/dnn/fargan.c
+++ b/dnn/fargan.c
@@ -174,7 +174,11 @@
 {
   int ret;
   OPUS_CLEAR(st, 1);
+#ifndef USE_WEIGHTS_FILE
   ret = init_fargan(&st->model, fargan_arrays);
+#else
+  ret = 0;
+#endif
   celt_assert(ret == 0);
   /* FIXME: perform arch detection. */
 }
--- a/dnn/lpcnet.h
+++ b/dnn/lpcnet.h
@@ -94,6 +94,8 @@
   */
 int lpcnet_encoder_init(LPCNetEncState *st);
 
+int lpcnet_encoder_load_model(LPCNetEncState *st, const unsigned char *data, int len);
+
 /** Allocates and initializes an encoder state.
   *  @returns The newly created state
   */
--- a/dnn/lpcnet_demo.c
+++ b/dnn/lpcnet_demo.c
@@ -148,7 +148,7 @@
         float zeros[320] = {0};
         fargan_init(&fargan);
 #ifdef USE_WEIGHTS_FILE
-        fargan_load_model(fwgan, data, len);
+        fargan_load_model(&fargan, data, len);
 #endif
         /* uncomment the following to align with Python code */
         /*ret = fread(&in_features[0], sizeof(in_features[0]), NB_TOTAL_FEATURES, fin);*/
--- a/dnn/lpcnet_enc.c
+++ b/dnn/lpcnet_enc.c
@@ -56,6 +56,10 @@
   return 0;
 }
 
+int lpcnet_encoder_load_model(LPCNetEncState *st, const unsigned char *data, int len) {
+  return pitchdnn_load_model(&st->pitchdnn, data, len);
+}
+
 LPCNetEncState *lpcnet_encoder_create(void) {
   LPCNetEncState *st;
   st = malloc(lpcnet_encoder_get_size());
--- a/dnn/lpcnet_plc.c
+++ b/dnn/lpcnet_plc.c
@@ -74,6 +74,9 @@
   ret = init_plc_model(&st->model, list);
   free(list);
   if (ret == 0) {
+    ret = lpcnet_encoder_load_model(&st->enc, data, len);
+  } else return -1;
+  if (ret == 0) {
     return fargan_load_model(&st->fargan, data, len);
   }
   else return -1;
--- a/dnn/pitchdnn.c
+++ b/dnn/pitchdnn.c
@@ -67,3 +67,13 @@
   celt_assert(ret == 0);
   /* FIXME: perform arch detection. */
 }
+
+int pitchdnn_load_model(PitchDNNState *st, const unsigned char *data, int len) {
+  WeightArray *list;
+  int ret;
+  parse_weights(&list, data, len);
+  ret = init_pitchdnn(&st->model, list);
+  free(list);
+  if (ret == 0) return 0;
+  else return -1;
+}
--- a/dnn/pitchdnn.h
+++ b/dnn/pitchdnn.h
@@ -22,6 +22,7 @@
 
 
 void pitchdnn_init(PitchDNNState *st);
+int pitchdnn_load_model(PitchDNNState *st, const unsigned char *data, int len);
 
 float compute_pitchdnn(
     PitchDNNState *st,
--- a/silk/dred_encoder.c
+++ b/silk/dred_encoder.c
@@ -54,6 +54,9 @@
     parse_weights(&list, data, len);
     ret = init_rdovaeenc(&enc->model, list);
     free(list);
+    if (ret == 0) {
+      ret = lpcnet_encoder_load_model(&enc->lpcnet_enc_state, data, len);
+    }
     return (ret == 0) ? OPUS_OK : OPUS_BAD_ARG;
 }
 
--