01.08.2015 у 05:42 Ganesh Ajjanagadde напісаў:
On Fri, Jul 31, 2015 at 9:29 PM, Peter Ross <pr...@xvid.org> wrote:
On Fri, Jul 31, 2015 at 08:56:49PM -0400, Ganesh Ajjanagadde wrote:
On Fri, Jul 31, 2015 at 8:08 PM, Michael Niedermayer
<mich...@niedermayer.cc> wrote:
On Fri, Jul 31, 2015 at 07:33:01PM -0400, Ganesh Ajjanagadde wrote:
On Fri, Jul 31, 2015 at 7:01 PM, Ihar A. Tumashyk <itumas...@gmail.com> wrote:
Sample rate is written "as is" in header . Is *should not* be devined by
8. Refer spec.:
http://dsd-guide.com/sites/default/files/white-
papers/DSFFileFormatSpec_E.pdf

After this patch ffprobe will corretly show sample rate for DSF files.

Signed-off-by: Ihar A. Tumashyk <itumas...@gmail.com>
---
  libavformat/dsfdec.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavformat/dsfdec.c b/libavformat/dsfdec.c
index ae198b2..3e162ae 100644
--- a/libavformat/dsfdec.c
+++ b/libavformat/dsfdec.c
@@ -105,7 +105,7 @@ static int dsf_read_header(AVFormatContext *s)

      st->codec->codec_type   = AVMEDIA_TYPE_AUDIO;
      st->codec->channels     = avio_rl32(pb);
-    st->codec->sample_rate  = avio_rl32(pb) / 8;
+    st->codec->sample_rate  = avio_rl32(pb);

      switch(avio_rl32(pb)) {
      case 1: st->codec->codec_id = AV_CODEC_ID_DSD_LSBF_PLANAR; break;

LGTM, thanks for clarifying intent of previous patch.
I am a little puzzled as to why this was never caught till now,

Changing the sample rate like in the patch breaks playback (it plays
much too quick)
you can find samples to test at:
http://www.2l.no/hires/

I really need to stop trusting these spec files that much,
they are often incomplete as in this case. Ironically,
wikipedia here gives a much better description of the format:
https://en.wikipedia.org/wiki/Direct_Stream_Digital,
where they mention that essentially this signal is oversampled by a factor of 8.
As the wiki entry indicates, max frequency of PCM is 352.8 kHz.

In fact, I think previous patch should be reverted:
the wikipedia article says that newer format is called "DSD-wide" and
uses 8-bit word length.
ffprobe yields the downsampled frequency of 352.8 kHz which is what
actually gets used when one demuxes/
operates on the data per wikipedia.
Thus, I believe previous behavior was correct.

converting between DSD->PCM reduces the sample rate by 8.
at present, the DSD->PCM conversion happens libavcodec/dsddec.c.
however, a 'codec' cannot change sample_rate, so the divide by 8 is performed 
earlier in libavformat.

yes, this is a hack.

i have a patch set that moves DSD->PCM conversion into swresample, where it 
belongs,
along with adding a DST decoder and support for additional file formats.
If anyone is interested, I can repost.

Was there a reason why previous patch set was ignored or not applied?
(Relevant mailing list link would help to get a sense for it).
At the minimum though, this hack should have relevant comments for it
in the source code.
This would have removed some of the confusion.


Peter, thank you for your reply. Now I understand why you have to divided it by 8. However, upon your message problem still remains.


-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to