summaryrefslogtreecommitdiff
path: root/libavformat/nutdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-05-08 12:47:54 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-05-08 12:47:54 +0200
commit9818bbde5303f3618c6f428a3ab75ae916821a5d (patch)
tree66e7cc65a9ab114f579f9117235c3dc26481893d /libavformat/nutdec.c
parent1aed0513a1c2fdc3b94c9dd165d393bd5513b92a (diff)
parente0c53c3408181d2e7d544eb65fc7355a79438dfe (diff)
Merge commit 'e0c53c3408181d2e7d544eb65fc7355a79438dfe'
* commit 'e0c53c3408181d2e7d544eb65fc7355a79438dfe': nut: use meaningful error values FATE: use a less ambiguous end time for filter-trim-time test Conflicts: libavformat/nutdec.c tests/fate/filter-video.mak Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/nutdec.c')
-rw-r--r--libavformat/nutdec.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index 90f7ff86fa..30bdefd933 100644
--- a/libavformat/nutdec.c
+++ b/libavformat/nutdec.c
@@ -196,7 +196,7 @@ static int nut_probe(AVProbeData *p)
tmp = ffio_read_varlen(bc); \
if (!(check)) { \
av_log(s, AV_LOG_ERROR, "Error " #dst " is (%"PRId64")\n", tmp); \
- return -1; \
+ return AVERROR_INVALIDDATA; \
} \
dst = tmp; \
} while (0)
@@ -206,7 +206,7 @@ static int skip_reserved(AVIOContext *bc, int64_t pos)
pos -= avio_tell(bc);
if (pos < 0) {
avio_seek(bc, pos, SEEK_CUR);
- return -1;
+ return AVERROR_INVALIDDATA;
} else {
while (pos--)
avio_r8(bc);
@@ -226,7 +226,13 @@ static int decode_main_header(NUTContext *nut)
end = get_packetheader(nut, bc, 1, MAIN_STARTCODE);
end += avio_tell(bc);
- GET_V(tmp, tmp >= 2 && tmp <= NUT_VERSION);
+ tmp = ffio_read_varlen(bc);
+ if (tmp < 2 && tmp > NUT_VERSION) {
+ av_log(s, AV_LOG_ERROR, "Version %"PRId64" not supported.\n",
+ tmp);
+ return AVERROR(ENOSYS);
+ }
+
GET_V(stream_count, tmp > 0 && tmp <= NUT_MAX_STREAMS);
nut->max_distance = ffio_read_varlen(bc);
@@ -389,7 +395,7 @@ static int decode_stream_header(NUTContext *nut)
break;
default:
av_log(s, AV_LOG_ERROR, "unknown stream class (%d)\n", class);
- return -1;
+ return AVERROR(ENOSYS);
}
if (class < 3 && st->codec->codec_id == AV_CODEC_ID_NONE)
av_log(s, AV_LOG_ERROR,
@@ -418,7 +424,7 @@ static int decode_stream_header(NUTContext *nut)
if ((!st->sample_aspect_ratio.num) != (!st->sample_aspect_ratio.den)) {
av_log(s, AV_LOG_ERROR, "invalid aspect ratio %d/%d\n",
st->sample_aspect_ratio.num, st->sample_aspect_ratio.den);
- return -1;
+ return AVERROR_INVALIDDATA;
}
ffio_read_varlen(bc); /* csp type */
} else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
@@ -429,7 +435,7 @@ static int decode_stream_header(NUTContext *nut)
if (skip_reserved(bc, end) || ffio_get_checksum(bc)) {
av_log(s, AV_LOG_ERROR,
"stream header %d checksum mismatch\n", stream_id);
- return -1;
+ return AVERROR_INVALIDDATA;
}
stc->time_base = &nut->time_base[stc->time_base_id];
avpriv_set_pts_info(s->streams[stream_id], 63, stc->time_base->num,
@@ -537,7 +543,7 @@ static int decode_info_header(NUTContext *nut)
if (skip_reserved(bc, end) || ffio_get_checksum(bc)) {
av_log(s, AV_LOG_ERROR, "info header checksum mismatch\n");
- return -1;
+ return AVERROR_INVALIDDATA;
}
return 0;
}
@@ -603,7 +609,7 @@ static int find_and_decode_index(NUTContext *nut)
int64_t *syncpoints;
uint64_t max_pts;
int8_t *has_keyframe;
- int ret = -1;
+ int ret = AVERROR_INVALIDDATA;
if(filesize <= 0)
return -1;
@@ -615,7 +621,7 @@ static int find_and_decode_index(NUTContext *nut)
if(s->duration<=0)
s->duration = find_duration(nut, filesize);
- return -1;
+ return ret;
}
end = get_packetheader(nut, bc, 1, INDEX_STARTCODE);
@@ -897,7 +903,7 @@ static int nut_read_packet(AVFormatContext *s, AVPacket *pkt)
} else {
frame_code = avio_r8(bc);
if (url_feof(bc))
- return -1;
+ return AVERROR_EOF;
if (frame_code == 'N') {
tmp = frame_code;
for (i = 1; i < 8; i++)