summaryrefslogtreecommitdiff
path: root/libavcodec/libxvid.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-03-02 20:22:08 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-03-02 20:30:28 +0100
commit6a8f6c773da2822adbca15f105cc31c32b40c168 (patch)
tree6a0273b63ee3a7c28756da638c0aed1c0ab9912f /libavcodec/libxvid.c
parent03bc7a004eb03ace5d425b7e18a4b02322ef9ff5 (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.c11
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);