@@ -286,8 +286,7 @@ bool ESP32_VS1053_Stream::connecttohost(const char *url, const char *username,
286
286
stopSong ();
287
287
return false ;
288
288
}
289
- const auto BYTES_TO_READ =
290
- min (stream->available (), VS1053_MAX_PLAYLIST_READ);
289
+ const auto BYTES_TO_READ = min (stream->available (), VS1053_MAX_PLAYLIST_READ);
291
290
if (!BYTES_TO_READ)
292
291
{
293
292
log_e (" playlist contains no data" );
@@ -396,10 +395,10 @@ void ESP32_VS1053_Stream::_playFromRingBuffer()
396
395
_ringbuffer_filled = true ;
397
396
}
398
397
399
- const unsigned long start = millis ();
400
- const auto MAX_TIME_MS = 15 ;
398
+ const auto START_TIME_MS = millis ();
399
+ const auto MAX_TIME_MS = 10 ;
401
400
size_t bytesToDecoder = 0 ;
402
- while (_remainingBytes && _vs1053->data_request () && millis () - start < MAX_TIME_MS)
401
+ while (_remainingBytes && _vs1053->data_request () && millis () - START_TIME_MS < MAX_TIME_MS)
403
402
{
404
403
size_t size = 0 ;
405
404
uint8_t *data = (uint8_t *)xRingbufferReceiveUpTo (_ringbuffer_handle, &size, pdMS_TO_TICKS (0 ), VS1053_PLAYBUFFER_SIZE);
@@ -428,35 +427,32 @@ void ESP32_VS1053_Stream::_playFromRingBuffer()
428
427
bytesToDecoder += size;
429
428
_remainingBytes -= _remainingBytes > 0 ? size : 0 ;
430
429
}
431
- log_d (" spend %lu ms stuffing %i bytes in decoder" , millis () - start , bytesToDecoder);
430
+ log_d (" spend %lu ms stuffing %i bytes in decoder" , millis () - START_TIME_MS , bytesToDecoder);
432
431
}
433
432
434
433
void ESP32_VS1053_Stream::_streamToRingBuffer (WiFiClient *const stream)
435
434
{
435
+ const auto START_TIME_MS = millis ();
436
436
const auto MAX_TIME_MS = 10 ;
437
- const auto start = millis ();
438
437
size_t bytesToRingBuffer = 0 ;
439
- while (stream && stream->available () && _musicDataPosition < _metaDataStart && millis () - start < MAX_TIME_MS)
438
+ while (stream && stream->available () && _musicDataPosition < _metaDataStart && millis () - START_TIME_MS < MAX_TIME_MS)
440
439
{
441
440
const size_t BYTES_AVAILABLE = _metaDataStart ? _metaDataStart - _musicDataPosition : stream->available ();
442
441
const size_t BYTES_TO_READ = min (BYTES_AVAILABLE, sizeof (_localbuffer));
443
-
444
- if (xRingbufferGetCurFreeSize (_ringbuffer_handle) < BYTES_TO_READ || stream->available () < BYTES_TO_READ)
445
- break ;
446
-
447
- const int BYTES_IN_BUFFER = stream->readBytes (_localbuffer, BYTES_TO_READ);
442
+ const size_t BYTES_SAFE_TO_MOVE = min (BYTES_TO_READ, xRingbufferGetCurFreeSize (_ringbuffer_handle));
443
+ const size_t BYTES_IN_BUFFER = stream->readBytes (_localbuffer, min ((size_t )stream->available (), BYTES_SAFE_TO_MOVE));
448
444
const BaseType_t result = xRingbufferSend (_ringbuffer_handle, _localbuffer, BYTES_IN_BUFFER, pdMS_TO_TICKS (0 ));
449
445
if (result == pdFALSE)
450
446
{
451
- log_e (" ringbuffer failed to receive %i bytes. Closing stream." );
447
+ log_e (" ringbuffer failed to receive %i bytes. Closing stream." , BYTES_IN_BUFFER );
452
448
_remainingBytes = 0 ;
453
449
return ;
454
450
}
455
451
456
452
bytesToRingBuffer += BYTES_IN_BUFFER;
457
453
_musicDataPosition += _metaDataStart ? BYTES_IN_BUFFER : 0 ;
458
454
}
459
- log_d (" spend %lu ms stuffing %i bytes in ringbuffer" , millis () - start , bytesToRingBuffer);
455
+ log_d (" spend %lu ms stuffing %i bytes in ringbuffer" , millis () - START_TIME_MS , bytesToRingBuffer);
460
456
}
461
457
462
458
void ESP32_VS1053_Stream::_handleStream (WiFiClient *const stream)
@@ -477,25 +473,21 @@ void ESP32_VS1053_Stream::_handleStream(WiFiClient *const stream)
477
473
}
478
474
else
479
475
{
480
- const auto MAX_TIME_MS = 15 ;
481
- const auto start = millis () ;
476
+ const auto START_TIME_MS = millis () ;
477
+ const auto MAX_TIME_MS = 10 ;
482
478
size_t bytesToDecoder = 0 ;
483
479
while (stream && stream->available () && _vs1053->data_request () && _remainingBytes &&
484
- _musicDataPosition < _metaDataStart && millis () - start < MAX_TIME_MS)
480
+ _musicDataPosition < _metaDataStart && millis () - START_TIME_MS < MAX_TIME_MS)
485
481
{
486
482
const size_t BYTES_AVAILABLE = _metaDataStart ? _metaDataStart - _musicDataPosition : stream->available ();
487
483
const size_t BYTES_TO_READ = min (BYTES_AVAILABLE, VS1053_PLAYBUFFER_SIZE);
488
-
489
- if (stream->available () < BYTES_TO_READ)
490
- break ;
491
-
492
- const int BYTES_IN_BUFFER = stream->readBytes (_vs1053Buffer, BYTES_TO_READ);
484
+ const size_t BYTES_IN_BUFFER = stream->readBytes (_vs1053Buffer, min ((size_t )stream->available (), BYTES_TO_READ));
493
485
_vs1053->playChunk (_vs1053Buffer, BYTES_IN_BUFFER);
494
486
_remainingBytes -= _remainingBytes > 0 ? BYTES_IN_BUFFER : 0 ;
495
487
_musicDataPosition += _metaDataStart ? BYTES_IN_BUFFER : 0 ;
496
488
bytesToDecoder += BYTES_IN_BUFFER;
497
489
}
498
- log_d (" spend %lu ms stuffing %i bytes in decoder" , millis () - start , bytesToDecoder);
490
+ log_d (" spend %lu ms stuffing %i bytes in decoder" , millis () - START_TIME_MS , bytesToDecoder);
499
491
}
500
492
501
493
if (stream && stream->available () && _metaDataStart && _musicDataPosition == _metaDataStart)
@@ -518,18 +510,15 @@ void ESP32_VS1053_Stream::_handleStream(WiFiClient *const stream)
518
510
519
511
void ESP32_VS1053_Stream::_chunkedStreamToRingBuffer (WiFiClient *const stream)
520
512
{
513
+ const auto START_TIME_MS = millis ();
521
514
const auto MAX_TIME_MS = 10 ;
522
515
size_t bytesToRingBuffer = 0 ;
523
- const auto start = millis ();
524
- while (stream && stream->available () && _bytesLeftInChunk && _musicDataPosition < _metaDataStart && millis () - start < MAX_TIME_MS)
516
+ while (stream && stream->available () && _bytesLeftInChunk && _musicDataPosition < _metaDataStart && millis () - START_TIME_MS < MAX_TIME_MS)
525
517
{
526
518
const size_t BYTES_AVAILABLE = min (_bytesLeftInChunk, (size_t )_metaDataStart - _musicDataPosition);
527
519
const size_t BYTES_TO_READ = min (BYTES_AVAILABLE, sizeof (_localbuffer));
528
-
529
- if (xRingbufferGetCurFreeSize (_ringbuffer_handle) < BYTES_TO_READ || stream->available () < BYTES_TO_READ)
530
- break ;
531
-
532
- const int BYTES_IN_BUFFER = stream->readBytes (_localbuffer, BYTES_TO_READ);
520
+ const size_t BYTES_SAFE_TO_MOVE = min (BYTES_TO_READ, xRingbufferGetCurFreeSize (_ringbuffer_handle));
521
+ const size_t BYTES_IN_BUFFER = stream->readBytes (_localbuffer, min ((size_t )stream->available (), BYTES_SAFE_TO_MOVE));
533
522
const BaseType_t result = xRingbufferSend (_ringbuffer_handle, _localbuffer, BYTES_IN_BUFFER, pdMS_TO_TICKS (0 ));
534
523
if (result == pdFALSE)
535
524
{
@@ -542,7 +531,7 @@ void ESP32_VS1053_Stream::_chunkedStreamToRingBuffer(WiFiClient *const stream)
542
531
bytesToRingBuffer += BYTES_IN_BUFFER;
543
532
_musicDataPosition += _metaDataStart ? BYTES_IN_BUFFER : 0 ;
544
533
}
545
- log_d (" spend %lu ms stuffing %i bytes in ringbuffer" , millis () - start , bytesToRingBuffer);
534
+ log_d (" spend %lu ms stuffing %i bytes in ringbuffer" , millis () - START_TIME_MS , bytesToRingBuffer);
546
535
}
547
536
548
537
void ESP32_VS1053_Stream::_handleChunkedStream (WiFiClient *const stream)
@@ -572,24 +561,20 @@ void ESP32_VS1053_Stream::_handleChunkedStream(WiFiClient *const stream)
572
561
}
573
562
else
574
563
{
575
- const auto MAX_TIME_MS = 20 ;
576
- const auto start = millis () ;
564
+ const auto START_TIME_MS = millis () ;
565
+ const auto MAX_TIME_MS = 10 ;
577
566
size_t bytesToDecoder = 0 ;
578
- while (stream && stream->available () && _bytesLeftInChunk && _vs1053->data_request () && _musicDataPosition < _metaDataStart && millis () - start < MAX_TIME_MS)
567
+ while (stream && stream->available () && _bytesLeftInChunk && _vs1053->data_request () && _musicDataPosition < _metaDataStart && millis () - START_TIME_MS < MAX_TIME_MS)
579
568
{
580
569
const size_t BYTES_AVAILABLE = min (_bytesLeftInChunk, (size_t )_metaDataStart - _musicDataPosition);
581
570
const size_t BYTES_TO_READ = min (BYTES_AVAILABLE, VS1053_PLAYBUFFER_SIZE);
582
-
583
- if (stream->available () < BYTES_TO_READ)
584
- break ;
585
-
586
- const int BYTES_IN_BUFFER = stream->readBytes (_vs1053Buffer, BYTES_TO_READ);
571
+ const size_t BYTES_IN_BUFFER = stream->readBytes (_vs1053Buffer, min ((size_t )stream->available (), BYTES_TO_READ));
587
572
_vs1053->playChunk (_vs1053Buffer, BYTES_IN_BUFFER);
588
573
_bytesLeftInChunk -= BYTES_IN_BUFFER;
589
574
_musicDataPosition += _metaDataStart ? BYTES_IN_BUFFER : 0 ;
590
575
bytesToDecoder += BYTES_IN_BUFFER;
591
576
}
592
- log_d (" spend %lu ms stuffing %i bytes in decoder" , millis () - start , bytesToDecoder);
577
+ log_d (" spend %lu ms stuffing %i bytes in decoder" , millis () - START_TIME_MS , bytesToDecoder);
593
578
}
594
579
595
580
if (stream && stream->available () && _metaDataStart && _musicDataPosition == _metaDataStart && _bytesLeftInChunk)
0 commit comments