From 6a8f6c773da2822adbca15f105cc31c32b40c168 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 2 Mar 2013 20:22:08 +0100 Subject: libxvid: remove temporary files at the end Fixes Ticket924 Signed-off-by: Michael Niedermayer --- libavcodec/libxvid.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'libavcodec/libxvid.c') diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index dae8ac8244..1528e141fc 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -60,6 +60,7 @@ struct xvid_context { char *twopassbuffer; /**< Character buffer for two-pass */ char *old_twopassbuffer; /**< Old character buffer (two-pass) */ char *twopassfile; /**< second pass temp file name */ + int twopassfd; unsigned char *intra_matrix; /**< P-Frame Quant Matrix */ unsigned char *inter_matrix; /**< I-Frame Quant Matrix */ }; @@ -356,6 +357,8 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx) { xvid_enc_create_t xvid_enc_create = { 0 }; xvid_enc_plugin_t plugins[7]; + x->twopassfd = -1; + /* Bring in VOP flags from ffmpeg command-line */ x->vop_flags = XVID_VOP_HALFPEL; /* Bare minimum quality */ if( xvid_flags & CODEC_FLAG_4MV ) @@ -491,6 +494,7 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx) { "Xvid: Cannot write 2-pass pipe\n"); return -1; } + x->twopassfd = fd; if( avctx->stats_in == NULL ) { av_log(avctx, AV_LOG_ERROR, @@ -500,13 +504,11 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx) { if( strlen(avctx->stats_in) > write(fd, avctx->stats_in, strlen(avctx->stats_in)) ) { - close(fd); av_log(avctx, AV_LOG_ERROR, "Xvid: Cannot write to 2-pass pipe\n"); return -1; } - close(fd); rc2pass2.filename = x->twopassfile; plugins[xvid_enc_create.num_plugins].func = xvid_plugin_2pass2; plugins[xvid_enc_create.num_plugins].param = &rc2pass2; @@ -741,6 +743,11 @@ static av_cold int xvid_encode_close(AVCodecContext *avctx) { av_free(x->old_twopassbuffer); avctx->stats_out = NULL; } + if (x->twopassfd>=0) { + unlink(x->twopassfile); + close(x->twopassfd); + x->twopassfd = -1; + } av_free(x->twopassfile); av_free(x->intra_matrix); av_free(x->inter_matrix); -- cgit v1.2.3