@@ -263,9 +263,10 @@ StreamingState::processBatch(const vector<float>& buf, unsigned int n_steps)
263263}
264264
265265int
266- DS_CreateModel_ (const std::string & aModelString,
266+ DS_CreateModel_ (const char * aModelString,
267267 bool init_from_bytes,
268- ModelState** retval)
268+ ModelState** retval,
269+ size_t bufferSize=0 )
269270{
270271 *retval = nullptr ;
271272
@@ -278,7 +279,7 @@ DS_CreateModel_(const std::string &aModelString,
278279 LOGD (" DeepSpeech: %s" , ds_git_version ());
279280#endif
280281
281- if (aModelString. length ( ) < 1 ) {
282+ if ( (!init_from_bytes && ( strlen (aModelString ) < 1 )) || (init_from_bytes && (bufferSize< 1 )) ) {
282283 std::cerr << " No model specified, cannot continue." << std::endl;
283284 return DS_ERR_NO_MODEL;
284285 }
@@ -296,7 +297,7 @@ DS_CreateModel_(const std::string &aModelString,
296297 return DS_ERR_FAIL_CREATE_MODEL;
297298 }
298299
299- int err = model->init (aModelString, init_from_bytes);
300+ int err = model->init (aModelString, init_from_bytes, bufferSize );
300301 if (err != DS_ERR_OK) {
301302 return err;
302303 }
@@ -313,10 +314,11 @@ DS_CreateModel(const char* aModelPath,
313314}
314315
315316int
316- DS_CreateModelFromBuffer (const std::string &aModelBuffer,
317+ DS_CreateModelFromBuffer (const char * aModelBuffer,
318+ size_t bufferSize,
317319 ModelState** retval)
318320{
319- return DS_CreateModel_ (aModelBuffer, true , retval);
321+ return DS_CreateModel_ (aModelBuffer, true , retval, bufferSize );
320322}
321323
322324
@@ -347,12 +349,18 @@ DS_FreeModel(ModelState* ctx)
347349
348350int
349351DS_EnableExternalScorer_ (ModelState* aCtx,
350- const std::string &aScorerString,
351- bool init_from_bytes)
352+ const char * aScorerString,
353+ bool init_from_bytes,
354+ size_t bufferSize=0 )
352355{
353356 std::unique_ptr<Scorer> scorer (new Scorer ());
354357
355- int err = scorer->init (aScorerString, init_from_bytes, aCtx->alphabet_ );
358+ int err;
359+ if (init_from_bytes)
360+ err = scorer->init (std::string (aScorerString, bufferSize), init_from_bytes, aCtx->alphabet_ );
361+ else
362+ err = scorer->init (aScorerString, init_from_bytes, aCtx->alphabet_ );
363+
356364
357365 if (err != 0 ) {
358366 return DS_ERR_INVALID_SCORER;
@@ -370,9 +378,10 @@ DS_EnableExternalScorer(ModelState* aCtx,
370378
371379int
372380DS_EnableExternalScorerFromBuffer (ModelState* aCtx,
373- const std::string &aScorerBuffer)
381+ const char * aScorerBuffer,
382+ size_t bufferSize)
374383{
375- return DS_EnableExternalScorer_ (aCtx, aScorerBuffer, true );
384+ return DS_EnableExternalScorer_ (aCtx, aScorerBuffer, true , bufferSize );
376385}
377386
378387int
0 commit comments