Index: gpac-0.5.2/modules/ffmpeg_in/ffmpeg_decode.c
===================================================================
--- gpac-0.5.2.orig/modules/ffmpeg_in/ffmpeg_decode.c
+++ gpac-0.5.2/modules/ffmpeg_in/ffmpeg_decode.c
@@ -102,7 +102,7 @@ static void FFDEC_LoadDSI(FFDec *ffd, GF
 	}
 
 	switch (codec->id) {
-	case CODEC_ID_SVQ3:
+	case AV_CODEC_ID_SVQ3:
 	{
 		u32 at_type, size;
 		size = gf_bs_read_u32(bs);
@@ -240,10 +240,10 @@ static GF_Err FFDEC_AttachStream(GF_Base
 			(*ctx)->codec_type = AVMEDIA_TYPE_VIDEO;
 			switch (ffd->oti) {
 			case GPAC_OTI_VIDEO_MPEG4_PART2:
-				codec_id = CODEC_ID_MPEG4;
+				codec_id = AV_CODEC_ID_MPEG4;
 				break;
 			case GPAC_OTI_VIDEO_AVC:
-				codec_id = CODEC_ID_H264;
+				codec_id = AV_CODEC_ID_H264;
 				break;
 #ifdef HAS_HEVC
 			case GPAC_OTI_VIDEO_HEVC:
@@ -257,14 +257,14 @@ static GF_Err FFDEC_AttachStream(GF_Base
 			case GPAC_OTI_VIDEO_MPEG2_SPATIAL:
 			case GPAC_OTI_VIDEO_MPEG2_HIGH:
 			case GPAC_OTI_VIDEO_MPEG2_422:
-				codec_id = CODEC_ID_MPEG2VIDEO;
+				codec_id = AV_CODEC_ID_MPEG2VIDEO;
 				break;
 			case GPAC_OTI_IMAGE_JPEG:
-				codec_id = CODEC_ID_MJPEG;
+				codec_id = AV_CODEC_ID_MJPEG;
 				ffd->is_image=1;
 				break;
 			case 0xFF:
-				codec_id = CODEC_ID_SVQ3;
+				codec_id = AV_CODEC_ID_SVQ3;
 				break;
 			}
 		} else if (ffd->st==GF_STREAM_AUDIO) {
@@ -273,18 +273,18 @@ static GF_Err FFDEC_AttachStream(GF_Base
 			case GPAC_OTI_AUDIO_MPEG2_PART3:
 			case GPAC_OTI_AUDIO_MPEG1:
 				(*ctx)->frame_size = 1152;
-				codec_id = CODEC_ID_MP2;
+				codec_id = AV_CODEC_ID_MP2;
 				break;
 			case GPAC_OTI_AUDIO_AC3:
-				codec_id = CODEC_ID_AC3;
+				codec_id = AV_CODEC_ID_AC3;
 				break;
 			case GPAC_OTI_AUDIO_EAC3:
-				codec_id = CODEC_ID_EAC3;
+				codec_id = AV_CODEC_ID_EAC3;
 				break;
 			}
 		}
 		else if ((ffd->st==GF_STREAM_ND_SUBPIC) && (ffd->oti==0xe0)) {
-			codec_id = CODEC_ID_DVD_SUBTITLE;
+			codec_id = AV_CODEC_ID_DVD_SUBTITLE;
 		}
 		*codec = avcodec_find_decoder(codec_id);
 	}
@@ -375,8 +375,8 @@ static GF_Err FFDEC_AttachStream(GF_Base
 #endif //HAS_HEVC
 	if (!ffd->output_cb_size) ffd->output_cb_size = 4;
 
-	if (codec_id == CODEC_ID_RAWVIDEO) {
-		(*ctx)->codec_id = CODEC_ID_RAWVIDEO;
+	if (codec_id == AV_CODEC_ID_RAWVIDEO) {
+		(*ctx)->codec_id = AV_CODEC_ID_RAWVIDEO;
 		(*ctx)->pix_fmt = ffd->raw_pix_fmt;
 		if ((*ctx)->extradata && strstr((char *) (*ctx)->extradata, "BottomUp")) ffd->flipped = 1;
 	} else {
@@ -388,7 +388,7 @@ static GF_Err FFDEC_AttachStream(GF_Base
 	}
 	/*setup audio streams*/
 	if (ffd->st==GF_STREAM_AUDIO) {
-		if ((*codec)->id == CODEC_ID_MP2) {
+		if ((*codec)->id == AV_CODEC_ID_MP2) {
 			(*ctx)->frame_size = ((*ctx)->sample_rate > 24000) ? 1152 : 576;
 		}
 		/*may be 0 (cfg not known yet)*/
@@ -408,17 +408,17 @@ static GF_Err FFDEC_AttachStream(GF_Base
 
 	} else {
 		switch ((*codec)->id) {
-		case CODEC_ID_MJPEG:
-		case CODEC_ID_MJPEGB:
-		case CODEC_ID_LJPEG:
+		case AV_CODEC_ID_MJPEG:
+		case AV_CODEC_ID_MJPEGB:
+		case AV_CODEC_ID_LJPEG:
 #if (LIBAVCODEC_VERSION_INT > AV_VERSION_INT(51, 20, 0))
-		case CODEC_ID_GIF:
+		case AV_CODEC_ID_GIF:
 #endif
-		case CODEC_ID_RAWVIDEO:
+		case AV_CODEC_ID_RAWVIDEO:
 			ffd->pix_fmt = GF_PIXEL_RGB_24;
 			break;
 
-		case CODEC_ID_DVD_SUBTITLE:
+		case AV_CODEC_ID_DVD_SUBTITLE:
 #if !defined(FF_API_AVFRAME_LAVC)
 			*frame = avcodec_alloc_frame();
 #else
@@ -843,7 +843,7 @@ redecode:
 	}
 
 
-	if ( ctx->codec_id == CODEC_ID_RAWVIDEO) {
+	if ( ctx->codec_id == AV_CODEC_ID_RAWVIDEO) {
 		if (*outBufferLength != ffd->out_size) {
 			*outBufferLength = ffd->out_size;
 			return GF_BUFFER_TOO_SMALL;
@@ -852,7 +852,7 @@ redecode:
 			*outBufferLength = ffd->out_size;
 			assert(inBufferLength==ffd->out_size);
 
-			if (ffd->raw_pix_fmt==PIX_FMT_BGR24) {
+			if (ffd->raw_pix_fmt==AV_PIX_FMT_BGR24) {
 				s32 i, j;
 				for (j=0; j<ctx->height; j++) {
 					u8 *src = (u8 *) inBuffer + j*3*ctx->width;
@@ -940,7 +940,7 @@ redecode:
 				/*OK we loose the DSI stored in the codec context, but H263 doesn't need any, and if we're
 				here this means the DSI was broken, so no big deal*/
 				avcodec_close(ctx);
-				*codec = avcodec_find_decoder(CODEC_ID_H263);
+				*codec = avcodec_find_decoder(AV_CODEC_ID_H263);
 
 #ifdef USE_AVCTX3
 				if (! (*codec) || (avcodec_open2(ctx, *codec, NULL)<0)) return GF_NON_COMPLIANT_BITSTREAM;
@@ -991,7 +991,7 @@ redecode:
 
 	stride = frame->linesize[0];
 #ifndef NO_10bit
-	if ((ctx->pix_fmt == PIX_FMT_YUV420P10LE) && ffd->output_as_8bit && (frame->linesize[0] >= 2*w) )  {
+	if ((ctx->pix_fmt == AV_PIX_FMT_YUV420P10LE) && ffd->output_as_8bit && (frame->linesize[0] >= 2*w) )  {
 		ffd->conv_to_8bit = 1;
 		stride=w;
 	}
@@ -1000,7 +1000,7 @@ redecode:
 	/*recompute outsize in case on-the-fly change*/
 	if ((w != ctx->width) || (h != ctx->height)
 	        || (ffd->direct_output && (stride != ffd->stride))
-	        || ((ffd->out_pix_fmt==GF_PIXEL_YV12) && (ctx->pix_fmt != PIX_FMT_YUV420P) && !ffd->output_as_8bit )
+	        || ((ffd->out_pix_fmt==GF_PIXEL_YV12) && (ctx->pix_fmt != AV_PIX_FMT_YUV420P) && !ffd->output_as_8bit )
 	        //need to realloc the conversion buffer
 	        || (ffd->conv_to_8bit && !ffd->conv_buffer && ffd->direct_output)
 	   ) {
@@ -1011,7 +1011,7 @@ redecode:
 		}
 #ifndef NO_10bit
 		//this YUV format is handled natively in GPAC
-		else if ((ctx->pix_fmt == PIX_FMT_YUV420P10LE) && !ffd->output_as_8bit) {
+		else if ((ctx->pix_fmt == AV_PIX_FMT_YUV420P10LE) && !ffd->output_as_8bit) {
 			ffd->stride = ffd->direct_output ? frame->linesize[0] : ctx->width*2;
 			outsize = ffd->stride * ctx->height * 3 / 2;
 			ffd->out_pix_fmt = GF_PIXEL_YV12_10;
@@ -1157,23 +1157,20 @@ redecode:
 	if (ffd->out_pix_fmt==GF_PIXEL_RGB_24) {
 		pict.data[0] =  (uint8_t *)outBuffer;
 		pict.linesize[0] = 3*ctx->width;
-		pix_out = PIX_FMT_RGB24;
+		pix_out = AV_PIX_FMT_RGB24;
 	} else {
 		pict.data[0] =  (uint8_t *)outBuffer;
 		pict.data[1] =  (uint8_t *)outBuffer + ffd->stride * ctx->height;
 		pict.data[2] =  (uint8_t *)outBuffer + 5 * ffd->stride * ctx->height / 4;
 		pict.linesize[0] = ffd->stride;
 		pict.linesize[1] = pict.linesize[2] = ffd->stride/2;
-		pix_out = PIX_FMT_YUV420P;
+		pix_out = AV_PIX_FMT_YUV420P;
 #ifndef NO_10bit
 		//this YUV format is handled natively in GPAC
-		if (ctx->pix_fmt==PIX_FMT_YUV420P10LE) {
-			pix_out = PIX_FMT_YUV420P10LE;
+		if (ctx->pix_fmt==AV_PIX_FMT_YUV420P10LE) {
+			pix_out = AV_PIX_FMT_YUV420P10LE;
 		}
 #endif
-		if (!mmlevel && frame->interlaced_frame) {
-			avpicture_deinterlace((AVPicture *) frame, (AVPicture *) frame, ctx->pix_fmt, ctx->width, ctx->height);
-		}
 	}
 	pict.data[3] = 0;
 	pict.linesize[3] = 0;
@@ -1263,13 +1260,13 @@ static u32 FFDEC_CanHandleStream(GF_Base
 		switch (ffd->oti) {
 		case GPAC_OTI_AUDIO_MPEG2_PART3:
 		case GPAC_OTI_AUDIO_MPEG1:
-			codec_id = CODEC_ID_MP2;
+			codec_id = AV_CODEC_ID_MP2;
 			break;
 		case GPAC_OTI_AUDIO_AC3:
-			codec_id = CODEC_ID_AC3;
+			codec_id = AV_CODEC_ID_AC3;
 			break;
 		case GPAC_OTI_AUDIO_EAC3:
-			codec_id = CODEC_ID_EAC3;
+			codec_id = AV_CODEC_ID_EAC3;
 			break;
 		}
 	}
@@ -1309,11 +1306,11 @@ static u32 FFDEC_CanHandleStream(GF_Base
 		switch (ffd->oti) {
 		/*MPEG-4 v1 simple profile*/
 		case GPAC_OTI_VIDEO_MPEG4_PART2:
-			codec_id = CODEC_ID_MPEG4;
+			codec_id = AV_CODEC_ID_MPEG4;
 			break;
 		/*H264 (not std OTI, just the way we use it internally)*/
 		case GPAC_OTI_VIDEO_AVC:
-			codec_id = CODEC_ID_H264;
+			codec_id = AV_CODEC_ID_H264;
 			break;
 #ifdef HAS_HEVC
 		case GPAC_OTI_VIDEO_HEVC:
@@ -1329,11 +1326,11 @@ static u32 FFDEC_CanHandleStream(GF_Base
 		case GPAC_OTI_VIDEO_MPEG2_SPATIAL:
 		case GPAC_OTI_VIDEO_MPEG2_HIGH:
 		case GPAC_OTI_VIDEO_MPEG2_422:
-			codec_id = CODEC_ID_MPEG2VIDEO;
+			codec_id = AV_CODEC_ID_MPEG2VIDEO;
 			break;
 		/*JPEG*/
 		case GPAC_OTI_IMAGE_JPEG:
-			codec_id = CODEC_ID_MJPEG;
+			codec_id = AV_CODEC_ID_MJPEG;
 			/*return maybe supported as FFMPEG JPEG decoder has some issues with many files, so let's use it only if no
 			other dec is available*/
 			if (avcodec_find_decoder(codec_id) != NULL)
Index: gpac-0.5.2/modules/ffmpeg_in/ffmpeg_demux.c
===================================================================
--- gpac-0.5.2.orig/modules/ffmpeg_in/ffmpeg_demux.c
+++ gpac-0.5.2/modules/ffmpeg_in/ffmpeg_demux.c
@@ -333,13 +333,13 @@ static GF_ESD *FFD_GetESDescriptor(FFDem
 		AVCodecContext *dec = ffd->ctx->streams[ffd->audio_st]->codec;
 		esd->slConfig->timestampResolution = ffd->audio_tscale.den;
 		switch (dec->codec_id) {
-		case CODEC_ID_MP2:
+		case AV_CODEC_ID_MP2:
 			esd->decoderConfig->objectTypeIndication = GPAC_OTI_AUDIO_MPEG1;
 			break;
-		case CODEC_ID_MP3:
+		case AV_CODEC_ID_MP3:
 			esd->decoderConfig->objectTypeIndication = GPAC_OTI_AUDIO_MPEG2_PART3;
 			break;
-		case CODEC_ID_AAC:
+		case AV_CODEC_ID_AAC:
 			if (!dec->extradata_size) goto opaque_audio;
 			esd->decoderConfig->objectTypeIndication = GPAC_OTI_AUDIO_AAC_MPEG4;
 			esd->decoderConfig->decoderSpecificInfo->dataLength = dec->extradata_size;
@@ -374,25 +374,25 @@ opaque_audio:
 		AVCodecContext *dec = ffd->ctx->streams[ffd->video_st]->codec;
 		esd->slConfig->timestampResolution = ffd->video_tscale.den;
 		switch (dec->codec_id) {
-		case CODEC_ID_MPEG4:
+		case AV_CODEC_ID_MPEG4:
 			/*there is a bug in fragmentation of raw H264 in ffmpeg, the NALU startcode (0x00000001) is split across
 			two frames - we therefore force internal ffmpeg codec ID to avoid NALU size recompute
 			at the decoder level*/
-//		case CODEC_ID_H264:
+//		case AV_CODEC_ID_H264:
 			/*if dsi not detected force use ffmpeg*/
 			if (!dec->extradata_size) goto opaque_video;
 			/*otherwise use any MPEG-4 Visual*/
-			esd->decoderConfig->objectTypeIndication = (dec->codec_id==CODEC_ID_H264) ? GPAC_OTI_VIDEO_AVC : GPAC_OTI_VIDEO_MPEG4_PART2;
+			esd->decoderConfig->objectTypeIndication = (dec->codec_id==AV_CODEC_ID_H264) ? GPAC_OTI_VIDEO_AVC : GPAC_OTI_VIDEO_MPEG4_PART2;
 			esd->decoderConfig->decoderSpecificInfo->dataLength = dec->extradata_size;
 			esd->decoderConfig->decoderSpecificInfo->data = gf_malloc(sizeof(char)*dec->extradata_size);
 			memcpy(esd->decoderConfig->decoderSpecificInfo->data,
 			       dec->extradata,
 			       sizeof(char)*dec->extradata_size);
 			break;
-		case CODEC_ID_MPEG1VIDEO:
+		case AV_CODEC_ID_MPEG1VIDEO:
 			esd->decoderConfig->objectTypeIndication = GPAC_OTI_VIDEO_MPEG1;
 			break;
-		case CODEC_ID_MPEG2VIDEO:
+		case AV_CODEC_ID_MPEG2VIDEO:
 			esd->decoderConfig->objectTypeIndication = GPAC_OTI_VIDEO_MPEG2_422;
 			break;
 		default:
Index: gpac-0.5.2/modules/Makefile
===================================================================
--- gpac-0.5.2.orig/modules/Makefile
+++ gpac-0.5.2/modules/Makefile
@@ -100,12 +100,10 @@ endif
 
 
 ifneq ($(CONFIG_FFMPEG), no)
-ifneq ($(CONFIG_LIBAV), new) #we don't support libav newest APIs
 ifeq ($(CONFIG_OPENHEVC),no)
 PLUGDIRS+=ffmpeg_in
 endif
 endif
-endif
 
 ifeq ($(CONFIG_OPENHEVC), yes)
 ifeq ($(CONFIG_FFMPEG), no)
--- gpac/applications/dashcast/video_encoder.c.orig	2016-02-17 19:57:23.772138846 +0000
+++ gpac/applications/dashcast/video_encoder.c	2016-02-17 19:57:52.468686697 +0000
@@ -86,7 +86,7 @@
 		video_output_file->codec_ctx->time_base.den = video_data_conf->time_base.den;
 		video_output_file->codec_ctx->time_base.num = video_data_conf->time_base.num * video_data_conf->time_base.den / video_data_conf->framerate;
 	}
-	video_output_file->codec_ctx->pix_fmt = PIX_FMT_YUV420P;
+	video_output_file->codec_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
 	video_output_file->codec_ctx->gop_size = video_data_conf->framerate;
 
 //	video_output_file->codec_ctx->codec_id = video_codec->id;
@@ -96,7 +96,7 @@
 //	video_output_file->codec_ctx->height = video_data_conf->height;
 //	video_output_file->codec_ctx->time_base = (AVRational) {1 ,
 //				video_output_file->video_data_conf->framerate};
-//	video_output_file->codec_ctx->codec->pix_fmt = PIX_FMT_YUV420P;
+//	video_output_file->codec_ctx->codec->pix_fmt = AV_PIX_FMT_YUV420P;
 	video_output_file->codec_ctx->gop_size = video_data_conf->framerate;
 //
 //	av_opt_set(video_output_file->codec_ctx->priv_data, "preset", "ultrafast", 0);
--- gpac/applications/dashcast/video_muxer.c.orig	2016-02-17 20:03:52.017158010 +0000
+++ gpac/applications/dashcast/video_muxer.c	2016-02-17 20:04:03.557099981 +0000
@@ -643,7 +643,7 @@
 
 	video_stream->codec->time_base = video_codec_ctx->time_base;
 
-	video_stream->codec->pix_fmt = PIX_FMT_YUV420P;
+	video_stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
 	video_stream->codec->gop_size = video_codec_ctx->time_base.den; //video_output_file->video_data_conf->framerate;
 
 	av_opt_set(video_stream->codec->priv_data, "preset", "ultrafast", 0);
--- gpac/applications/dashcast/video_scaler.c.orig	2016-02-17 20:07:47.372652006 +0000
+++ gpac/applications/dashcast/video_scaler.c	2016-02-17 20:08:02.545910489 +0000
@@ -125,7 +125,7 @@
 	dc_consumer_init(&video_scaled_data->consumer, video_cb_size, name);
 
 	video_scaled_data->num_producers = max_source;
-	video_scaled_data->out_pix_fmt = PIX_FMT_YUV420P;
+	video_scaled_data->out_pix_fmt = AV_PIX_FMT_YUV420P;
 	GF_SAFE_ALLOC_N(video_scaled_data->vsprop, max_source, VideoScaledProp);
 	memset(video_scaled_data->vsprop, 0, max_source * sizeof(VideoScaledProp));
 
@@ -198,7 +198,7 @@
 		video_scaled_data_node->cropped_frame->width  = video_input_data->vprop[index].width  - video_input_data->vprop[index].crop_x;
 		video_scaled_data_node->cropped_frame->height = video_input_data->vprop[index].height - video_input_data->vprop[index].crop_y;
 #endif
-		if (av_picture_crop((AVPicture*)video_scaled_data_node->cropped_frame, (AVPicture*)video_data_node->vframe, PIX_FMT_YUV420P, video_input_data->vprop[index].crop_y, video_input_data->vprop[index].crop_x) < 0) {
+		if (av_picture_crop((AVPicture*)video_scaled_data_node->cropped_frame, (AVPicture*)video_data_node->vframe, AV_PIX_FMT_YUV420P, video_input_data->vprop[index].crop_y, video_input_data->vprop[index].crop_x) < 0) {
 			GF_LOG(GF_LOG_ERROR, GF_LOG_DASH, ("Video scaler: error while cropping picture.\n"));
 			return -1;
 		}
--- gpac/applications/dashcast/audio_encoder.c.orig	2016-02-17 20:14:56.797231896 +0000
+++ gpac/applications/dashcast/audio_encoder.c	2016-02-17 20:16:23.033486783 +0000
@@ -85,7 +85,7 @@
 	audio_output_file->frame_bytes = audio_output_file->codec_ctx->frame_size * av_get_bytes_per_sample(DC_AUDIO_SAMPLE_FORMAT) * DC_AUDIO_NUM_CHANNELS;
 
 #ifndef FF_API_AVFRAME_LAVC
-	avcodec_get_frame_defaults(audio_output_file->aframe);
+	av_frame_unref(audio_output_file->aframe);
 #else
 	av_frame_unref(audio_output_file->aframe);
 #endif
--- gpac/applications/dashcast/audio_decoder.c.orig	2016-02-17 20:15:09.517171017 +0000
+++ gpac/applications/dashcast/audio_decoder.c	2016-02-17 20:16:23.030153465 +0000
@@ -205,7 +205,7 @@
 			packet.size = 0;
 
 #ifndef FF_API_AVFRAME_LAVC
-			avcodec_get_frame_defaults(audio_input_data->aframe);
+			av_frame_unref(audio_input_data->aframe);
 #else
 			av_frame_unref(audio_input_data->aframe);
 #endif
@@ -240,7 +240,7 @@
 			/* Set audio frame to default */
 
 #ifndef FF_API_AVFRAME_LAVC
-			avcodec_get_frame_defaults(audio_input_data->aframe);
+			av_frame_unref(audio_input_data->aframe);
 #else
 			av_frame_unref(audio_input_data->aframe);
 #endif
--- gpac/applications/dashcast/video_decoder.c.orig	2016-02-17 20:15:23.863769072 +0000
+++ gpac/applications/dashcast/video_decoder.c	2016-02-17 20:16:23.033486783 +0000
@@ -247,7 +247,7 @@
 			/* Flush decoder */
 			memset(&packet, 0, sizeof(AVPacket));
 #ifndef FF_API_AVFRAME_LAVC
-			avcodec_get_frame_defaults(video_data_node->vframe);
+			av_frame_unref(video_data_node->vframe);
 #else
 			av_frame_unref(video_data_node->vframe);
 #endif
@@ -286,7 +286,7 @@
 
 			/* Set video frame to default */
 #ifndef FF_API_AVFRAME_LAVC
-			avcodec_get_frame_defaults(video_data_node->vframe);
+			av_frame_unref(video_data_node->vframe);
 #else
 			av_frame_unref(video_data_node->vframe);
 #endif
--- gpac/modules/ffmpeg_in/ffmpeg_decode.c.orig	2016-02-17 20:21:45.081958730 +0000
+++ gpac/modules/ffmpeg_in/ffmpeg_decode.c	2016-02-17 20:23:37.511418275 +0000
@@ -328,7 +328,7 @@
 			}
 		}
 #if !defined(FF_API_AVFRAME_LAVC)
-		*frame = avcodec_alloc_frame();
+		*frame = av_frame_alloc();
 #else
 		*frame = av_frame_alloc();
 #endif
@@ -399,7 +399,7 @@
 #if defined(USE_AVCTX3)
 
 #if !defined(FF_API_AVFRAME_LAVC)
-		ffd->audio_frame = avcodec_alloc_frame();
+		ffd->audio_frame = av_frame_alloc();
 #else
 		ffd->audio_frame = av_frame_alloc();
 #endif
@@ -420,7 +420,7 @@
 
 		case AV_CODEC_ID_DVD_SUBTITLE:
 #if !defined(FF_API_AVFRAME_LAVC)
-			*frame = avcodec_alloc_frame();
+			*frame = av_frame_alloc();
 #else
 			*frame = av_frame_alloc();
 #endif