diff --git a/configure b/configure
index 799827340f8a37807351af4fdd46677a1024bb64..ad9e8c13f05296714925695346867bfbbf5beca6 100755
--- a/configure
+++ b/configure
@@ -911,6 +911,7 @@ HAVE_LIST="
     libdc1394_1
     libdc1394_2
     llrint
+    log2
     loongson
     lrint
     lrintf
@@ -2078,7 +2079,7 @@ check_lib math.h sin -lm
 check_lib va/va.h vaInitialize -lva
 
 # test for C99 functions in math.h
-for func in llrint lrint lrintf round roundf truncf; do
+for func in llrint log2 lrint lrintf round roundf truncf; do
     check_exec <<EOF && enable $func || disable $func
 #include <math.h>
 int main(void) { return ($func(3.999f) > 0)?0:1; }
diff --git a/libavutil/internal.h b/libavutil/internal.h
index a80ea2470b5dae9629419ec501b3672ca409d1fc..1012f1c690f8c734e51e4a8f39f81f00649b3a3f 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -265,6 +265,13 @@ static av_always_inline av_const long long llrint(double x)
 }
 #endif /* HAVE_LLRINT */
 
+#if !HAVE_LOG2
+static av_always_inline av_const double log2(double x)
+{
+    return log(x) * 1.44269504088896340736;
+}
+#endif /* HAVE_LOG2 */
+
 #if !HAVE_LRINT
 static av_always_inline av_const long int lrint(double x)
 {