dsdreamer wrote: 
> Triode,
> 
> On reflection, I think your dsd.c code does what it should, except for
> the belief that the actual number of sample_bytes per track for each
> channel must be even. When the source of the DSD is a DSF file rather
> than a DoP-encoded PCM file, there is no such constraint (the record
> companies had no concept of DoP encoding or its constraints when they
> authored the tracks). Thus the error trap as you have it is currently a
> bit trigger happy, and will give errors and warnings whenever there
> happens to be an odd number of sample_bytes, which should occur with 50%
> probability.
> 
> If I am right in my analysis, you might want to silently accept the case
> of one sample byte left over, but still trap the zero case.
> 
> Just to illustrate my meaning:
> > 
Code:
--------------------
  >   > diff --git a/dsd.c b/dsd.c
  > index 691d9cc..d1c9102 100644
  > --- a/dsd.c
  > +++ b/dsd.c
  > @@ -249,9 +249,18 @@ static decode_state _decode_dsf(void) {
  > 
  > frames = min(bytes, d->sample_bytes) / bytes_per_frame;
  > if (frames == 0) {
  > -                       // /2 for dop should never result in 0 as header 
len is always even
  > -                       LOG_WARN("frames got to zero");
  > -                       return DECODE_ERROR;
  > +                       if (d->sample_bytes == 1) {
  > +                               LOG_INFO("had one Byte left over, 
insufficient to DOP encode");
  > +                               LOG_INFO("sample bytes: " FMT_u64, 
d->sample_bytes);
  > +                               return DECODE_COMPLETE;
  > +                       }
  > +                       else {
  > +                               // we really did get to zero, shouldn't 
happen
  > +                               LOG_WARN("frames got to zero");
  > +                               LOG_WARN("sample bytes: " FMT_u64, 
d->sample_bytes);
  > +                               LOG_WARN("bytes: %u", bytes);
  > +                               return DECODE_ERROR;
  > +                       }
  > }
  > 
  > frames = min(frames, out);
--------------------
> > 

Yep - it was not handling the case of odd sized dsf files when playing
with dop - please try latest git version which I hope fixes this.


------------------------------------------------------------------------
Triode's Profile: http://forums.slimdevices.com/member.php?userid=17
View this thread: http://forums.slimdevices.com/showthread.php?t=99395

_______________________________________________
unix mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/unix

Reply via email to