On 2014-04-24 09:29:28 +0200, Niels Möller wrote:
> [email protected] (Niels Möller) writes:
> 
> > Maybe there's also an X96 extension in the stream, I'll have to check.
> > Otherwise, the core data has to be up-sampled in some unspecified way
> > before the residual can be added to it.
> 
> As far as I can tell, there's no X96 data. So upsampling is required. To
> get it truly lossless, this obviously have to be done exactly as it was
> done on the encoder side, which is unspecified.
> 
> But if I postpone bitexact output for later, what type of up-sampling
> filter is reasonable? I checked wikipedia, which suggests using a
> "half-band" filter, but I have no idea what filter order is needed to
> get reasonable quality.

There's libavresample for general sample rate conversion, see Anton's
opus decoder patch how to use it in a decoder. That should work as first 
pass before figuring out more specifics of the upsampling filter for
bit-exactness.

> Also, in general, it's not really possible to do correct up-sampling
> independently for each frame, one would need a little history from the
> previous frame in order to apply the filter. But in this case doing it
> without inter-frame history could work, if the encoder did it the same
> way, so that the errors are taken into acocunt in the residual signal.
> 
> The residual must also compensate for the time delay that is inevitable
> when using a causal low-pass filter, which probably means that it's no
> point in using a high-order filter with very sharp cutoff. It could even
> work to do trivial upsampling by simply repeating each input sample
> twice (i.e., convert 1, 2, 3 to 1, 1, 2, 2, 3, 3, rather than proper
> upsampling which produces a low-pass filtered version of 1, 0, 2, 0, 3,
> 0).
> 
> Is there any reasonable up-sampling filter elsewhere in libav which I
> could use?

libavresample

> In the spec, there's also an nFsInterpolate value, described as
> 
>   nFsInterpolate (sampling frequency modifier)
>   
>   This specifies the sampling rate interpolation factor of the original
>   signal. The sampling rate adjustment when mixing channel sets with
>   different sampling rates, it specifies the interpolation factor applied
>   to the original sampling frequency. This 2-bit code (see Table 8-6)
>   encodes the Mvalue or Interpolation factor applied to the original
>   sampling frequency.
> 
> In the test stream, this is zero, corresponding to Mvalue=1. It's not
> clear to me whether or not this is related to the adding of the xll
> residual channel to the core channels.

that sounds strange, one guess would be a filter using linear interpolation 
and this values gives additional weight to the original sample.

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to