if(!memcmp(header, avi_headers[i], 8))
break;
if(!avi_headers[i][0])
- return -1;
+ return AVERROR_INVALIDDATA;
if(header[7] == 0x19)
av_log(s, AV_LOG_INFO, "This file has been generated by a totally broken muxer.\n");
longs_pre_entry,index_type, entries_in_use, chunk_id, base);
if(stream_id >= s->nb_streams || stream_id < 0)
- return -1;
+ return AVERROR_INVALIDDATA;
st= s->streams[stream_id];
ast = st->priv_data;
if(index_sub_type)
- return -1;
+ return AVERROR_INVALIDDATA;
avio_rl32(pb);
if(index_type && longs_pre_entry != 2)
- return -1;
+ return AVERROR_INVALIDDATA;
if(index_type>1)
- return -1;
+ return AVERROR_INVALIDDATA;
if(filesize > 0 && base >= filesize){
av_log(s, AV_LOG_ERROR, "ODML index invalid\n");
if(base>>32 == (base & 0xFFFFFFFF) && (base & 0xFFFFFFFF) < filesize && filesize <= 0xFFFFFFFF)
base &= 0xFFFFFFFF;
else
- return -1;
+ return AVERROR_INVALIDDATA;
}
for(i=0; i<entries_in_use; i++){
av_dlog(s, "pos:%"PRId64", len:%X\n", pos, len);
if(pb->eof_reached)
- return -1;
+ return AVERROR_INVALIDDATA;
if(last_pos == pos || pos == base - 8)
avi->non_interleaved= 1;
duration = avio_rl32(pb);
if(pb->eof_reached)
- return -1;
+ return AVERROR_INVALIDDATA;
pos = avio_tell(pb);
if(avi->odml_depth > MAX_ODML_DEPTH){
av_log(s, AV_LOG_ERROR, "Too deeply nested ODML indexes\n");
- return -1;
+ return AVERROR_INVALIDDATA;
}
avio_seek(pb, offset+8, SEEK_SET);
size += (size & 1);
if (size == UINT_MAX)
- return -1;
+ return AVERROR(EINVAL);
value = av_malloc(size+1);
if (!value)
- return -1;
+ return AVERROR(ENOMEM);
avio_read(pb, value, size);
value[size]=0;
avi->stream_index= -1;
- if (get_riff(s, pb) < 0)
- return -1;
+ ret = get_riff(s, pb);
+ if (ret < 0)
+ return ret;
avi->fsize = avio_size(pb);
if(avi->fsize<=0)
avio_rl32(pb); /* quality */
ast->sample_size = avio_rl32(pb); /* sample ssize */
ast->cum_len *= FFMAX(1, ast->sample_size);
-// av_log(s, AV_LOG_DEBUG, "%d %d %d %d\n", ast->rate, ast->scale, ast->start, ast->sample_size);
+ av_dlog(s, "%"PRIu32" %"PRIu32" %d\n",
+ ast->rate, ast->scale, ast->sample_size);
switch(tag1) {
case MKTAG('v', 'i', 'd', 's'):
if(active_aspect.num && active_aspect.den && active.num && active.den){
st->sample_aspect_ratio= av_div_q(active_aspect, active);
-//av_log(s, AV_LOG_ERROR, "vprp %d/%d %d/%d\n", active_aspect.num, active_aspect.den, active.num, active.den);
+ av_dlog(s, "vprp %d/%d %d/%d\n",
+ active_aspect.num, active_aspect.den,
+ active.num, active.den);
}
size -= 9*4;
}
break;
case MKTAG('s', 't', 'r', 'n'):
if(s->nb_streams){
- avi_read_tag(s, s->streams[s->nb_streams-1], tag, size);
+ ret = avi_read_tag(s, s->streams[s->nb_streams-1], tag, size);
+ if (ret < 0)
+ return ret;
break;
}
default:
/* check stream number */
if (stream_index != s->nb_streams - 1) {
fail:
- return -1;
+ return AVERROR_INVALIDDATA;
}
if(!avi->index_loaded && pb->seekable)
size= d[4] + (d[5]<<8) + (d[6]<<16) + (d[7]<<24);
n= get_stream_idx(d+2);
-//av_log(s, AV_LOG_DEBUG, "%X %X %X %X %X %X %X %X %"PRId64" %d %d\n", d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], i, size, n);
+ av_dlog(s, "%X %X %X %X %X %X %X %X %"PRId64" %u %d\n",
+ d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], i, size, n);
if(i + (uint64_t)size > avi->fsize || d[0] > 127)
continue;
ts = av_rescale_q(ts, st->time_base, (AVRational){FFMAX(1, ast->sample_size), AV_TIME_BASE});
-// av_log(s, AV_LOG_DEBUG, "%"PRId64" %d/%d %"PRId64"\n", ts, st->time_base.num, st->time_base.den, ast->frame_offset);
+ av_dlog(s, "%"PRId64" %d/%d %"PRId64"\n", ts,
+ st->time_base.num, st->time_base.den, ast->frame_offset);
if(ts < best_ts){
best_ts= ts;
best_st= st;
}
}
if(!best_st)
- return -1;
+ return AVERROR_EOF;
best_ast = best_st->priv_data;
best_ts = av_rescale_q(best_ts, (AVRational){FFMAX(1, best_ast->sample_size), AV_TIME_BASE}, best_st->time_base);
// pkt->dts += ast->start;
if(ast->sample_size)
pkt->dts /= ast->sample_size;
-//av_log(s, AV_LOG_DEBUG, "dts:%"PRId64" offset:%"PRId64" %d/%d smpl_siz:%d base:%d st:%d size:%d\n", pkt->dts, ast->frame_offset, ast->scale, ast->rate, ast->sample_size, AV_TIME_BASE, avi->stream_index, size);
+ av_dlog(s, "dts:%"PRId64" offset:%"PRId64" %d/%d smpl_siz:%d base:%d st:%d size:%d\n",
+ pkt->dts, ast->frame_offset, ast->scale, ast->rate,
+ ast->sample_size, AV_TIME_BASE, avi->stream_index, size);
pkt->stream_index = avi->stream_index;
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
nb_index_entries = size / 16;
if (nb_index_entries <= 0)
- return -1;
+ return AVERROR_INVALIDDATA;
idx1_pos = avio_tell(pb);
avio_seek(pb, avi->movi_list+4, SEEK_SET);
av_dlog(s, "%d cum_len=%"PRId64"\n", len, ast->cum_len);
if(pb->eof_reached)
- return -1;
+ return AVERROR_INVALIDDATA;
if(last_pos == pos)
avi->non_interleaved= 1;
ast= st->priv_data;
index= av_index_search_timestamp(st, timestamp * FFMAX(ast->sample_size, 1), flags);
if(index<0)
- return -1;
+ return AVERROR_INVALIDDATA;
/* find the position */
pos = st->index_entries[index].pos;
timestamp = st->index_entries[index].timestamp / FFMAX(ast->sample_size, 1);
-// av_log(s, AV_LOG_DEBUG, "XX %"PRId64" %d %"PRId64"\n", timestamp, index, st->index_entries[index].timestamp);
+ av_dlog(s, "XX %"PRId64" %d %"PRId64"\n",
+ timestamp, index, st->index_entries[index].timestamp);
if (CONFIG_DV_DEMUXER && avi->dv_demux) {
/* One and only one real stream for DV in AVI, and it has video */
index++;
}
-// av_log(s, AV_LOG_DEBUG, "%"PRId64" %d %"PRId64"\n", timestamp, index, st2->index_entries[index].timestamp);
+ av_dlog(s, "%"PRId64" %d %"PRId64"\n",
+ timestamp, index, st2->index_entries[index].timestamp);
/* extract the current frame number */
ast2->frame_offset = st2->index_entries[index].timestamp;
}