//xvid_debug=-1;
- fd=av_tempfile("xvidrc.", &tmp_name);
+ fd=av_tempfile("xvidrc.", &tmp_name, 0, s->avctx);
if (fd == -1) {
av_log(NULL, AV_LOG_ERROR, "Can't create temporary pass2 file.\n");
return -1;
rc2pass2.version = XVID_VERSION;
rc2pass2.bitrate = avctx->bit_rate;
- fd = av_tempfile("xvidff.", &(x->twopassfile));
+ fd = av_tempfile("xvidff.", &(x->twopassfile), 0, avctx);
if( fd == -1 ) {
av_log(avctx, AV_LOG_ERROR,
"Xvid: Cannot write 2-pass pipe\n");
avpicture_layout(&pict, ref->format, ref->video->w,
ref->video->h, pkt->data, size);
} else if (ref->audio) {
- size = ref->linesize[0];
+ size = ref->audio->nb_samples *
+ av_get_bytes_per_sample(ref->format) *
+ av_get_channel_layout_nb_channels(ref->audio->channel_layout);
if ((ret = av_new_packet(pkt, size)) < 0)
return ret;
memcpy(pkt->data, ref->data[0], size);
* Based on file.c by Fabrice Bellard
*/
+/**
+ * @TODO
+ * support non continuous caching
+ * support keeping files
+ * support filling with a background thread
+ */
+
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/file.h"
av_strstart(arg, "cache:", &arg);
- c->fd = av_tempfile("ffcache", &buffername);
+ c->fd = av_tempfile("ffcache", &buffername, 0, h);
if (c->fd < 0){
av_log(h, AV_LOG_ERROR, "Failed to create tempfile\n");
return c->fd;
#endif
}
-int av_tempfile(const char *prefix, char **filename) {
+int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx) {
+ FileLogContext file_log_ctx = { &file_log_ctx_class, log_offset, log_ctx };
int fd=-1;
#if !HAVE_MKSTEMP
- void *ptr= tempnam(".", prefix);
+ void *ptr= tempnam(NULL, prefix);
+ if(!ptr)
+ ptr= tempnam(".", prefix);
*filename = av_strdup(ptr);
#undef free
free(ptr);
#endif
/* -----common section-----*/
if (*filename == NULL) {
- av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n");
- return -1;
+ av_log(&file_log_ctx, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n");
+ return AVERROR(ENOMEM);
}
#if !HAVE_MKSTEMP
# ifndef O_BINARY
# define O_BINARY 0
# endif
- fd = open(*filename, O_RDWR | O_BINARY | O_CREAT, 0444);
+# ifndef O_EXCL
+# define O_EXCL 0
+# endif
+ fd = open(*filename, O_RDWR | O_BINARY | O_CREAT | O_EXCL, 0600);
#else
snprintf(*filename, len, "/tmp/%sXXXXXX", prefix);
fd = mkstemp(*filename);
+#ifdef _WIN32
if (fd < 0) {
snprintf(*filename, len, "./%sXXXXXX", prefix);
fd = mkstemp(*filename);
}
+#endif
#endif
/* -----common section-----*/
if (fd < 0) {
- av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename);
- return -1;
+ int err = AVERROR(errno);
+ av_log(&file_log_ctx, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename);
+ return err;
}
return fd; /* success */
}
* @return file descriptor of opened file (or -1 on error)
* and opened file name in **filename.
*/
-int av_tempfile(const char *prefix, char **filename);
+int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx);
#endif /* AVUTIL_FILE_H */