@@ -319,17 +319,21 @@ class DynamicMemoryStream : public AudioStreamX {
319
319
struct DataNode {
320
320
int len=0 ;
321
321
uint8_t * data=nullptr ;
322
+
322
323
DataNode () = default ;
323
324
// / Constructor
324
- DataNode (void *data , int len){
325
+ DataNode (void *inData , int len){
325
326
this ->len = len;
326
- this ->data = new uint8_t [ len] ;
327
+ this ->data = ( uint8_t *) malloc ( len) ;
327
328
assert (this ->data !=nullptr );
328
- memcpy (this ->data , data , len);
329
+ memcpy (this ->data , inData , len);
329
330
}
330
331
331
332
~DataNode (){
332
- if (data!=nullptr ) delete[] data;
333
+ if (data!=nullptr ) {
334
+ free (data);
335
+ data = nullptr ;
336
+ }
333
337
}
334
338
};
335
339
@@ -365,7 +369,15 @@ class DynamicMemoryStream : public AudioStreamX {
365
369
}
366
370
367
371
void clear () {
368
- audio_list.clear ();
372
+ DataNode *p_node;
373
+ bool ok;
374
+ do {
375
+ ok = audio_list.pop_front (p_node);
376
+ if (ok){
377
+ delete p_node;
378
+ }
379
+ } while (ok);
380
+
369
381
temp_audio.reset ();
370
382
total_available = 0 ;
371
383
alloc_failed = false ;
@@ -382,11 +394,11 @@ class DynamicMemoryStream : public AudioStreamX {
382
394
}
383
395
384
396
virtual size_t write (const uint8_t *buffer, size_t size) override {
385
- DataNode node ((void *)buffer, size);
386
- if (node. data !=nullptr ){
397
+ DataNode *p_node = new DataNode ((void *)buffer, size);
398
+ if (p_node-> data !=nullptr ){
387
399
alloc_failed = false ;
388
400
total_available += size;
389
- audio_list.push_back (node );
401
+ audio_list.push_back (p_node );
390
402
391
403
// setup interator to point to first record
392
404
if (it == audio_list.end ()){
@@ -404,7 +416,7 @@ class DynamicMemoryStream : public AudioStreamX {
404
416
}
405
417
406
418
virtual int available () override {
407
- return it == audio_list.end () ? 0 : (*it). len ;
419
+ return it == audio_list.end () ? 0 : (*it)-> len ;
408
420
}
409
421
410
422
virtual size_t readBytes (uint8_t *buffer, size_t length) override {
@@ -424,13 +436,13 @@ class DynamicMemoryStream : public AudioStreamX {
424
436
}
425
437
426
438
// provide data from next node
427
- DataNode node = *it;
428
- int result_len = min (length, (size_t ) node. len );
429
- memcpy (buffer, node. data , result_len);
439
+ DataNode *p_node = *it;
440
+ int result_len = min (length, (size_t ) p_node-> len );
441
+ memcpy (buffer, p_node-> data , result_len);
430
442
// save unprocessed data to temp buffer
431
- if (node. len >length){
432
- uint8_t *start = node. data +result_len;
433
- int uprocessed_len = node. len - length;
443
+ if (p_node-> len >length){
444
+ uint8_t *start = p_node-> data +result_len;
445
+ int uprocessed_len = p_node-> len - length;
434
446
temp_audio.writeArray (start, uprocessed_len);
435
447
}
436
448
// move to next pos
@@ -439,8 +451,8 @@ class DynamicMemoryStream : public AudioStreamX {
439
451
}
440
452
441
453
protected:
442
- List<DataNode> audio_list;
443
- List<DataNode>::Iterator it = audio_list.end();
454
+ List<DataNode* > audio_list;
455
+ List<DataNode* >::Iterator it = audio_list.end();
444
456
size_t total_available=0 ;
445
457
int default_buffer_size=DEFAULT_BUFFER_SIZE;
446
458
bool alloc_failed = false ;
0 commit comments