const char *filename, void *logctx,
unsigned int offset, unsigned int max_probe_size)
{
- AVProbeData pd = { filename ? filename : "", NULL, -offset };
- unsigned char *buf = NULL;
+ AVProbeData pd = { filename ? filename : "" };
+ uint8_t *buf = NULL;
uint8_t *mime_type;
int ret = 0, probe_size, buf_offset = 0;
int score = 0;
for(probe_size= PROBE_BUF_MIN; probe_size<=max_probe_size && !*fmt;
probe_size = FFMIN(probe_size<<1, FFMAX(max_probe_size, probe_size+1))) {
-
- if (probe_size < offset) {
- continue;
- }
score = probe_size < max_probe_size ? AVPROBE_SCORE_RETRY : 0;
/* read probe data */
score = 0;
ret = 0; /* error was end of file, nothing read */
}
- pd.buf_size = buf_offset += ret;
+ buf_offset += ret;
+ if (buf_offset < offset)
+ continue;
+ pd.buf_size = buf_offset - offset;
pd.buf = &buf[offset];
memset(pd.buf + pd.buf_size, 0, AVPROBE_PADDING_SIZE);
}
/* rewind. reuse probe buffer to avoid seeking */
- ret = ffio_rewind_with_probe_data(pb, &buf, pd.buf_size);
+ ret = ffio_rewind_with_probe_data(pb, &buf, buf_offset);
return ret < 0 ? ret : score;
}
continue;
if (st->disposition & (AV_DISPOSITION_HEARING_IMPAIRED|AV_DISPOSITION_VISUAL_IMPAIRED))
continue;
+ if (type == AVMEDIA_TYPE_AUDIO && !avctx->channels)
+ continue;
if (decoder_ret) {
decoder = find_decoder(ic, st, st->codec->codec_id);
if (!decoder) {