diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-03-02 23:22:08 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-03-02 23:30:28 +0400 |
commit | 6a8f6c773da2822adbca15f105cc31c32b40c168 (patch) | |
tree | 6a0273b63ee3a7c28756da638c0aed1c0ab9912f /libavcodec/libxvid.c | |
parent | 03bc7a004eb03ace5d425b7e18a4b02322ef9ff5 (diff) |
libxvid: remove temporary files at the end
Fixes Ticket924
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/libxvid.c')
-rw-r--r-- | libavcodec/libxvid.c | 11 |
1 files changed, 9 insertions, 2 deletions
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); |