int exss_markers = 0, exss_nextpos = 0;
int sum, max, pos, ret, i;
int64_t diff = 0;
+ int diffcount = 1;
uint8_t hdr[DCA_CORE_FRAME_HEADER_SIZE + AV_INPUT_BUFFER_PADDING_SIZE] = { 0 };
for (pos = FFMIN(4096, p->buf_size); pos < p->buf_size - 2; pos += 2) {
bufp = buf = p->buf + pos;
state = (state << 16) | bytestream_get_be16(&bufp);
- if (pos >= 4)
- diff += FFABS(((int16_t)AV_RL16(buf)) - (int16_t)AV_RL16(buf-4));
+ if (pos >= 4) {
+ if (AV_RL16(buf) || AV_RL16(buf-4)) {
+ diff += FFABS(((int16_t)AV_RL16(buf)) - (int16_t)AV_RL16(buf-4));
+ diffcount ++;
+ }
+ }
/* extension substream (EXSS) */
if (state == DCA_SYNCWORD_SUBSTREAM) {
if (markers[max] > 3 && p->buf_size / markers[max] < 32*1024 &&
markers[max] * 4 > sum * 3 &&
- diff / p->buf_size > 200)
+ diff / diffcount > 600)
return AVPROBE_SCORE_EXTENSION + 1;
return 0;
}
-AVInputFormat ff_dts_demuxer = {
+FF_RAW_DEMUXER_CLASS(dts)
+const AVInputFormat ff_dts_demuxer = {
.name = "dts",
.long_name = NULL_IF_CONFIG_SMALL("raw DTS"),
.read_probe = dts_probe,
.flags = AVFMT_GENERIC_INDEX,
.extensions = "dts",
.raw_codec_id = AV_CODEC_ID_DTS,
-};
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &dts_demuxer_class,};