diff --git a/configure b/configure
index b99534ad98e2ae8995a963fa2ee20d9585889415..d1c306ca9b47bf9adcfc1eb15198eaa7204b6904 100755
--- a/configure
+++ b/configure
@@ -148,6 +148,7 @@ debug="yes"
 extralibs="-lm"
 simpleidct="yes"
 bigendian="no"
+inttypes="yes"
 emu_fast_int="no"
 vhook="default"
 dlfcn="no"
@@ -633,6 +634,17 @@ fi
 
 fi
 
+# ---
+# *inttypes.h* test
+cat > $TMPC << EOF
+#include <inttypes.h>
+int main(int argc, char ** argv){
+    return 0;
+}
+EOF
+
+$cc -o $TMPE $TMPC 2>/dev/null || inttypes="no"
+
 # ---
 # *int_fast* test
 cat > $TMPC << EOF
@@ -870,6 +882,7 @@ echo "C compiler       $cc"
 echo "make             $make"
 echo "CPU              $cpu ($tune)"
 echo "Big Endian       $bigendian"
+echo "inttypes.h       $inttypes"
 echo "broken inttypes.h $emu_fast_int"
 if test $cpu = "x86"; then
 echo "MMX enabled      $mmx"
@@ -972,6 +985,9 @@ if test "$bigendian" = "yes" ; then
   echo "WORDS_BIGENDIAN=yes" >> config.mak
   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
 fi
+if test "$inttypes" = "yes" ; then
+  echo "#define HAVE_INTTYPES_H 1" >> $TMPH
+fi
 if test "$emu_fast_int" = "yes" ; then
   echo "#define EMULATE_FAST_INT 1" >> $TMPH
 fi
diff --git a/libavcodec/common.h b/libavcodec/common.h
index 385372f792da69e49fe6abff7a6bbb6639b3c5af..ee5a4cbd82997664bf805a2c3198e3d9677500bd 100644
--- a/libavcodec/common.h
+++ b/libavcodec/common.h
@@ -82,6 +82,25 @@ extern const struct AVOption avoptions_workaround_bug[11];
 #    define always_inline inline
 #endif
 
+#ifdef HAVE_INTTYPES_H
+#   include <inttypes.h>
+#else
+    typedef signed char  int8_t;
+    typedef signed short int16_t;
+    typedef signed int   int32_t;
+    typedef unsigned char  uint8_t;
+    typedef unsigned short uint16_t;
+    typedef unsigned int   uint32_t;
+
+#   ifdef CONFIG_WIN32
+        typedef signed __int64   int64_t;
+        typedef unsigned __int64 uint64_t;
+#   else /* other OS */
+        typedef signed long long   int64_t;
+        typedef unsigned long long uint64_t;
+#   endif /* other OS */
+#endif /* HAVE_INTTYPES_H */
+
 #ifdef EMULATE_FAST_INT
 /* note that we don't emulate 64bit ints */
 typedef signed char int_fast8_t;
@@ -102,15 +121,6 @@ static inline float floorf(float f) {
 
 /* windows */
 
-typedef unsigned short uint16_t;
-typedef signed short int16_t;
-typedef unsigned char uint8_t;
-typedef unsigned int uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef signed char int8_t;
-typedef signed int int32_t;
-typedef signed __int64 int64_t;
-
 #    ifndef __MINGW32__
 #        define int64_t_C(c)     (c ## i64)
 #        define uint64_t_C(c)    (c ## i64)
@@ -137,8 +147,6 @@ typedef signed __int64 int64_t;
 #elif defined (CONFIG_OS2)
 /* OS/2 EMX */
 
-#include <inttypes.h>
-
 #ifndef int64_t_C
 #define int64_t_C(c)     (c ## LL)
 #define uint64_t_C(c)    (c ## ULL)
@@ -159,8 +167,6 @@ typedef signed __int64 int64_t;
 
 /* unix */
 
-#include <inttypes.h>
-
 #ifndef int64_t_C
 #define int64_t_C(c)     (c ## LL)
 #define uint64_t_C(c)    (c ## ULL)