James,
I took a look at the code and it seems fine to me.
Considering that when the input and output bit depths are the same reclock does not perform the conversion to 32 bit FP, the only scenario that could have precision loss is when the input is 24 bit PCM, the output is 32 bit PCM, and the resampling is bypassed. This is not the most common situation, but is my situation.
The 32 bit FP has 24 bit of precision, but due to the conversion to the values [-1.0, 1.0] I'm not sure it would be lossless. I would have to run some tests to verify it, but, instead, I've decided to write some code to perform the padding/trimming when converting between different bit depths and the resampling is disabled. This should be faster then performing the conversion to float.
In case you want to add this to Reclock, I attach the file with the code. Note that I'm not sure it's bug free, because I don't have the rest of the code for compiling and running it. If you prefer that I verify that the conversion to float is not lossless before considering adding this code, let me know, and I will run the tests.
View attachment conversion_y3.zip
I also might try adding dithering for the cases where the output bitdepth is <= 24 bit PCM. This would be helpfull for the cases where occur the conversion from a higher input bitdepth to a lower output bit depth, when bypassing the resampler, and for all the cases, when reclock is resampling.
What do you think? Are you willing to add dithering as an option to Reclock?