Fix linphone compile with newer ffmpeg versions, downloaded from
https://github.com/dankamongmen/mediastreamer2/commit/4f438eb8e132a3119284be771e0daad143597ebd

Fixes
http://autobuild.buildroot.net/results/b72/b72b1f6287986af3d686cc3c8b9c1b3fd9419d29/

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>


From 4f438eb8e132a3119284be771e0daad143597ebd Mon Sep 17 00:00:00 2001
From: nick black <nick.black@sprezzatech.com>
Date: Mon, 28 Jan 2013 23:54:17 -0500
Subject: [PATCH] adapt to new libav API

---
 src/utils/ffmpeg-priv.h       | 1 +
 src/videofilters/h264dec.c    | 6 +++---
 src/videofilters/jpegwriter.c | 6 +++---
 src/videofilters/nowebcam.c   | 6 +++---
 src/videofilters/videodec.c   | 8 ++++----
 src/videofilters/videoenc.c   | 6 +++---
 6 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/utils/ffmpeg-priv.h b/src/utils/ffmpeg-priv.h
index 0eab098..a405c05 100644
--- a/src/utils/ffmpeg-priv.h
+++ b/src/utils/ffmpeg-priv.h
@@ -35,6 +35,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 /* new layout */
 # include <libavcodec/avcodec.h>
 # include <libavutil/avutil.h>
+# include <libavutil/mem.h>
 #else
 /* old layout */
 # include <ffmpeg/avcodec.h>
diff --git a/src/videofilters/h264dec.c b/src/videofilters/h264dec.c
index 5229b5e..7059634 100644
--- a/src/videofilters/h264dec.c
+++ b/src/videofilters/h264dec.c
@@ -58,10 +58,10 @@ static void dec_open(DecData *d){
 	int error;
 	codec=avcodec_find_decoder(CODEC_ID_H264);
 	if (codec==NULL) ms_fatal("Could not find H264 decoder in ffmpeg.");
-	avcodec_get_context_defaults(&d->av_context);
-	error=avcodec_open(&d->av_context,codec);
+	avcodec_get_context_defaults3(&d->av_context, codec);
+	error=avcodec_open2(&d->av_context,codec, NULL);
 	if (error!=0){
-		ms_fatal("avcodec_open() failed.");
+		ms_fatal("avcodec_open2() failed.");
 	}
 }
 
diff --git a/src/videofilters/jpegwriter.c b/src/videofilters/jpegwriter.c
index cca79c5..daf3cdb 100644
--- a/src/videofilters/jpegwriter.c
+++ b/src/videofilters/jpegwriter.c
@@ -90,7 +90,7 @@ static void jpg_process(MSFilter *f){
 			mblk_t *jpegm;
 			struct SwsContext *sws_ctx;
 			
-			AVCodecContext *avctx=avcodec_alloc_context();
+			AVCodecContext *avctx=avcodec_alloc_context3(NULL);
 			
 			avctx->width=yuvbuf.w;
 			avctx->height=yuvbuf.h;
@@ -98,9 +98,9 @@ static void jpg_process(MSFilter *f){
 			avctx->time_base.den =1;
 			avctx->pix_fmt=PIX_FMT_YUVJ420P;
 
-			error=avcodec_open(avctx,s->codec);
+			error=avcodec_open2(avctx,s->codec,NULL);
 			if (error!=0) {
-				ms_error("avcodec_open() failed: %i",error);
+				ms_error("avcodec_open2() failed: %i",error);
 				cleanup(s,NULL);
 				av_free(avctx);
 				return;
diff --git a/src/videofilters/nowebcam.c b/src/videofilters/nowebcam.c
index f1c10de..b45f89f 100644
--- a/src/videofilters/nowebcam.c
+++ b/src/videofilters/nowebcam.c
@@ -68,9 +68,9 @@ static mblk_t *jpeg2yuv(uint8_t *jpgbuf, int bufsize, MSVideoSize *reqsize){
 		return NULL;
 	}
 
-	avcodec_get_context_defaults(&av_context);
-	if (avcodec_open(&av_context,codec)<0){
-		ms_error("jpeg2yuv: avcodec_open failed");
+	avcodec_get_context_defaults3(&av_context,NULL);
+	if (avcodec_open2(&av_context,codec,NULL)<0){
+		ms_error("jpeg2yuv: avcodec_open2 failed");
 		return NULL;
 	}
 	av_init_packet(&pkt);
diff --git a/src/videofilters/videodec.c b/src/videofilters/videodec.c
index 9807214..2f1b452 100644
--- a/src/videofilters/videodec.c
+++ b/src/videofilters/videodec.c
@@ -53,7 +53,7 @@ static void dec_init(MSFilter *f, enum CodecID cid){
 	DecState *s=(DecState *)ms_new0(DecState,1);
 	ms_ffmpeg_check_init();
 	
-	avcodec_get_context_defaults(&s->av_context);
+	avcodec_get_context_defaults3(&s->av_context,NULL);
 	s->av_codec=NULL;
 	s->codec=cid;
 	s->input=NULL;
@@ -135,7 +135,7 @@ static void dec_preprocess(MSFilter *f){
 	if (s->av_context.codec==NULL){
 		/* we must know picture size before initializing snow decoder*/
 		if (s->codec!=CODEC_ID_SNOW){
-			error=avcodec_open(&s->av_context, s->av_codec);
+			error=avcodec_open2(&s->av_context, s->av_codec, NULL);
 			if (error!=0) ms_error("avcodec_open() failed: %i",error);
 			if (s->codec==CODEC_ID_MPEG4 && s->dci_size>0){
 				s->av_context.extradata=s->dci;
@@ -225,8 +225,8 @@ static mblk_t * parse_snow_header(DecState *s,mblk_t *inm){
 			int error;
 			s->av_context.width=h>>16;
 			s->av_context.height=h&0xffff;
-			error=avcodec_open(&s->av_context, s->av_codec);
-			if (error!=0) ms_error("avcodec_open() failed for snow: %i",error);
+			error=avcodec_open2(&s->av_context, s->av_codec, NULL);
+			if (error!=0) ms_error("avcodec_open2() failed for snow: %i",error);
 			else {
 				s->snow_initialized=TRUE;
 				ms_message("Snow decoder initialized,size=%ix%i",
diff --git a/src/videofilters/videoenc.c b/src/videofilters/videoenc.c
index da35592..4101772 100644
--- a/src/videofilters/videoenc.c
+++ b/src/videofilters/videoenc.c
@@ -242,7 +242,7 @@ static void prepare(EncState *s){
 	AVCodecContext *c=&s->av_context;
 	const int max_br_vbv=128000;
 
-	avcodec_get_context_defaults(c);
+	avcodec_get_context_defaults3(c,NULL);
 	if (s->codec==CODEC_ID_MJPEG)
 	{
 		ms_message("Codec bitrate set to %i",c->bit_rate);
@@ -348,9 +348,9 @@ static void enc_preprocess(MSFilter *f){
 		ms_error("could not find encoder for codec id %i",s->codec);
 		return;
 	}
-	error=avcodec_open(&s->av_context, s->av_codec);
+	error=avcodec_open2(&s->av_context, s->av_codec, NULL);
 	if (error!=0) {
-		ms_error("avcodec_open() failed: %i",error);
+		ms_error("avcodec_open2() failed: %i",error);
 		return;
 	}
 	video_starter_init(&s->starter);
-- 
2.0.3

