avformat/img2enc: do not ignore IO errors

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint 2021-11-30 00:15:14 +01:00
parent 64834bb86a
commit 466441a0d2
1 changed files with 20 additions and 15 deletions

View File

@ -121,6 +121,13 @@ static int write_packet_pipe(AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
static int write_and_close(AVFormatContext *s, AVIOContext **pb, const unsigned char *buf, int size)
{
avio_write(*pb, buf, size);
avio_flush(*pb);
return ff_format_io_close(s, pb);
}
static int write_packet(AVFormatContext *s, AVPacket *pkt) static int write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
VideoMuxData *img = s->priv_data; VideoMuxData *img = s->priv_data;
@ -187,24 +194,22 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
ysize *= 2; ysize *= 2;
usize *= 2; usize *= 2;
} }
avio_write(pb[0], pkt->data , ysize); if ((ret = write_and_close(s, &pb[0], pkt->data , ysize)) < 0 ||
avio_write(pb[1], pkt->data + ysize , usize); (ret = write_and_close(s, &pb[1], pkt->data + ysize , usize)) < 0 ||
avio_write(pb[2], pkt->data + ysize + usize, usize); (ret = write_and_close(s, &pb[2], pkt->data + ysize + usize, usize)) < 0)
ff_format_io_close(s, &pb[1]);
ff_format_io_close(s, &pb[2]);
if (desc->nb_components > 3) {
avio_write(pb[3], pkt->data + ysize + 2*usize, ysize);
ff_format_io_close(s, &pb[3]);
}
} else if (img->muxer) {
ret = write_muxed_file(s, pb[0], pkt);
if (ret < 0)
goto fail; goto fail;
if (desc->nb_components > 3)
ret = write_and_close(s, &pb[3], pkt->data + ysize + 2*usize, ysize);
} else if (img->muxer) {
if ((ret = write_muxed_file(s, pb[0], pkt)) < 0)
goto fail;
ret = ff_format_io_close(s, &pb[0]);
} else { } else {
avio_write(pb[0], pkt->data, pkt->size); ret = write_and_close(s, &pb[0], pkt->data, pkt->size);
} }
avio_flush(pb[0]); if (ret < 0)
ff_format_io_close(s, &pb[0]); goto fail;
for (i = 0; i < nb_renames; i++) { for (i = 0; i < nb_renames; i++) {
int ret = ff_rename(img->tmp[i], img->target[i], s); int ret = ff_rename(img->tmp[i], img->target[i], s);
if (ret < 0) if (ret < 0)