Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 8 Jul 2012 20:33:32 +0000 (22:33 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 8 Jul 2012 20:33:32 +0000 (22:33 +0200)
* qatar/master:
  cmutils: include shellapi.h on Win32 (for CommandLineToArgvW).
  x86/timer: implement an intrinsic-based version for rdtsc (AV_READ_TIME).
  id3v2: add a mimetype for bmp pictures.
  flacdec: be less strict when parsing attached pictures.
  flacdec: don't create an attached picture stream until we have all information.

Conflicts:
configure

Merged-by: Michael Niedermayer <michaelni@gmx.at>
cmdutils.c
configure
libavformat/flacdec.c
libavformat/id3v2.c
libavutil/x86/timer.h

index 024c801..e90a9ee 100644 (file)
@@ -190,6 +190,7 @@ static const OptionDef *find_option(const OptionDef *po, const char *name)
 
 #if defined(_WIN32) && !defined(__MINGW32CE__)
 #include <windows.h>
+#include <shellapi.h>
 /* Will be leaked on exit */
 static char** win32_argv_utf8 = NULL;
 static int win32_argc = 0;
index 8a318da..abafd6e 100755 (executable)
--- a/configure
+++ b/configure
@@ -1253,6 +1253,7 @@ HAVE_LIST="
     poll_h
     posix_memalign
     pthread_cancel
+    rdtsc
     round
     roundf
     sched_getaffinity
@@ -2947,6 +2948,8 @@ check_cc <<EOF && enable inline_asm
 void foo(void) { __asm__ volatile ("" ::); }
 EOF
 
+check_code cc intrin.h "__rdtsc()" && enable rdtsc
+
 _restrict=
 for restrict_keyword in restrict __restrict__ __restrict; do
     check_cc <<EOF && _restrict=$restrict_keyword && break
index cd73df6..cd84cc6 100644 (file)
@@ -38,10 +38,6 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
     int type, width, height;
     int len, ret = 0;
 
-    st = avformat_new_stream(s, NULL);
-    if (!st)
-        return AVERROR(ENOMEM);
-
     pb = avio_alloc_context(buf, buf_size, 0, NULL, NULL, NULL, NULL);
     if (!pb)
         return AVERROR(ENOMEM);
@@ -50,8 +46,11 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
     type      = avio_rb32(pb);
     if (type >= FF_ARRAY_ELEMS(ff_id3v2_picture_types) || type < 0) {
         av_log(s, AV_LOG_ERROR, "Invalid picture type: %d.\n", type);
-        ret = AVERROR_INVALIDDATA;
-        goto fail;
+        if (s->error_recognition & AV_EF_EXPLODE) {
+            ret = AVERROR_INVALIDDATA;
+            goto fail;
+        }
+        type = 0;
     }
 
     /* picture mimetype */
@@ -60,7 +59,8 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
         avio_read(pb, mimetype, FFMIN(len, sizeof(mimetype) - 1)) != len) {
         av_log(s, AV_LOG_ERROR, "Could not read mimetype from an attached "
                "picture.\n");
-        ret = AVERROR_INVALIDDATA;
+        if (s->error_recognition & AV_EF_EXPLODE)
+            ret = AVERROR_INVALIDDATA;
         goto fail;
     }
     mimetype[len] = 0;
@@ -75,7 +75,8 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
     if (id == CODEC_ID_NONE) {
         av_log(s, AV_LOG_ERROR, "Unknown attached picture mimetype: %s.\n",
                mimetype);
-        ret = AVERROR_INVALIDDATA;
+        if (s->error_recognition & AV_EF_EXPLODE)
+            ret = AVERROR_INVALIDDATA;
         goto fail;
     }
 
@@ -88,7 +89,9 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
         }
 
         if (avio_read(pb, desc, len) != len) {
-            ret = AVERROR(EIO);
+            av_log(s, AV_LOG_ERROR, "Error reading attached picture description.\n");
+            if (s->error_recognition & AV_EF_EXPLODE)
+                ret = AVERROR(EIO);
             goto fail;
         }
         desc[len] = 0;
@@ -102,7 +105,9 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
     /* picture data */
     len = avio_rb32(pb);
     if (len <= 0) {
-        ret = AVERROR_INVALIDDATA;
+        av_log(s, AV_LOG_ERROR, "Invalid attached picture size: %d.\n", len);
+        if (s->error_recognition & AV_EF_EXPLODE)
+            ret = AVERROR_INVALIDDATA;
         goto fail;
     }
     if (!(data = av_malloc(len))) {
@@ -110,7 +115,15 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
         goto fail;
     }
     if (avio_read(pb, data, len) != len) {
-        ret = AVERROR(EIO);
+        av_log(s, AV_LOG_ERROR, "Error reading attached picture data.\n");
+        if (s->error_recognition & AV_EF_EXPLODE)
+            ret = AVERROR(EIO);
+        goto fail;
+    }
+
+    st = avformat_new_stream(s, NULL);
+    if (!st) {
+        ret = AVERROR(ENOMEM);
         goto fail;
     }
 
index 216d4a2..9ccd8f2 100644 (file)
@@ -130,6 +130,7 @@ const CodecMime ff_id3v2_mime_tags[] = {
     {"image/jpg",  CODEC_ID_MJPEG},
     {"image/png" , CODEC_ID_PNG},
     {"image/tiff", CODEC_ID_TIFF},
+    {"image/bmp",  CODEC_ID_BMP},
     {"",           CODEC_ID_NONE},
 };
 
index 62a111f..5969876 100644 (file)
@@ -23,6 +23,8 @@
 
 #include <stdint.h>
 
+#if HAVE_INLINE_ASM
+
 #define AV_READ_TIME read_time
 
 static inline uint64_t read_time(void)
@@ -32,4 +34,10 @@ static inline uint64_t read_time(void)
     return ((uint64_t)d << 32) + a;
 }
 
+#elif HAVE_RDTSC
+
+#define AV_READ_TIME __rdtsc
+
+#endif /* HAVE_INLINE_ASM */
+
 #endif /* AVUTIL_X86_TIMER_H */