return 0;
}
-static int read_braindead_odml_indx(AVFormatContext *s, int frame_num)
+static int read_odml_index(AVFormatContext *s, int frame_num)
{
AVIContext *avi = s->priv_data;
AVIOContext *pb = s->pb;
- int longs_pre_entry = avio_rl16(pb);
+ int longs_per_entry = avio_rl16(pb);
int index_sub_type = avio_r8(pb);
int index_type = avio_r8(pb);
int entries_in_use = avio_rl32(pb);
int64_t filesize = avi->fsize;
av_log(s, AV_LOG_TRACE,
- "longs_pre_entry:%d index_type:%d entries_in_use:%d "
+ "longs_per_entry:%d index_type:%d entries_in_use:%d "
"chunk_id:%X base:%16"PRIX64" frame_num:%d\n",
- longs_pre_entry,
+ longs_per_entry,
index_type,
entries_in_use,
chunk_id,
avio_rl32(pb);
- if (index_type && longs_pre_entry != 2)
+ if (index_type && longs_per_entry != 2)
return AVERROR_INVALIDDATA;
if (index_type > 1)
return AVERROR_INVALIDDATA;
if (avio_seek(pb, offset + 8, SEEK_SET) < 0)
return -1;
avi->odml_depth++;
- read_braindead_odml_indx(s, frame_num);
+ read_odml_index(s, frame_num);
avi->odml_depth--;
frame_num += duration;
st->codecpar->extradata_size = esize - 10 * 4;
} else
st->codecpar->extradata_size = size - 10 * 4;
+ if (st->codecpar->extradata) {
+ av_log(s, AV_LOG_WARNING, "New extradata in strf chunk, freeing previous one.\n");
+ av_freep(&st->codecpar->extradata);
+ }
if (ff_get_extradata(s, st->codecpar, pb, st->codecpar->extradata_size) < 0)
return AVERROR(ENOMEM);
}
st = s->streams[stream_index];
if (size<(1<<30)) {
+ if (st->codecpar->extradata) {
+ av_log(s, AV_LOG_WARNING, "New extradata in strd chunk, freeing previous one.\n");
+ av_freep(&st->codecpar->extradata);
+ }
if (ff_get_extradata(s, st->codecpar, pb, size) < 0)
return AVERROR(ENOMEM);
}
pos = avio_tell(pb);
if (pb->seekable && !(s->flags & AVFMT_FLAG_IGNIDX) &&
avi->use_odml &&
- read_braindead_odml_indx(s, 0) < 0 &&
+ read_odml_index(s, 0) < 0 &&
(s->error_recognition & AV_EF_EXPLODE))
goto fail;
avio_seek(pb, pos + size, SEEK_SET);
if ((d[0] == 'i' && d[1] == 'x' && n < s->nb_streams) ||
// parse JUNK
(d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K') ||
- (d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1')) {
+ (d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1') ||
+ (d[0] == 'i' && d[1] == 'n' && d[2] == 'd' && d[3] == 'x')) {
avio_skip(pb, size);
goto start_sync;
}