diff --git a/modules/highgui/src/cap_ffmpeg_impl.hpp b/modules/highgui/src/cap_ffmpeg_impl.hpp
index 14ed8b7..02d89cc 100644
--- a/modules/highgui/src/cap_ffmpeg_impl.hpp
+++ b/modules/highgui/src/cap_ffmpeg_impl.hpp
@@ -146,6 +146,12 @@ extern "C" {
     #include <sys/sysctl.h>
 #endif
 
+#if LIBAVFORMAT_BUILD < AV_VERSION_INT(53, 2, 0)
+#define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO
+#endif
+#ifndef PKT_FLAG_KEY
+#define PKT_FLAG_KEY AV_PKT_FLAG_KEY
+#endif
 int get_number_of_cpus(void)
 {
 #if defined WIN32 || defined _WIN32
@@ -467,7 +473,6 @@ void CvCapture_FFMPEG::close()
     init();
 }
 
-
 /*
     Used to reopen a video if the slower fallback function for seeking is used.
 */
@@ -540,10 +545,6 @@ bool CvCapture_FFMPEG::open( const char* _filename )
 
         avcodec_thread_init(enc, get_number_of_cpus());
 
-        #if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 4, 0)
-            #define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO
-        #endif
-        
         if( AVMEDIA_TYPE_VIDEO == enc->codec_type && video_stream < 0) {
             AVCodec *codec = avcodec_find_decoder(enc->codec_id);
             if (!codec ||
@@ -596,6 +597,24 @@ exit_func:
     return valid;
 }
 
+#if LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0)
+	/* As defined when compiled against libav-0.7 from Ubuntu 11.10 Oneiric */
+	/*Gal Shalif: temporary add a backward compatible function - till OpenCV is properly ported to compile against ffmpeg 0.7 */
+	/* Gal Shalif: code is copy from Ubuntu 11.04 Natty libav-0.6.2/libavcodec/utils.c */
+int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
+			int *got_picture_ptr,
+			uint8_t *buf, int buf_size)
+{
+	AVPacket avpkt;
+	av_init_packet(&avpkt);
+	avpkt.data = buf;
+	avpkt.size = buf_size;
+	// HACK for CorePNG to decode as normal PNG by default
+	avpkt.flags = AV_PKT_FLAG_KEY;
+	return avcodec_decode_video2(avctx, picture, got_picture_ptr, &avpkt);
+}
+#endif /* LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0) */
+
 
 bool CvCapture_FFMPEG::grabFrame()
 {
@@ -631,7 +650,7 @@ bool CvCapture_FFMPEG::grabFrame()
 		        continue;
     		}
 
-#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
+#if LIBAVFORMAT_BUILD >= AV_VERSION_INT(53, 4, 0)
 			avcodec_decode_video2(video_st->codec, picture, &got_picture, &packet); 
 #else
 	#if LIBAVFORMAT_BUILD > 4628
@@ -879,9 +898,22 @@ struct CvVideoWriter_FFMPEG
 #endif
 };
 
+#if LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0)
+	/* As defined when compiled against libav-0.7 from Ubuntu 11.10 Oneiric */
+	/* Gal Shalif: temporary add a backward compatible define
+	 * - till OpenCV is properly ported to compile against ffmpeg 0.7 */
+
+	/* Gal Shalif: code is copy from Ubuntu 11.04 Natty libav-0.6.2/libavutil/error.h
+	 * and is enclosed within LIBAVUTIL_VERSION_MAJOR < 51 ... #endif */
+	#define AVERROR_NUMEXPECTED AVERROR(EDOM)    ///< Number syntax expected in filename
+	#define AVERROR_NOFMT       AVERROR(EILSEQ)  ///< Unknown format
+	#define AVERROR_IO          AVERROR(EIO)     ///< I/O error
+	#define AVERROR_NOMEM       AVERROR(ENOMEM)  ///< Not enough memory
+#endif /* LIBAVFORMAT_BUILD >= (53<<16 | 0<<8 | 0) */
+
 static const char * icvFFMPEGErrStr(int err)
 {
-#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
+#if LIBAVFORMAT_BUILD >= AV_VERSION_INT(53, 4, 0)
     switch(err) {
  		case AVERROR_BSF_NOT_FOUND:
  			return "Bitstream filter not found";
@@ -1106,11 +1138,7 @@ int icv_av_write_frame_FFMPEG( AVFormatContext * oc, AVStream * video_st, uint8_
         AVPacket pkt;
         av_init_packet(&pkt);
 
-		#ifndef PKT_FLAG_KEY
-			#define PKT_FLAG_KEY AV_PKT_FLAG_KEY
-		#endif
-		
-        pkt.flags |= PKT_FLAG_KEY; 
+        pkt.flags |= PKT_FLAG_KEY;
         pkt.stream_index= video_st->index;
         pkt.data= (uint8_t *)picture;
         pkt.size= sizeof(AVPicture);
@@ -1333,7 +1361,7 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc,
 
 	/* auto detect the output format from the name and fourcc code. */
 
-#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
+#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0)
 	fmt = av_guess_format(NULL, filename, NULL);
 #else
 	fmt = guess_format(NULL, filename, NULL);
@@ -1361,7 +1389,7 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc,
 #endif
 
     // alloc memory for context
-#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 4, 0)
+#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0)
 	oc = avformat_alloc_context();
 #else
 	oc = av_alloc_format_context();
