@@ -263,9 +263,10 @@ StreamingState::processBatch(const vector<float>& buf, unsigned int n_steps)
263
263
}
264
264
265
265
int
266
- DS_CreateModel_ (const std::string & aModelString,
266
+ DS_CreateModel_ (const char * aModelString,
267
267
bool init_from_bytes,
268
- ModelState** retval)
268
+ ModelState** retval,
269
+ size_t bufferSize=0 )
269
270
{
270
271
*retval = nullptr ;
271
272
@@ -278,7 +279,7 @@ DS_CreateModel_(const std::string &aModelString,
278
279
LOGD (" DeepSpeech: %s" , ds_git_version ());
279
280
#endif
280
281
281
- if (aModelString. length ( ) < 1 ) {
282
+ if ( (!init_from_bytes && ( strlen (aModelString ) < 1 )) || (init_from_bytes && (bufferSize< 1 )) ) {
282
283
std::cerr << " No model specified, cannot continue." << std::endl;
283
284
return DS_ERR_NO_MODEL;
284
285
}
@@ -296,7 +297,7 @@ DS_CreateModel_(const std::string &aModelString,
296
297
return DS_ERR_FAIL_CREATE_MODEL;
297
298
}
298
299
299
- int err = model->init (aModelString, init_from_bytes);
300
+ int err = model->init (aModelString, init_from_bytes, bufferSize );
300
301
if (err != DS_ERR_OK) {
301
302
return err;
302
303
}
@@ -313,10 +314,11 @@ DS_CreateModel(const char* aModelPath,
313
314
}
314
315
315
316
int
316
- DS_CreateModelFromBuffer (const std::string &aModelBuffer,
317
+ DS_CreateModelFromBuffer (const char * aModelBuffer,
318
+ size_t bufferSize,
317
319
ModelState** retval)
318
320
{
319
- return DS_CreateModel_ (aModelBuffer, true , retval);
321
+ return DS_CreateModel_ (aModelBuffer, true , retval, bufferSize );
320
322
}
321
323
322
324
@@ -347,12 +349,18 @@ DS_FreeModel(ModelState* ctx)
347
349
348
350
int
349
351
DS_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 )
352
355
{
353
356
std::unique_ptr<Scorer> scorer (new Scorer ());
354
357
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
+
356
364
357
365
if (err != 0 ) {
358
366
return DS_ERR_INVALID_SCORER;
@@ -370,9 +378,10 @@ DS_EnableExternalScorer(ModelState* aCtx,
370
378
371
379
int
372
380
DS_EnableExternalScorerFromBuffer (ModelState* aCtx,
373
- const std::string &aScorerBuffer)
381
+ const char * aScorerBuffer,
382
+ size_t bufferSize)
374
383
{
375
- return DS_EnableExternalScorer_ (aCtx, aScorerBuffer, true );
384
+ return DS_EnableExternalScorer_ (aCtx, aScorerBuffer, true , bufferSize );
376
385
}
377
386
378
387
int
0 commit comments