output/alsa: fix endless loop at end of file in dsd_usb mode
This commit is contained in:
parent
af260b5a64
commit
2406152576
2
NEWS
2
NEWS
|
@ -3,6 +3,8 @@ ver 0.18.13 (not yet released)
|
||||||
- dsdiff, dsf: fix endless loop on malformed file
|
- dsdiff, dsf: fix endless loop on malformed file
|
||||||
- ffmpeg: support ffmpeg/libav version 11
|
- ffmpeg: support ffmpeg/libav version 11
|
||||||
- gme: fix song duration
|
- gme: fix song duration
|
||||||
|
* output
|
||||||
|
- alsa: fix endless loop at end of file in dsd_usb mode
|
||||||
* fix state file saver
|
* fix state file saver
|
||||||
* fix build failure on Darwin
|
* fix build failure on Darwin
|
||||||
|
|
||||||
|
|
|
@ -815,7 +815,16 @@ alsa_play(struct audio_output *ao, const void *chunk, size_t size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const size_t original_size = size;
|
||||||
chunk = ad->pcm_export->Export(chunk, size, size);
|
chunk = ad->pcm_export->Export(chunk, size, size);
|
||||||
|
if (size == 0)
|
||||||
|
/* the DoP (DSD over PCM) filter converts two frames
|
||||||
|
at a time and ignores the last odd frame; if there
|
||||||
|
was only one frame (e.g. the last frame in the
|
||||||
|
file), the result is empty; to avoid an endless
|
||||||
|
loop, bail out here, and pretend the one frame has
|
||||||
|
been played */
|
||||||
|
return original_size;
|
||||||
|
|
||||||
assert(size % ad->out_frame_size == 0);
|
assert(size % ad->out_frame_size == 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue