2017-12-01 17:26 GMT+01:00 Paul B Mahol <one...@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. > + 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)? > + } 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"? > + avio_skip(s->pb, 1); Should be something like "avio_skip(pb, size & 1);" according to the description I found. > + } else if (chunk == MKBETAG('S', 'D', 'A', 'B')) { > + channels = 2; If I read correctly, you can set STEREO here. > + 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. Thank you, Carl Eugen _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel