diff -Naur blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
--- blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2012-05-10 11:45:40.000000000 -0300
+++ blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2012-07-10 18:12:55.727129720 -0300
@@ -143,23 +143,23 @@
 
 	switch(m_codecCtx->sample_fmt)
 	{
-	case SAMPLE_FMT_U8:
+	case AV_SAMPLE_FMT_U8:
 		m_convert = AUD_convert_u8_float;
 		m_specs.format = AUD_FORMAT_U8;
 		break;
-	case SAMPLE_FMT_S16:
+	case AV_SAMPLE_FMT_S16:
 		m_convert = AUD_convert_s16_float;
 		m_specs.format = AUD_FORMAT_S16;
 		break;
-	case SAMPLE_FMT_S32:
+	case AV_SAMPLE_FMT_S32:
 		m_convert = AUD_convert_s32_float;
 		m_specs.format = AUD_FORMAT_S32;
 		break;
-	case SAMPLE_FMT_FLT:
+	case AV_SAMPLE_FMT_FLT:
 		m_convert = AUD_convert_copy<float>;
 		m_specs.format = AUD_FORMAT_FLOAT32;
 		break;
-	case SAMPLE_FMT_DBL:
+	case AV_SAMPLE_FMT_DBL:
 		m_convert = AUD_convert_double_float;
 		m_specs.format = AUD_FORMAT_FLOAT64;
 		break;
@@ -189,7 +189,7 @@
 	}
 	catch(AUD_Exception&)
 	{
-		av_close_input_file(m_formatCtx);
+		avformat_close_input(&m_formatCtx);
 		throw;
 	}
 }
@@ -227,7 +227,7 @@
 	}
 	catch(AUD_Exception&)
 	{
-		av_close_input_stream(m_formatCtx);
+		avformat_close_input(&m_formatCtx);
 		av_free(m_aviocontext);
 		throw;
 	}
@@ -239,7 +239,7 @@
 
 	if(m_aviocontext)
 	{
-		av_close_input_stream(m_formatCtx);
+		avformat_close_input(&m_formatCtx);
 		av_free(m_aviocontext);
 	}
 	else
diff -Naur blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
--- blender-2.63a.orig/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp	2012-05-10 11:45:40.000000000 -0300
+++ blender-2.63a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp	2012-07-10 18:14:55.893790273 -0300
@@ -133,23 +133,23 @@
 		{
 		case AUD_FORMAT_U8:
 			m_convert = AUD_convert_float_u8;
-			m_codecCtx->sample_fmt = SAMPLE_FMT_U8;
+			m_codecCtx->sample_fmt = AV_SAMPLE_FMT_U8;
 			break;
 		case AUD_FORMAT_S16:
 			m_convert = AUD_convert_float_s16;
-			m_codecCtx->sample_fmt = SAMPLE_FMT_S16;
+			m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
 			break;
 		case AUD_FORMAT_S32:
 			m_convert = AUD_convert_float_s32;
-			m_codecCtx->sample_fmt = SAMPLE_FMT_S32;
+			m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S32;
 			break;
 		case AUD_FORMAT_FLOAT32:
 			m_convert = AUD_convert_copy<float>;
-			m_codecCtx->sample_fmt = SAMPLE_FMT_FLT;
+			m_codecCtx->sample_fmt = AV_SAMPLE_FMT_FLT;
 			break;
 		case AUD_FORMAT_FLOAT64:
 			m_convert = AUD_convert_float_double;
-			m_codecCtx->sample_fmt = SAMPLE_FMT_DBL;
+			m_codecCtx->sample_fmt = AV_SAMPLE_FMT_DBL;
 			break;
 		default:
 			AUD_THROW(AUD_ERROR_FFMPEG, format_error);
diff -Naur blender-2.63a.orig/intern/ffmpeg/ffmpeg_compat.h blender-2.63a/intern/ffmpeg/ffmpeg_compat.h
--- blender-2.63a.orig/intern/ffmpeg/ffmpeg_compat.h	2012-05-10 11:46:17.000000000 -0300
+++ blender-2.63a/intern/ffmpeg/ffmpeg_compat.h	2012-07-10 18:17:04.823783714 -0300
@@ -76,6 +76,10 @@
 #define FFMPEG_FFV1_ALPHA_SUPPORTED
 #endif
 
+#if ((LIBAVFORMAT_VERSION_MAJOR < 53) || ((LIBAVFORMAT_VERSION_MAJOR == 53) && (LIBAVFORMAT_VERSION_MINOR < 24)) || ((LIBAVFORMAT_VERSION_MAJOR == 53) && (LIBAVFORMAT_VERSION_MINOR < 24) && (LIBAVFORMAT_VERSION_MICRO < 2)))
+#define avformat_close_input(x) av_close_input_file(*(x))
+#endif
+
 #ifndef FFMPEG_HAVE_AVIO
 #define AVIO_FLAG_WRITE URL_WRONLY
 #define avio_open url_fopen
diff -Naur blender-2.63a.orig/source/blender/blenkernel/intern/writeffmpeg.c blender-2.63a/source/blender/blenkernel/intern/writeffmpeg.c
--- blender-2.63a.orig/source/blender/blenkernel/intern/writeffmpeg.c	2012-05-10 11:50:20.000000000 -0300
+++ blender-2.63a/source/blender/blenkernel/intern/writeffmpeg.c	2012-07-10 18:27:00.213753426 -0300
@@ -36,6 +36,7 @@
 #include <libavformat/avformat.h>
 #include <libavcodec/avcodec.h>
 #include <libavutil/rational.h>
+#include <libavutil/samplefmt.h>
 #include <libswscale/swscale.h>
 #include <libavcodec/opt.h>
 
@@ -612,7 +613,7 @@
 
 	c->sample_rate = rd->ffcodecdata.audio_mixrate;
 	c->bit_rate = ffmpeg_audio_bitrate*1000;
-	c->sample_fmt = SAMPLE_FMT_S16;
+	c->sample_fmt = AV_SAMPLE_FMT_S16;
 	c->channels = rd->ffcodecdata.audio_channels;
 	codec = avcodec_find_encoder(c->codec_id);
 	if (!codec) {
@@ -654,11 +655,21 @@
 }
 /* essential functions -- start, append, end */
 
+static void ffmpeg_dict_set_int(AVDictionary **dict, const char *key, int value)
+{
+	char buffer[32];
+
+	BLI_snprintf(buffer, sizeof(buffer), "%d", value);
+
+	av_dict_set(dict, key, buffer, 0);
+}
+
 static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, ReportList *reports)
 {
 	/* Handle to the output file */
 	AVFormatContext* of;
 	AVOutputFormat* fmt;
+	AVDictionary *opts = NULL;
 	char name[256];
 	const char ** exts;
 
@@ -704,13 +715,14 @@
 	of->oformat = fmt;
 	of->packet_size= rd->ffcodecdata.mux_packet_size;
 	if (ffmpeg_audio_codec != CODEC_ID_NONE) {
-		of->mux_rate = rd->ffcodecdata.mux_rate;
+		ffmpeg_dict_set_int(&opts, "muxrate", rd->ffcodecdata.mux_rate);
 	}
 	else {
-		of->mux_rate = 0;
+		av_dict_set(&opts, "muxrate", "0", 0);
 	}
 
-	of->preload = (int)(0.5*AV_TIME_BASE);
+	ffmpeg_dict_set_int(&opts, "preload", (int)(0.5*AV_TIME_BASE));
+
 	of->max_delay = (int)(0.7*AV_TIME_BASE);
 
 	fmt->audio_codec = ffmpeg_audio_codec;
@@ -773,6 +785,7 @@
 		fmt->audio_codec = CODEC_ID_PCM_S16LE;
 		if (ffmpeg_audio_codec != CODEC_ID_NONE && rd->ffcodecdata.audio_mixrate != 48000 && rd->ffcodecdata.audio_channels != 2) {
 			BKE_report(reports, RPT_ERROR, "FFMPEG only supports 48khz / stereo audio for DV!");
+			av_dict_free(&opts);
 			return 0;
 		}
 	}
@@ -782,6 +795,7 @@
 		printf("alloc video stream %p\n", video_stream);
 		if (!video_stream) {
 			BKE_report(reports, RPT_ERROR, "Error initializing video stream.");
+			av_dict_free(&opts);
 			return 0;
 		}
 	}
@@ -790,27 +804,27 @@
 		audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of);
 		if (!audio_stream) {
 			BKE_report(reports, RPT_ERROR, "Error initializing audio stream.");
+			av_dict_free(&opts);
 			return 0;
 		}
 	}
-	if (av_set_parameters(of, NULL) < 0) {
-		BKE_report(reports, RPT_ERROR, "Error setting output parameters.");
-		return 0;
-	}
 	if (!(fmt->flags & AVFMT_NOFILE)) {
 		if (avio_open(&of->pb, name, AVIO_FLAG_WRITE) < 0) {
 			BKE_report(reports, RPT_ERROR, "Could not open file for writing.");
+			av_dict_free(&opts);
 			return 0;
 		}
 	}
 
-	if (av_write_header(of) < 0) {
+	if (avformat_write_header(of, NULL) < 0) {
 		BKE_report(reports, RPT_ERROR, "Could not initialize streams. Probably unsupported codec combination.");
+		av_dict_free(&opts);
 		return 0;
 	}
 
 	outfile = of;
 	av_dump_format(of, 0, name, 1);
+	av_dict_free(&opts);
 
 	return 1;
 }
diff -Naur blender-2.63a.orig/source/blender/imbuf/intern/anim_movie.c blender-2.63a/source/blender/imbuf/intern/anim_movie.c
--- blender-2.63a.orig/source/blender/imbuf/intern/anim_movie.c	2012-05-10 11:50:59.000000000 -0300
+++ blender-2.63a/source/blender/imbuf/intern/anim_movie.c	2012-07-10 18:30:19.413743294 -0300
@@ -436,7 +436,7 @@
 	int            i, videoStream;
 
 	AVCodec *pCodec;
-	AVFormatContext *pFormatCtx;
+	AVFormatContext *pFormatCtx = NULL;
 	AVCodecContext *pCodecCtx;
 	int frs_num;
 	double frs_den;
@@ -455,7 +455,7 @@
 
 	do_init_ffmpeg();
 
-	if (av_open_input_file(&pFormatCtx, anim->name, NULL, 0, NULL)!=0) {
+	if (avformat_open_input(&pFormatCtx, anim->name, NULL, NULL)!=0) {
 		return -1;
 	}
 
@@ -990,7 +990,8 @@
 				ret = av_seek_frame(anim->pFormatCtx, 
 						    -1,
 						    pos, AVSEEK_FLAG_BYTE);
-				av_update_cur_dts(anim->pFormatCtx, v_st, dts);
+				// XXX: need double verification
+				// av_update_cur_dts(anim->pFormatCtx, v_st, dts);
 			}
 			else {
 				av_log(anim->pFormatCtx, AV_LOG_DEBUG, 
diff -Naur blender-2.63a.orig/source/blender/imbuf/intern/indexer.c blender-2.63a/source/blender/imbuf/intern/indexer.c
--- blender-2.63a.orig/source/blender/imbuf/intern/indexer.c	2012-05-10 11:50:59.000000000 -0300
+++ blender-2.63a/source/blender/imbuf/intern/indexer.c	2012-07-10 18:38:25.737051891 -0300
@@ -533,13 +533,6 @@
 		rv->c->flags |= CODEC_FLAG_GLOBAL_HEADER;
 	}
 
-	if (av_set_parameters(rv->of, NULL) < 0) {
-		fprintf(stderr, "Couldn't set output parameters? "
-			"Proxy not built!\n");
-		av_free(rv->of);
-		return 0;
-	}
-
 	if (avio_open(&rv->of->pb, fname, AVIO_FLAG_WRITE) < 0) {
 		fprintf(stderr, "Couldn't open outputfile! "
 			"Proxy not built!\n");
@@ -576,7 +569,12 @@
 			NULL, NULL, NULL);
 	}
 
-	av_write_header(rv->of);
+	if (avformat_write_header(rv->of, NULL) < 0) {
+		fprintf(stderr, "Couldn't set output parameters? "
+		        "Proxy not built!\n");
+		av_free(rv->of);
+		return 0;
+	}
 
 	return rv;
 }
@@ -739,7 +737,7 @@
 	memset(context->proxy_ctx, 0, sizeof(context->proxy_ctx));
 	memset(context->indexer, 0, sizeof(context->indexer));
 
-	if (av_open_input_file(&context->iFormatCtx, anim->name, NULL, 0, NULL) != 0) {
+	if (avformat_open_input(&context->iFormatCtx, anim->name, NULL, NULL) != 0) {
 		MEM_freeN(context);
 		return NULL;
 	}
diff -Naur blender-2.63a.orig/source/blender/imbuf/intern/util.c blender-2.63a/source/blender/imbuf/intern/util.c
--- blender-2.63a.orig/source/blender/imbuf/intern/util.c	2012-05-10 11:50:59.000000000 -0300
+++ blender-2.63a/source/blender/imbuf/intern/util.c	2012-07-10 18:40:49.950377886 -0300
@@ -243,7 +243,7 @@
 
 static int isffmpeg (const char *filename)
 {
-	AVFormatContext *pFormatCtx;
+	AVFormatContext *pFormatCtx = NULL;
 	unsigned int i;
 	int videoStream;
 	AVCodec *pCodec;
@@ -261,7 +261,7 @@
 		BLI_testextensie(filename, ".cin") ||
 		BLI_testextensie(filename, ".wav")) return 0;
 
-	if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) {
+	if (avformat_open_input(&pFormatCtx, filename, NULL, NULL)!=0) {
 		if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_open_input_file failed\n");
 		return 0;
 	}
diff -Naur blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.cpp blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.cpp
--- blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.cpp	2012-05-10 11:48:50.000000000 -0300
+++ blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.cpp	2012-07-10 18:56:03.696998071 -0300
@@ -162,14 +162,14 @@
 }
 
 
-int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AVFormatParameters *formatParams)
+int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AVDictionary **formatParams)
 {
-	AVFormatContext *formatCtx;
+	AVFormatContext *formatCtx = NULL;
 	int				i, videoStream;
 	AVCodec			*codec;
 	AVCodecContext	*codecCtx;
 
-	if (av_open_input_file(&formatCtx, filename, inputFormat, 0, formatParams)!=0)
+	if (avformat_open_input(&formatCtx, filename, inputFormat, formatParams)!=0)
 		return -1;
 
 	if (av_find_stream_info(formatCtx)<0) 
@@ -545,11 +545,7 @@
 		// but it is really not desirable to seek on http file, so force streaming.
 		// It would be good to find this information from the context but there are no simple indication
 		!strncmp(filename, "http://", 7) ||
-#ifdef FFMPEG_PB_IS_POINTER
-		(m_formatCtx->pb && m_formatCtx->pb->is_streamed)
-#else
-		m_formatCtx->pb.is_streamed
-#endif
+		(m_formatCtx->pb && !m_formatCtx->pb->seekable)
 		)
 	{
 		// the file is in fact a streaming source, treat as cam to prevent seeking
@@ -586,13 +582,11 @@
 {
 	// open camera source
 	AVInputFormat		*inputFormat;
-	AVFormatParameters	formatParams;
-	AVRational			frameRate;
+	AVDictionary		*formatParams = NULL;
 	char				*p, filename[28], rateStr[20];
 
 	do_init_ffmpeg();
 
-	memset(&formatParams, 0, sizeof(formatParams));
 #ifdef WIN32
 	// video capture on windows only through Video For Windows driver
 	inputFormat = av_find_input_format("vfwcap");
@@ -622,7 +616,13 @@
 		sprintf(filename, "/dev/dv1394/%d", camIdx);
 	} else 
 	{
-		inputFormat = av_find_input_format("video4linux");
+		const char *formats[] = {"video4linux2,v4l2", "video4linux2", "video4linux"};
+		int i, formatsCount = sizeof(formats) / sizeof(char*);
+		for (i = 0; i < formatsCount; i++) {
+			inputFormat = av_find_input_format(formats[i]);
+			if (inputFormat)
+				break;
+		}
 		sprintf(filename, "/dev/video%d", camIdx);
 	}
 	if (!inputFormat)
@@ -636,20 +636,22 @@
 		if ((p = strchr(filename, ':')) != 0)
 			*p = 0;
 	}
-	if (file && (p = strchr(file, ':')) != NULL)
-		formatParams.standard = p+1;
+	if (file && (p = strchr(file, ':')) != NULL) {
+		av_dict_set(&formatParams, "standard", p+1, 0);
+	}
 #endif
 	//frame rate
 	if (m_captRate <= 0.f)
 		m_captRate = defFrameRate;
 	sprintf(rateStr, "%f", m_captRate);
-	av_parse_video_rate(&frameRate, rateStr);
-	// populate format parameters
-	// need to specify the time base = inverse of rate
-	formatParams.time_base.num = frameRate.den;
-	formatParams.time_base.den = frameRate.num;
-	formatParams.width = m_captWidth;
-	formatParams.height = m_captHeight;
+
+	av_dict_set(&formatParams, "framerate", rateStr, 0);
+
+	if (m_captWidth > 0 && m_captHeight > 0) {
+		char video_size[64];
+		BLI_snprintf(video_size, sizeof(video_size), "%dx%d", m_captWidth, m_captHeight);
+		av_dict_set(&formatParams, "video_size", video_size, 0);
+	}
 
 	if (openStream(filename, inputFormat, &formatParams) != 0)
 		return;
@@ -664,6 +666,8 @@
 		// no need to thread if the system has a single core
 		m_isThreaded =  true;
 	}
+
+	av_dict_free(&formatParams);
 }
 
 // play video
diff -Naur blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.h blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.h
--- blender-2.63a.orig/source/gameengine/VideoTexture/VideoFFmpeg.h	2012-05-10 11:48:50.000000000 -0300
+++ blender-2.63a/source/gameengine/VideoTexture/VideoFFmpeg.h	2012-07-10 18:57:21.710327435 -0300
@@ -46,10 +46,6 @@
 #  define FFMPEG_CODEC_IS_POINTER 1
 #endif
 
-#if LIBAVFORMAT_VERSION_INT >= (52 << 16)
-#  define FFMPEG_PB_IS_POINTER 1
-#endif
-
 #ifdef FFMPEG_CODEC_IS_POINTER
 static inline AVCodecContext* get_codec_from_stream(AVStream* stream)
 {
@@ -172,7 +168,7 @@
 	double actFrameRate (void) { return m_frameRate * m_baseFrameRate; }
 
 	/// common function to video file and capture
-	int openStream(const char *filename, AVInputFormat *inputFormat, AVFormatParameters *formatParams);
+	int openStream(const char *filename, AVInputFormat *inputFormat, AVDictionary **formatParams);
 
 	/// check if a frame is available and load it in pFrame, return true if a frame could be retrieved
 	AVFrame* grabFrame(long frame);