Commit 45e7c67a authored by Andreas Rheinhardt's avatar Andreas Rheinhardt Committed by Michael Niedermayer

avformat: Improve returned error codes

This commit improves returned error codes by forwarding error codes. In
some instances, the hardcoded returned error codes made no sense at all:
The normal error code for failure of av_new_packet() is AVERROR(ENOMEM),
yet there were instances where AVERROR(EIO) was returned.
Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent bb20f3dd
...@@ -322,8 +322,10 @@ static int fourxm_read_packet(AVFormatContext *s, ...@@ -322,8 +322,10 @@ static int fourxm_read_packet(AVFormatContext *s,
case cfr2_TAG: case cfr2_TAG:
/* allocate 8 more bytes than 'size' to account for fourcc /* allocate 8 more bytes than 'size' to account for fourcc
* and size */ * and size */
if (size + 8 < size || av_new_packet(pkt, size + 8)) if (size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - 8)
return AVERROR(EIO); return AVERROR_INVALIDDATA;
if ((ret = av_new_packet(pkt, size + 8)) < 0)
return ret;
pkt->stream_index = fourxm->video_stream_index; pkt->stream_index = fourxm->video_stream_index;
pkt->pts = fourxm->video_pts; pkt->pts = fourxm->video_pts;
pkt->pos = avio_tell(s->pb); pkt->pos = avio_tell(s->pb);
...@@ -347,7 +349,7 @@ static int fourxm_read_packet(AVFormatContext *s, ...@@ -347,7 +349,7 @@ static int fourxm_read_packet(AVFormatContext *s,
fourxm->tracks[track_number].channels > 0) { fourxm->tracks[track_number].channels > 0) {
ret = av_get_packet(s->pb, pkt, size); ret = av_get_packet(s->pb, pkt, size);
if (ret < 0) if (ret < 0)
return AVERROR(EIO); return ret;
pkt->stream_index = pkt->stream_index =
fourxm->tracks[track_number].stream_index; fourxm->tracks[track_number].stream_index;
pkt->pts = fourxm->tracks[track_number].audio_pts; pkt->pts = fourxm->tracks[track_number].audio_pts;
......
...@@ -215,10 +215,9 @@ static int flic_read_packet(AVFormatContext *s, ...@@ -215,10 +215,9 @@ static int flic_read_packet(AVFormatContext *s,
magic = AV_RL16(&preamble[4]); magic = AV_RL16(&preamble[4]);
if (((magic == FLIC_CHUNK_MAGIC_1) || (magic == FLIC_CHUNK_MAGIC_2)) && size > FLIC_PREAMBLE_SIZE) { if (((magic == FLIC_CHUNK_MAGIC_1) || (magic == FLIC_CHUNK_MAGIC_2)) && size > FLIC_PREAMBLE_SIZE) {
if (av_new_packet(pkt, size)) { if ((ret = av_new_packet(pkt, size)) < 0)
ret = AVERROR(EIO); return ret;
break;
}
pkt->stream_index = flic->video_stream_index; pkt->stream_index = flic->video_stream_index;
pkt->pts = flic->frame_number++; pkt->pts = flic->frame_number++;
pkt->pos = avio_tell(pb); pkt->pos = avio_tell(pb);
...@@ -231,10 +230,8 @@ static int flic_read_packet(AVFormatContext *s, ...@@ -231,10 +230,8 @@ static int flic_read_packet(AVFormatContext *s,
} }
packet_read = 1; packet_read = 1;
} else if (magic == FLIC_TFTD_CHUNK_AUDIO) { } else if (magic == FLIC_TFTD_CHUNK_AUDIO) {
if (av_new_packet(pkt, size)) { if ((ret = av_new_packet(pkt, size)) < 0)
ret = AVERROR(EIO); return ret;
break;
}
/* skip useless 10B sub-header (yes, it's not accounted for in the chunk header) */ /* skip useless 10B sub-header (yes, it's not accounted for in the chunk header) */
avio_skip(pb, 10); avio_skip(pb, 10);
......
...@@ -205,8 +205,9 @@ static int roq_read_packet(AVFormatContext *s, ...@@ -205,8 +205,9 @@ static int roq_read_packet(AVFormatContext *s,
} }
/* load up the packet */ /* load up the packet */
if (av_new_packet(pkt, chunk_size + RoQ_CHUNK_PREAMBLE_SIZE)) ret = av_new_packet(pkt, chunk_size + RoQ_CHUNK_PREAMBLE_SIZE);
return AVERROR(EIO); if (ret < 0)
return ret;
/* copy over preamble */ /* copy over preamble */
memcpy(pkt->data, preamble, RoQ_CHUNK_PREAMBLE_SIZE); memcpy(pkt->data, preamble, RoQ_CHUNK_PREAMBLE_SIZE);
......
...@@ -160,7 +160,7 @@ static int str_read_packet(AVFormatContext *s, ...@@ -160,7 +160,7 @@ static int str_read_packet(AVFormatContext *s,
AVIOContext *pb = s->pb; AVIOContext *pb = s->pb;
StrDemuxContext *str = s->priv_data; StrDemuxContext *str = s->priv_data;
unsigned char sector[RAW_CD_SECTOR_SIZE]; unsigned char sector[RAW_CD_SECTOR_SIZE];
int channel; int channel, ret;
AVPacket *pkt; AVPacket *pkt;
AVStream *st; AVStream *st;
...@@ -213,8 +213,9 @@ static int str_read_packet(AVFormatContext *s, ...@@ -213,8 +213,9 @@ static int str_read_packet(AVFormatContext *s,
if(pkt->data) if(pkt->data)
av_log(s, AV_LOG_ERROR, "mismatching sector_count\n"); av_log(s, AV_LOG_ERROR, "mismatching sector_count\n");
av_packet_unref(pkt); av_packet_unref(pkt);
if (av_new_packet(pkt, sector_count*VIDEO_DATA_CHUNK_SIZE)) ret = av_new_packet(pkt, sector_count * VIDEO_DATA_CHUNK_SIZE);
return AVERROR(EIO); if (ret < 0)
return ret;
memset(pkt->data, 0, sector_count*VIDEO_DATA_CHUNK_SIZE); memset(pkt->data, 0, sector_count*VIDEO_DATA_CHUNK_SIZE);
pkt->pos= avio_tell(pb) - RAW_CD_SECTOR_SIZE; pkt->pos= avio_tell(pb) - RAW_CD_SECTOR_SIZE;
...@@ -267,8 +268,8 @@ static int str_read_packet(AVFormatContext *s, ...@@ -267,8 +268,8 @@ static int str_read_packet(AVFormatContext *s,
st->start_time = 0; st->start_time = 0;
} }
pkt = ret_pkt; pkt = ret_pkt;
if (av_new_packet(pkt, 2304)) if ((ret = av_new_packet(pkt, 2304)) < 0)
return AVERROR(EIO); return ret;
memcpy(pkt->data,sector+24,2304); memcpy(pkt->data,sector+24,2304);
pkt->stream_index = pkt->stream_index =
......
...@@ -781,8 +781,8 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb, ...@@ -781,8 +781,8 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb,
return -1; return -1;
} }
rm->remaining_len -= len; rm->remaining_len -= len;
if(av_new_packet(pkt, len + 9) < 0) if ((ret = av_new_packet(pkt, len + 9)) < 0)
return AVERROR(EIO); return ret;
pkt->data[0] = 0; pkt->data[0] = 0;
AV_WL32(pkt->data + 1, 1); AV_WL32(pkt->data + 1, 1);
AV_WL32(pkt->data + 5, 0); AV_WL32(pkt->data + 5, 0);
...@@ -804,8 +804,8 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb, ...@@ -804,8 +804,8 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb,
vst->slices = ((hdr & 0x3F) << 1) + 1; vst->slices = ((hdr & 0x3F) << 1) + 1;
vst->videobufsize = len2 + 8*vst->slices + 1; vst->videobufsize = len2 + 8*vst->slices + 1;
av_packet_unref(&vst->pkt); //FIXME this should be output. av_packet_unref(&vst->pkt); //FIXME this should be output.
if(av_new_packet(&vst->pkt, vst->videobufsize) < 0) if ((ret = av_new_packet(&vst->pkt, vst->videobufsize)) < 0)
return AVERROR(ENOMEM); return ret;
memset(vst->pkt.data, 0, vst->pkt.size); memset(vst->pkt.data, 0, vst->pkt.size);
vst->videobufpos = 8*vst->slices + 1; vst->videobufpos = 8*vst->slices + 1;
vst->cur_slice = 0; vst->cur_slice = 0;
......
...@@ -237,8 +237,8 @@ static int vqf_read_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -237,8 +237,8 @@ static int vqf_read_packet(AVFormatContext *s, AVPacket *pkt)
int ret; int ret;
int size = (c->frame_bit_len - c->remaining_bits + 7)>>3; int size = (c->frame_bit_len - c->remaining_bits + 7)>>3;
if (av_new_packet(pkt, size+2) < 0) if ((ret = av_new_packet(pkt, size + 2)) < 0)
return AVERROR(EIO); return ret;
pkt->pos = avio_tell(s->pb); pkt->pos = avio_tell(s->pb);
pkt->stream_index = 0; pkt->stream_index = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment