diff options
author | Diego Biurrun <diego@biurrun.de> | 2012-04-11 01:11:08 +0200 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2012-05-09 18:18:05 +0200 |
commit | 5b432d66ce49cbadcac832bffd6e22fda83807d3 (patch) | |
tree | a6ed5e3700d331f5b07d733e93e30b1cef980d1c /libavcodec/libxvid_rc.c | |
parent | 727af82a84999c6fbd30856c42ac1477e8fbe011 (diff) | |
download | ffmpeg-5b432d66ce49cbadcac832bffd6e22fda83807d3.tar.gz |
libxvid: Separate libxvid encoder from libxvid rate control code.
This allows compiling the Xvid rate control code without the encoder.
Diffstat (limited to 'libavcodec/libxvid_rc.c')
-rw-r--r-- | libavcodec/libxvid_rc.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libavcodec/libxvid_rc.c b/libavcodec/libxvid_rc.c index c830767058..959edd49b4 100644 --- a/libavcodec/libxvid_rc.c +++ b/libavcodec/libxvid_rc.c @@ -20,8 +20,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config.h" #include <xvid.h> #include <unistd.h> +#if !HAVE_MKSTEMP +#include <fcntl.h> +#endif + #include "avcodec.h" #include "libxvid_internal.h" //#include "dsputil.h" @@ -30,6 +35,42 @@ #undef NDEBUG #include <assert.h> +/* Wrapper to work around the lack of mkstemp() on mingw. + * Also, tries to create file in /tmp first, if possible. + * *prefix can be a character constant; *filename will be allocated internally. + * @return file descriptor of opened file (or -1 on error) + * and opened file name in **filename. */ +int ff_tempfile(const char *prefix, char **filename) { + int fd=-1; +#if !HAVE_MKSTEMP + *filename = tempnam(".", prefix); +#else + size_t len = strlen(prefix) + 12; /* room for "/tmp/" and "XXXXXX\0" */ + *filename = av_malloc(len); +#endif + /* -----common section-----*/ + if (*filename == NULL) { + av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n"); + return -1; + } +#if !HAVE_MKSTEMP + fd = open(*filename, O_RDWR | O_BINARY | O_CREAT, 0444); +#else + snprintf(*filename, len, "/tmp/%sXXXXXX", prefix); + fd = mkstemp(*filename); + if (fd < 0) { + snprintf(*filename, len, "./%sXXXXXX", prefix); + fd = mkstemp(*filename); + } +#endif + /* -----common section-----*/ + if (fd < 0) { + av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename); + return -1; + } + return fd; /* success */ +} + int ff_xvid_rate_control_init(MpegEncContext *s){ char *tmp_name; int fd, i; |