diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index e9e07b92fd4cfa407ddf134875c39e68172dac64..4bfe024f6e606a6130c22c6837b4d032b13946d6 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -41,7 +41,7 @@
 
 #define LIBAVUTIL_VERSION_MAJOR 50
 #define LIBAVUTIL_VERSION_MINOR 15
-#define LIBAVUTIL_VERSION_MICRO  1
+#define LIBAVUTIL_VERSION_MICRO  2
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \
diff --git a/libavutil/log.c b/libavutil/log.c
index 9a8b66ee4d473bca5082039b065025ea1f379578..547287fc293fae566e4a10956d3e9b8b424ac29e 100644
--- a/libavutil/log.c
+++ b/libavutil/log.c
@@ -89,8 +89,11 @@ static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_defaul
 
 void av_log(void* avcl, int level, const char *fmt, ...)
 {
+    AVClass* avc= avcl ? *(AVClass**)avcl : NULL;
     va_list vl;
     va_start(vl, fmt);
+    if(avc && avc->version >= (50<<16 | 15<<8 | 2) && avc->log_level_offset_offset && level>=AV_LOG_FATAL)
+        level += *(int*)(((uint8_t*)avcl) + avc->log_level_offset_offset);
     av_vlog(avcl, level, fmt, vl);
     va_end(vl);
 }
diff --git a/libavutil/log.h b/libavutil/log.h
index 1c3e490139186d8da1c4a383f1db6f233c768d14..d4bc7554b3cedc3e144ca43b42fa5ef5e67648a9 100644
--- a/libavutil/log.h
+++ b/libavutil/log.h
@@ -56,6 +56,12 @@ typedef struct {
      */
 
     int version;
+
+    /**
+     * Offset in the structure where log_level_offset is stored.
+     * 0 means there is no such variable
+     */
+    int log_level_offset_offset;
 } AVClass;
 
 /* av_log API */