Commit 57df8839 authored by Marton Balint's avatar Marton Balint

avformat/img2enc: cleanup IO contexts on error

Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent 43d5ddb4
...@@ -124,7 +124,7 @@ static int write_packet_pipe(AVFormatContext *s, AVPacket *pkt) ...@@ -124,7 +124,7 @@ static int write_packet_pipe(AVFormatContext *s, AVPacket *pkt)
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;
AVIOContext *pb[4]; AVIOContext *pb[4] = {0};
char filename[1024]; char filename[1024];
AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar;
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(par->format); const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(par->format);
...@@ -162,7 +162,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -162,7 +162,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
av_strlcpy(img->target[i], filename, sizeof(img->target[i])); av_strlcpy(img->target[i], filename, sizeof(img->target[i]));
if (s->io_open(s, &pb[i], img->use_rename ? img->tmp[i] : filename, AVIO_FLAG_WRITE, NULL) < 0) { if (s->io_open(s, &pb[i], img->use_rename ? img->tmp[i] : filename, AVIO_FLAG_WRITE, NULL) < 0) {
av_log(s, AV_LOG_ERROR, "Could not open file : %s\n", img->use_rename ? img->tmp[i] : filename); av_log(s, AV_LOG_ERROR, "Could not open file : %s\n", img->use_rename ? img->tmp[i] : filename);
return AVERROR(EIO); ret = AVERROR(EIO);
goto fail;
} }
if (!img->split_planes || i+1 >= desc->nb_components) if (!img->split_planes || i+1 >= desc->nb_components)
...@@ -191,7 +192,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -191,7 +192,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
} else if (img->muxer) { } else if (img->muxer) {
ret = write_muxed_file(s, pb[0], pkt); ret = write_muxed_file(s, pb[0], pkt);
if (ret < 0) if (ret < 0)
return ret; goto fail;
} else { } else {
avio_write(pb[0], pkt->data, pkt->size); avio_write(pb[0], pkt->data, pkt->size);
} }
...@@ -205,6 +206,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -205,6 +206,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
img->img_number++; img->img_number++;
return 0; return 0;
fail:
for (i = 0; i < FF_ARRAY_ELEMS(pb); i++)
if (pb[i])
ff_format_io_close(s, &pb[i]);
return ret;
} }
static int query_codec(enum AVCodecID id, int std_compliance) static int query_codec(enum AVCodecID id, int std_compliance)
......
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