]> git.sesse.net Git - ffmpeg/commitdiff
Merge remote-tracking branch 'cus/stable'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 16 Oct 2011 21:42:06 +0000 (23:42 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 16 Oct 2011 21:42:41 +0000 (23:42 +0200)
* cus/stable:
  ffplay: avoid window resize crash on osx with libsdl 1.2.14
  ffplay: add delay multiple times to frame_timer if it is less than current time
  ffplay: remove early frame drop functionality
  ffplay: calculate target clock dynamically, make code more readable

Merged-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/libxvid_rc.c
libavcodec/libxvidff.c
libavdevice/lavfi.c
libavformat/cache.c
libavutil/file.c
libavutil/file.h

index 37716acc4a4022cf36e73ad4ce8049165f98c7af..8a2b487122a768bd9ec39191e5d5fca7f55baabb 100644 (file)
@@ -41,7 +41,7 @@ int ff_xvid_rate_control_init(MpegEncContext *s){
 
 //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;
index ba950edc399c59a01ddbfe85cd602399fd2ce1c6..f7aa7fd44e0a6b71c1350060364f57f8648632a8 100644 (file)
@@ -232,7 +232,7 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx)  {
         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");
index 4d7297bce6153460738e9f61032d98e33b89dc36..0477081ae1638fe3cbbe7eb2c7c3151ece662fdb 100644 (file)
@@ -299,7 +299,9 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
         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);
index c08250b1871e652ae5a31aa207ace9a5f079eae9..74f008e0d1b1a05cfe42589fa2923691e47d6901 100644 (file)
  * 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"
@@ -56,7 +63,7 @@ static int cache_open(URLContext *h, const char *arg, int flags)
 
     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;
index c388523d1b70763029d01a0f326e8beb66591dbe..e59335a77ad39102bdd043a0a626c832900fd27a 100644 (file)
@@ -130,10 +130,13 @@ void av_file_unmap(uint8_t *bufptr, size_t size)
 #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);
@@ -143,26 +146,32 @@ int av_tempfile(const char *prefix, char **filename) {
 #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 */
 }
index c6d2692d52fe726939e7f0c71b47e36eade131e9..f3af9ef7e57aceb11b72d32165b84f88668d3eca 100644 (file)
@@ -56,6 +56,6 @@ void av_file_unmap(uint8_t *bufptr, size_t size);
  * @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 */