[FFmpeg-devel] [PATCH 2/2] libavformat/dsfdec: Error dsf_read_header fixed.

Ihar Tumashyk itumashyk at gmail.com
Sat Aug 1 09:45:46 CEST 2015


01.08.2015 у 05:42 Ganesh Ajjanagadde напісаў:
> On Fri, Jul 31, 2015 at 9:29 PM, Peter Ross <pross at 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
>>> <michael at 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 <itumashyk at 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 <itumashyk at 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 at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>



More information about the ffmpeg-devel mailing list