This allows compiling the Xvid rate control code without the encoder.tags/n0.11
| @@ -42,6 +42,7 @@ OBJS-$(CONFIG_GOLOMB) += golomb.o | |||
| OBJS-$(CONFIG_H264DSP) += h264dsp.o h264idct.o | |||
| OBJS-$(CONFIG_H264PRED) += h264pred.o | |||
| OBJS-$(CONFIG_HUFFMAN) += huffman.o | |||
| OBJS-$(CONFIG_LIBXVID) += libxvid_rc.o | |||
| OBJS-$(CONFIG_LPC) += lpc.o | |||
| OBJS-$(CONFIG_LSP) += lsp.o | |||
| OBJS-$(CONFIG_MDCT) += mdct_fixed.o mdct_float.o | |||
| @@ -615,7 +616,7 @@ OBJS-$(CONFIG_LIBVPX_DECODER) += libvpxdec.o | |||
| OBJS-$(CONFIG_LIBVPX_ENCODER) += libvpxenc.o | |||
| OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o | |||
| OBJS-$(CONFIG_LIBXAVS_ENCODER) += libxavs.o | |||
| OBJS-$(CONFIG_LIBXVID) += libxvidff.o libxvid_rc.o | |||
| OBJS-$(CONFIG_LIBXVID_ENCODER) += libxvidff.o | |||
| # parsers | |||
| OBJS-$(CONFIG_AAC_PARSER) += aac_parser.o aac_ac3_parser.o \ | |||
| @@ -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; | |||
| @@ -33,9 +33,6 @@ | |||
| #include "libavutil/mathematics.h" | |||
| #include "libxvid_internal.h" | |||
| #include "mpegvideo.h" | |||
| #if !HAVE_MKSTEMP | |||
| #include <fcntl.h> | |||
| #endif | |||
| /** | |||
| * Buffer management macros. | |||
| @@ -83,42 +80,6 @@ struct xvid_ff_pass1 { | |||
| * rate-control plugin. | |||
| */ | |||
| /* 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 */ | |||
| } | |||
| /** | |||
| * Initialize the two-pass plugin and context. | |||
| * | |||