[SCM] gpac/master: Patch and build against libav10

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sat Feb 22 18:16:25 UTC 2014


The following commit has been merged in the master branch:
commit e5147108733cc6d8bc23a2de48a733f707b464d3
Author: Reinhard Tartler <siretart at tauware.de>
Date:   Sat Feb 22 18:00:32 2014 +0000

    Patch and build against libav10

diff --git a/debian/control b/debian/control
index cdefcfb..6bc4653 100644
--- a/debian/control
+++ b/debian/control
@@ -11,8 +11,10 @@ Build-Depends:
  freeglut3-dev,
  liba52-0.7.4-dev,
  libasound2-dev,
- libavcodec-dev (>= 6:9),
- libavformat-dev (>= 6:9),
+ libavcodec-dev (>= 6:10~),
+ libavdevice-dev (>= 6:10~),
+ libavformat-dev (>= 6:10~),
+ libavutil-dev (>= 6:10~),
  libfaad-dev,
  libfreenect-dev,
  libfreetype6-dev,
@@ -24,7 +26,7 @@ Build-Depends:
  libpng-dev,
  libpulse-dev,
  libsdl1.2-dev,
- libswscale-dev (>= 6:9),
+ libswscale-dev (>= 6:10~),
  libtheora-dev,
  libusb-1.0-0-dev,
  libvorbis-dev,
diff --git a/debian/patches/libav10.patch b/debian/patches/libav10.patch
new file mode 100644
index 0000000..8722980
--- /dev/null
+++ b/debian/patches/libav10.patch
@@ -0,0 +1,308 @@
+Author: Reinhard Tartler <siretart at tauware.de>
+Description: Allow compilation against libav10
+
+--- a/applications/dashcast/video_decoder.c
++++ b/applications/dashcast/video_decoder.c
+@@ -338,7 +338,7 @@ int dc_video_decoder_read(VideoInputFile
+ 				//But if the input is raw and there is no need to decode then
+ 				// the packet is directly passed for decoded frame. We must wait until rescale is done before freeing it
+ 
+-				if (codec_ctx->codec->id == CODEC_ID_RAWVIDEO) {
++				if (codec_ctx->codec->id == AV_CODEC_ID_RAWVIDEO) {
+ 					video_data_node->nb_raw_frames_ref = video_input_file->nb_consumers;
+ 
+ 					video_data_node->raw_packet = packet;
+--- a/applications/dashcast/video_encoder.c
++++ b/applications/dashcast/video_encoder.c
+@@ -68,9 +68,9 @@ int dc_video_encoder_open(VideoOutputFil
+ 	video_output_file->vbuf = (uint8_t *) av_malloc(video_output_file->vbuf_size);
+ 
+ //	video_output_file->codec = avcodec_find_encoder_by_name("libx264"/*video_data_conf->codec*/);
+-	video_output_file->codec = avcodec_find_encoder(CODEC_ID_H264);
++	video_output_file->codec = avcodec_find_encoder(AV_CODEC_ID_H264);
+ 	if (video_output_file->codec == NULL) {
+-		GF_LOG(GF_LOG_ERROR, GF_LOG_DASH, ("Output video codec %d not found\n", CODEC_ID_H264));
++		GF_LOG(GF_LOG_ERROR, GF_LOG_DASH, ("Output video codec %d not found\n", AV_CODEC_ID_H264));
+ 		return -1;
+ 	}
+ 
+@@ -216,15 +216,9 @@ int dc_video_encoder_encode(VideoOutputF
+ 		pkt.data = video_output_file->vbuf;
+ 		pkt.size = video_output_file->vbuf_size;
+ 		pkt.pts = pkt.dts = video_data_node->vframe->pkt_dts = video_data_node->vframe->pkt_pts = video_data_node->vframe->pts;
+-#ifdef GPAC_USE_LIBAV
+-		video_output_file->encoded_frame_size = avcodec_encode_video(video_codec_ctx, video_output_file->vbuf, video_output_file->vbuf_size, video_data_node->vframe);
+-		got_packet = video_output_file->encoded_frame_size>=0 ? 1 : 0;
+-#else
+ 		video_output_file->encoded_frame_size = avcodec_encode_video2(video_codec_ctx, &pkt, video_data_node->vframe, &got_packet);
+-		//this is not true with libav !
+ 		if (video_output_file->encoded_frame_size >= 0)
+ 			video_output_file->encoded_frame_size = pkt.size;
+-#endif
+ 		if (video_output_file->encoded_frame_size >= 0) {
+ 			if (got_packet) {
+ 				video_codec_ctx->coded_frame->pts = video_codec_ctx->coded_frame->pkt_pts = pkt.pts;
+--- a/modules/ffmpeg_in/ffmpeg_decode.c
++++ b/modules/ffmpeg_in/ffmpeg_decode.c
+@@ -101,7 +101,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);
+@@ -236,10 +236,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:
+@@ -253,14 +253,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) {
+@@ -269,12 +269,12 @@ 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;
+ 			}
+ 		}
+ 		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);
+ 	}
+@@ -357,8 +357,8 @@ static GF_Err FFDEC_AttachStream(GF_Base
+ 
+ 	}
+ #endif //HAS_HEVC
+-	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((*ctx)->extradata, "BottomUp")) ffd->flipped = 1;
+ 	} else {
+@@ -370,7 +370,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)*/
+@@ -384,17 +384,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:
+ 			*frame = avcodec_alloc_frame();
+ #ifdef USE_AVCODEC2
+ 			{
+@@ -752,7 +752,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;
+@@ -849,7 +849,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;
+@@ -1132,9 +1132,9 @@ static u32 FFDEC_CanHandleStream(GF_Base
+ 	}
+ 	else if (StreamType==GF_STREAM_AUDIO) {
+ 		/*std MPEG-2 audio*/
+-		if ((ffd->oti==GPAC_OTI_AUDIO_MPEG2_PART3) || (ffd->oti==GPAC_OTI_AUDIO_MPEG1)) codec_id = CODEC_ID_MP2;
++		if ((ffd->oti==GPAC_OTI_AUDIO_MPEG2_PART3) || (ffd->oti==GPAC_OTI_AUDIO_MPEG1)) codec_id = AV_CODEC_ID_MP2;
+ 		/*std AC3 audio*/
+-		//if (ffd->oti==0xA5) codec_id = CODEC_ID_AC3;
++		//if (ffd->oti==0xA5) codec_id = AV_CODEC_ID_AC3;
+ 	}
+ 
+ 	/*std MPEG-4 visual*/
+@@ -1171,10 +1171,10 @@ 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; break;
++		case GPAC_OTI_VIDEO_MPEG4_PART2: 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; break;
++			codec_id = AV_CODEC_ID_H264; break;
+ #ifdef HAS_HEVC
+         case GPAC_OTI_VIDEO_HEVC:
+             codec_id = AV_CODEC_ID_HEVC; break;
+@@ -1188,10 +1188,10 @@ 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; break;
++			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) 
+--- a/modules/ffmpeg_in/ffmpeg_demux.c
++++ b/modules/ffmpeg_in/ffmpeg_demux.c
+@@ -54,7 +54,7 @@
+ #endif /* AVERROR_NOFMT */
+ 
+ 
+-#if (LIBAVFORMAT_VERSION_MAJOR >= 54) && (LIBAVFORMAT_VERSION_MINOR >= 20)
++#if ((LIBAVFORMAT_VERSION_MAJOR >= 54) && (LIBAVFORMAT_VERSION_MINOR >= 20)) || (LIBAVFORMAT_VERSION_MAJOR >= 55)
+ 
+ #define av_find_stream_info(__c)	avformat_find_stream_info(__c, NULL)
+ #ifndef FF_API_FORMAT_PARAMETERS
+@@ -353,7 +353,7 @@ static Bool FFD_CanHandleURL(GF_InputSer
+ 	}
+ 
+ exit:
+-    if (ctx) av_close_input_file(ctx);
++    if (ctx) avformat_close_input(&ctx);
+ 	return ret;
+ }
+ 
+@@ -372,13 +372,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;
+@@ -413,25 +413,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:
+@@ -629,11 +629,7 @@ static GF_Err FFD_ConnectService(GF_Inpu
+ 			}
+ 			/*setup downloader*/
+ 			av_in->flags |= AVFMT_NOFILE;
+-#if FF_API_FORMAT_PARAMETERS /*commit ffmpeg 603b8bc2a109978c8499b06d2556f1433306eca7*/
+ 			res = avformat_open_input(&ffd->ctx, szName, av_in, NULL);
+-#else
+-			res = av_open_input_stream(&ffd->ctx, &ffd->io, szName, av_in, NULL);
+-#endif
+ 		}
+ 	} else {
+ 		res = open_file(&ffd->ctx, szName, av_in);
+@@ -712,7 +708,7 @@ static GF_Err FFD_ConnectService(GF_Inpu
+ 
+ 		ffd->seekable = (av_seek_frame(ffd->ctx, -1, 0, AVSEEK_FLAG_BACKWARD)<0) ? 0 : 1;
+ 		if (!ffd->seekable) {
+-			av_close_input_file(ffd->ctx);
++			avformat_close_input(&ffd->ctx);
+ 			ffd->ctx = NULL;
+ 			open_file(&ffd->ctx, szName, av_in);
+ 			av_find_stream_info(ffd->ctx);
+@@ -727,7 +723,7 @@ static GF_Err FFD_ConnectService(GF_Inpu
+ 
+ err_exit:
+ 	GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[FFMPEG] Error opening file %s: %s\n", url, gf_error_to_string(e)));
+-    if (ffd->ctx) av_close_input_file(ffd->ctx);
++    if (ffd->ctx) avformat_close_input(&ffd->ctx);
+ 	ffd->ctx = NULL;
+ 	gf_term_on_connect(serv, NULL, e);
+ 	return GF_OK;
+@@ -781,7 +777,7 @@ static GF_Err FFD_CloseService(GF_InputS
+ 
+ 	ffd->is_running = 0;
+ 
+-	if (ffd->ctx) av_close_input_file(ffd->ctx);
++	if (ffd->ctx) avformat_close_input(&ffd->ctx);
+ 	ffd->ctx = NULL;
+ 	ffd->audio_ch = ffd->video_ch = NULL;
+ 	ffd->audio_run = ffd->video_run = 0;
diff --git a/debian/patches/series b/debian/patches/series
index 5f3c756..b452163 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
 mp4box-manpage-fix.patch
 gcc-optflags.patch
+libav10.patch
diff --git a/debian/rules b/debian/rules
index d3386b4..20e16ef 100755
--- a/debian/rules
+++ b/debian/rules
@@ -23,6 +23,8 @@ override_dh_auto_configure:
 	    --disable-ssl \
 	    $(DEB_EXTRA_CONFIGURE_FLAGS)
 	echo "#define GPAC_SVN_REVISION	\"$(GPAC_SVN_REVISION)\"" > include/gpac/revision.h
+	# workaround broken libav detection
+	sed -i 's,CONFIG_LIBAV=no,CONFIG_LIBAV=yes,' config.mak
 
 override_dh_auto_install:
 	$(MAKE) install DESTDIR=$(CURDIR)/debian/tmp

-- 
gpac packaging



More information about the pkg-multimedia-commits mailing list