diff options
author | Jindrich Makovicka <makovick@gmail.com> | 2013-01-17 16:24:28 +0100 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2013-01-21 16:02:40 +0100 |
commit | 570a4a0189946c2c983da41d37fdd67fa13266e7 (patch) | |
tree | 510d0db4aef147a6d89406415cbc9ddad5edc279 | |
parent | 9f00b1cbababa08dd220dbc0c74286a4707be746 (diff) | |
download | ffmpeg-570a4a0189946c2c983da41d37fdd67fa13266e7.tar.gz |
avidec: use sensible error codes instead of -1
Use AVERROR_INVALIDDATA on invalid inputs, and AVERROR_EOF when no more
frames are available in an interleaved AVI.
Signed-off-by: Jindrich Makovicka <makovick@gmail.com>
Signed-off-by: Diego Biurrun <diego@biurrun.de>
-rw-r--r-- | libavformat/avidec.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c index a3af5cf2de..2277ef00bf 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -121,7 +121,7 @@ static int get_riff(AVFormatContext *s, AVIOContext *pb) 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"); @@ -149,26 +149,26 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ 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++){ @@ -181,7 +181,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ 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; @@ -198,13 +198,13 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ 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); @@ -254,10 +254,10 @@ static int avi_read_tag(AVFormatContext *s, AVStream *st, uint32_t tag, uint32_t 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; @@ -342,8 +342,9 @@ static int avi_read_header(AVFormatContext *s) 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) @@ -701,7 +702,9 @@ static int avi_read_header(AVFormatContext *s) 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: @@ -724,7 +727,7 @@ static int avi_read_header(AVFormatContext *s) /* check stream number */ if (stream_index != s->nb_streams - 1) { fail: - return -1; + return AVERROR_INVALIDDATA; } if(!avi->index_loaded && pb->seekable) @@ -1016,7 +1019,7 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt) } } 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); @@ -1148,7 +1151,7 @@ static int avi_read_idx1(AVFormatContext *s, int size) 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); @@ -1183,7 +1186,7 @@ static int avi_read_idx1(AVFormatContext *s, int size) 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; @@ -1293,7 +1296,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp 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; |