[FFmpeg-devel] [PATCH] avformat: add NSP demuxer

Paul B Mahol onemda at gmail.com
Mon Dec 4 18:17:23 EET 2017


On 12/3/17, Carl Eugen Hoyos <ceffmpeg at gmail.com> wrote:
> 2017-12-01 17:26 GMT+01:00 Paul B Mahol <onemda at gmail.com>:
>
>> +static int nsp_read_header(AVFormatContext *s)
>> +{
>> +    int rate = 0, channels = 0;
>> +    uint32_t chunk, size;
>> +    AVStream *st;
>> +    int64_t pos;
>> +
>> +    avio_skip(s->pb, 12);
>
> I believe you could set the duration here for the
> supported interleaved stereo files.

I prefer not.

>
>> +    st = avformat_new_stream(s, NULL);
>> +    if (!st)
>> +        return AVERROR(ENOMEM);
>> +
>> +    while (!avio_feof(s->pb)) {
>> +        chunk = avio_rb32(s->pb);
>> +        size  = avio_rl32(s->pb);
>> +        pos   = avio_tell(s->pb);
>> +
>> +        if (chunk == MKBETAG('H', 'D', 'R', '8') ||
>> +            chunk == MKBETAG('H', 'E', 'D', 'R')) {
>> +            if (size < 32)
>> +                return AVERROR_INVALIDDATA;
>> +            avio_skip(s->pb, 20);
>> +            rate = avio_rl32(s->pb);
>
>> +            avio_skip(s->pb, size - (avio_tell(s->pb) - pos));
>
> Why is this not "skip(pb, size - 32)" (or whatever the correct
> constant is)?

To be furure proof.

>
>> +        } else if (chunk == MKBETAG('N', 'O', 'T', 'E')) {
>> +            char value[1024];
>> +
>> +            avio_get_str(s->pb, size, value, sizeof(value));
>> +            av_dict_set(&s->metadata, "Note", value, 0);
>
> Shouldn't this be "comment"?

No.

>
>> +            avio_skip(s->pb, 1);
>
> Should be something like "avio_skip(pb, size & 1);" according
> to the description I found.

Changed.

>
>> +        } else if (chunk == MKBETAG('S', 'D', 'A', 'B')) {
>> +            channels = 2;
>
> If I read correctly, you can set STEREO here.

I prefer not.

>
>> +            break;
>
>> +        } else if (chunk == MKBETAG('S', 'D', 'A', '_') ||
>> +                   chunk == MKBETAG('S', 'D', '_', 'A') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '2') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '3') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '4') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '5') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '6') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '7') ||
>> +                   chunk == MKBETAG('S', 'D', '_', '8')) {
>
> Iiuc, in these cases the file is not read correctly.
> If this cannot be implemented easily, a warning should
> be shown.

I doubt so.


More information about the ffmpeg-devel mailing list