[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36934] trunk/blender: == FFMPEG ==

Wolfgang Fähnle wfaehnle at freenet.de
Fri May 27 00:24:09 CEST 2011


Hi, this commit breaks building on opensuse 11.4/64 with scons, system  
ffmpeg is 0.62.

http://www.pasteall.org/21955

Cheers, mib.



Am 26.05.2011, 23:57 Uhr, schrieb Peter Schlaile <peter at schlaile.de>:

> Revision: 36934
>           http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36934
> Author:   schlaile
> Date:     2011-05-26 21:57:02 +0000 (Thu, 26 May 2011)
> Log Message:
> -----------
> == FFMPEG ==
>
> * removed a lot of old cruft code for ancient ffmpeg versions
> * made it compile again against latest ffmpeg / libav GIT
>   (also shouldn't break distro ffmpegs, since those API changes
>   have been introduced over a year ago. If it nevertheless breaks,
>   please send me an email)
>
> Modified Paths:
> --------------
>     trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
>     trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
>     trunk/blender/source/blender/imbuf/intern/anim_movie.c
>     trunk/blender/source/blender/imbuf/intern/util.c
>     trunk/blender/source/blender/makesrna/intern/rna_scene.c
>     trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.cpp
>     trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.h
>
> Modified: trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
> ===================================================================
> ---  
> trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2011-05-26  
> 21:04:01 UTC (rev 36933)
> +++  
> trunk/blender/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp	2011-05-26  
> 21:57:02 UTC (rev 36934)
> @@ -52,6 +52,10 @@
> 	int read_length, data_size;
> +	AVPacket tmp_pkt;
> +	
> +	av_init_packet(&tmp_pkt);
> +
>  	// as long as there is still data in the package
>  	while(audio_pkg_size > 0)
>  	{
> @@ -64,16 +68,15 @@
> 		// read samples from the packet
>  		data_size = buf_size - buf_pos;
> -		/*read_length = avcodec_decode_audio3(m_codecCtx,
> -			(int16_t*)(((data_t*)buffer.getBuffer())+buf_pos),
> -			&data_size,
> -			packet);*/
> -		read_length = avcodec_decode_audio2(m_codecCtx,
> -						(int16_t*)(((data_t*)buffer.getBuffer()) + buf_pos),
> -						&data_size,
> -						audio_pkg_data,
> -						audio_pkg_size);
> +		tmp_pkt.data = audio_pkg_data;
> +		tmp_pkt.size = audio_pkg_size;
> +
> +		read_length = avcodec_decode_audio3(
> +			m_codecCtx,
> +			(int16_t*)(((data_t*)buffer.getBuffer()) + buf_pos),
> +			&data_size, &tmp_pkt);
> +
>  		// read error, next packet!
>  		if(read_length < 0)
>  			break;
> @@ -112,7 +115,7 @@
> 	for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
>  	{
> -		if((m_formatCtx->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO)
> +		if((m_formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
>  			&& (m_stream < 0))
>  		{
>  			m_stream=i;
>
> Modified: trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
> ===================================================================
> ---  
> trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2011-05-26  
> 21:04:01 UTC (rev 36933)
> +++  
> trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2011-05-26  
> 21:57:02 UTC (rev 36934)
> @@ -39,19 +39,6 @@
>  #include <libswscale/swscale.h>
>  #include <libavcodec/opt.h>
> -#if LIBAVFORMAT_VERSION_INT < (49 << 16)
> -#define FFMPEG_OLD_FRAME_RATE 1
> -#else
> -#define FFMPEG_CODEC_IS_POINTER 1
> -#define FFMPEG_CODEC_TIME_BASE  1
> -#endif
> -
> -#if LIBAVFORMAT_VERSION_INT >= (52 << 16)
> -#define OUTFILE_PB (outfile->pb)
> -#else
> -#define OUTFILE_PB (&outfile->pb)
> -#endif
> -
>  #if defined(WIN32) && (!(defined snprintf))
>  #define snprintf _snprintf
>  #endif
> @@ -114,24 +101,12 @@
>  	}
>  }
> -#ifdef FFMPEG_CODEC_IS_POINTER
> -static AVCodecContext* get_codec_from_stream(AVStream* stream)
> -{
> -	return stream->codec;
> -}
> -#else
> -static AVCodecContext* get_codec_from_stream(AVStream* stream)
> -{
> -	return &stream->codec;
> -}
> -#endif
> -
>  static int write_audio_frame(void)
>  {
>  	AVCodecContext* c = NULL;
>  	AVPacket pkt;
> -	c = get_codec_from_stream(audio_stream);
> +	c = audio_stream->codec;
> 	av_init_packet(&pkt);
>  	pkt.size = 0;
> @@ -153,17 +128,15 @@
> 	if(c->coded_frame && c->coded_frame->pts != AV_NOPTS_VALUE)
>  	{
> -#ifdef FFMPEG_CODEC_TIME_BASE
>  		pkt.pts = av_rescale_q(c->coded_frame->pts,
> -					   c->time_base, audio_stream->time_base);
> -#else
> -		pkt.pts = c->coded_frame->pts;
> -#endif
> +				       c->time_base, audio_stream->time_base);
>  		fprintf(stderr, "Audio Frame PTS: %d\n", (int)pkt.pts);
>  	}
> 	pkt.stream_index = audio_stream->index;
> -	pkt.flags |= PKT_FLAG_KEY;
> +
> +	pkt.flags |= AV_PKT_FLAG_KEY;
> +
>  	if (av_interleaved_write_frame(outfile, &pkt) != 0) {
>  		fprintf(stderr, "Error writing audio packet!\n");
>  		return -1;
> @@ -263,10 +236,10 @@
>  {
>  	int outsize = 0;
>  	int ret, success= 1;
> -	AVCodecContext* c = get_codec_from_stream(video_stream);
> -#ifdef FFMPEG_CODEC_TIME_BASE
> +	AVCodecContext* c = video_stream->codec;
> +
>  	frame->pts = rd->cfra - rd->sfra;
> -#endif
> +
>  	if (rd->mode & R_FIELDS) {
>  		frame->top_field_first = ((rd->mode & R_ODDFIELD) != 0);
>  	}
> @@ -278,19 +251,15 @@
>  		av_init_packet(&packet);
> 		if (c->coded_frame->pts != AV_NOPTS_VALUE) {
> -#ifdef FFMPEG_CODEC_TIME_BASE
>  			packet.pts = av_rescale_q(c->coded_frame->pts,
>  						  c->time_base,
>  						  video_stream->time_base);
> -#else
> -			packet.pts = c->coded_frame->pts;
> -#endif
>  			fprintf(stderr, "Video Frame PTS: %d\n", (int)packet.pts);
>  		} else {
>  			fprintf(stderr, "Video Frame PTS: not set\n");
>  		}
>  		if (c->coded_frame->key_frame)
> -			packet.flags |= PKT_FLAG_KEY;
> +			packet.flags |= AV_PKT_FLAG_KEY;
>  		packet.stream_index = video_stream->index;
>  		packet.data = video_buffer;
>  		packet.size = outsize;
> @@ -312,7 +281,7 @@
>  {
>  	uint8_t* rendered_frame;
> -	AVCodecContext* c = get_codec_from_stream(video_stream);
> +	AVCodecContext* c = video_stream->codec;
>  	int width = c->width;
>  	int height = c->height;
>  	AVFrame* rgb_frame;
> @@ -396,7 +365,7 @@
>  	switch(prop->type) {
>  	case IDP_STRING:
>  		fprintf(stderr, "%s.\n", IDP_String(prop));
> -		rv = av_set_string(c, prop->name, IDP_String(prop));
> +		av_set_string3(c, prop->name, IDP_String(prop), 1, &rv);
>  		break;
>  	case IDP_FLOAT:
>  		fprintf(stderr, "%g.\n", IDP_Float(prop));
> @@ -407,7 +376,7 @@
>  		
>  		if (param) {
>  			if (IDP_Int(prop)) {
> -				rv = av_set_string(c, name, param);
> +				av_set_string3(c, name, param, 1, &rv);
>  			} else {
>  				return;
>  			}
> @@ -459,9 +428,9 @@
> 	/* Set up the codec context */
>  	
> -	c = get_codec_from_stream(st);
> +	c = st->codec;
>  	c->codec_id = codec_id;
> -	c->codec_type = CODEC_TYPE_VIDEO;
> +	c->codec_type = AVMEDIA_TYPE_VIDEO;
> 	/* Get some values from the current render settings */
> @@ -469,7 +438,6 @@
>  	c->width = rectx;
>  	c->height = recty;
> -#ifdef FFMPEG_CODEC_TIME_BASE
>  	/* FIXME: Really bad hack (tm) for NTSC support */
>  	if (ffmpeg_type == FFMPEG_DV && rd->frs_sec != 25) {
>  		c->time_base.den = 2997;
> @@ -482,20 +450,6 @@
>  		c->time_base.den = rd->frs_sec * 100000;
>  		c->time_base.num = ((double) rd->frs_sec_base) * 100000;
>  	}
> -#else
> -	/* FIXME: Really bad hack (tm) for NTSC support */
> -	if (ffmpeg_type == FFMPEG_DV && rd->frs_sec != 25) {
> -		c->frame_rate = 2997;
> -		c->frame_rate_base = 100;
> -	} else if ((double) ((int) rd->frs_sec_base) ==
> -		   rd->frs_sec_base) {
> -		c->frame_rate = rd->frs_sec;
> -		c->frame_rate_base = rd->frs_sec_base;
> -	} else {
> -		c->frame_rate = rd->frs_sec * 100000;
> -		c->frame_rate_base = ((double) rd->frs_sec_base)*100000;
> -	}
> -#endif
>  	
>  	c->gop_size = ffmpeg_gop_size;
>  	c->bit_rate = ffmpeg_video_bitrate*1000;
> @@ -519,7 +473,7 @@
>  		c->pix_fmt = PIX_FMT_YUV422P;
>  	}
> -	if (codec_id == CODEC_ID_XVID) {
> +	if (ffmpeg_type == FFMPEG_XVID) {
>  		/* arghhhh ... */
>  		c->pix_fmt = PIX_FMT_YUV420P;
>  		c->codec_tag = (('D'<<24) + ('I'<<16) + ('V'<<8) + 'X');
> @@ -586,9 +540,9 @@
>  	st = av_new_stream(of, 1);
>  	if (!st) return NULL;
> -	c = get_codec_from_stream(st);
> +	c = st->codec;
>  	c->codec_id = codec_id;
> -	c->codec_type = CODEC_TYPE_AUDIO;
> +	c->codec_type = AVMEDIA_TYPE_AUDIO;
> 	c->sample_rate = rd->ffcodecdata.audio_mixrate;
>  	c->bit_rate = ffmpeg_audio_bitrate*1000;
> @@ -666,13 +620,13 @@
>  		BKE_report(reports, RPT_ERROR, "No valid formats found.");
>  		return 0;
>  	}
> -	fmt = guess_format(NULL, exts[0], NULL);
> +	fmt = av_guess_format(NULL, exts[0], NULL);
>  	if (!fmt) {
>  		BKE_report(reports, RPT_ERROR, "No valid formats found.");
>  		return 0;
>  	}
> -	of = av_alloc_format_context();
> +	of = avformat_alloc_context();
>  	if (!of) {
>  		BKE_report(reports, RPT_ERROR, "Error opening output file");
>  		return 0;
> @@ -713,7 +667,7 @@
>  		fmt->video_codec = CODEC_ID_H264;
>  		break;
>  	case FFMPEG_XVID:
> -		fmt->video_codec = CODEC_ID_XVID;
> +		fmt->video_codec = CODEC_ID_MPEG4;
>  		break;
>  	case FFMPEG_FLV:
>  		fmt->video_codec = CODEC_ID_FLV1;
> @@ -772,7 +726,7 @@
>  		return 0;
>  	}
>  	if (!(fmt->flags & AVFMT_NOFILE)) {
> -		if (url_fopen(&of->pb, name, URL_WRONLY) < 0) {
> +		if (avio_open(&of->pb, name, AVIO_FLAG_WRITE) < 0) {
>  			BKE_report(reports, RPT_ERROR, "Could not open file for writing.");
>  			return 0;
>  		}
> @@ -780,7 +734,7 @@
> 	av_write_header(of);
>  	outfile = of;
> -	dump_format(of, 0, name, 1);
> +	av_dump_format(of, 0, name, 1);
> 	return 1;
>  }
> @@ -807,7 +761,7 @@
>  	int outsize = 0;
>  	int ret = 0;
>  	
> -	AVCodecContext* c = get_codec_from_stream(video_stream);
> +	AVCodecContext* c = video_stream->codec;
>  	/* get the delayed frames */
>  	while (1) {
>  		AVPacket packet;
> @@ -822,19 +776,15 @@
>  			break;
>  		}
>  		if (c->coded_frame->pts != AV_NOPTS_VALUE) {
> -#ifdef FFMPEG_CODEC_TIME_BASE
>  			packet.pts = av_rescale_q(c->coded_frame->pts,
>  						  c->time_base,
>  						  video_stream->time_base);
> -#else
> -			packet.pts = c->coded_frame->pts;
> -#endif
>  			fprintf(stderr, "Video Frame PTS: %d\n", (int)packet.pts);
>  		} else {
>  			fprintf(stderr, "Video Frame PTS: not set\n");
>  		}
>  		if (c->coded_frame->key_frame) {
> -			packet.flags |= PKT_FLAG_KEY;
> +			packet.flags |= AV_PKT_FLAG_KEY;
>  		}
>  		packet.stream_index = video_stream->index;
>  		packet.data = video_buffer;
> @@ -845,7 +795,7 @@
>  			break;
>  		}
>  	}
> -	avcodec_flush_buffers(get_codec_from_stream(video_stream));
> +	avcodec_flush_buffers(video_stream->codec);
>  }
> /* **********************************************************************
> @@ -902,7 +852,7 @@
> 	if(audio_stream)
>  	{
> -		AVCodecContext* c = get_codec_from_stream(audio_stream);
> +		AVCodecContext* c = audio_stream->codec;
>  		AUD_DeviceSpecs specs;
>  		specs.channels = c->channels;
>  		specs.format = AUD_FORMAT_S16;
> @@ -945,7 +895,7 @@
>  		success= (avframe && write_video_frame(rd, avframe, reports));
> 		if (ffmpeg_autosplit) {
> -			if (url_ftell(OUTFILE_PB) > FFMPEG_AUTOSPLIT_SIZE) {
> +			if (avio_tell(outfile->pb) > FFMPEG_AUTOSPLIT_SIZE) {
>  				end_ffmpeg();
>  				ffmpeg_autosplit_count++;
>  				success &= start_ffmpeg_impl(rd, rectx, recty, reports);
> @@ -974,7 +924,7 @@
>  		audio_mixdown_device = 0;
>  	}
>  	
> -	if (video_stream && get_codec_from_stream(video_stream)) {
> +	if (video_stream && video_stream->codec) {
>  		fprintf(stderr, "Flushing delayed frames...\n");
>  		flush_ffmpeg ();		
>  	}
> @@ -985,8 +935,8 @@
>  	
>  	/* Close the video codec */
> -	if (video_stream && get_codec_from_stream(video_stream)) {
> -		avcodec_close(get_codec_from_stream(video_stream));
> +	if (video_stream && video_stream->codec) {
> +		avcodec_close(video_stream->codec);
>  		printf("zero video stream %p\n", video_stream);
>  		video_stream = 0;
>  	}
> @@ -1007,7 +957,7 @@
>  	}
>  	if (outfile && outfile->oformat) {
>  		if (!(outfile->oformat->flags & AVFMT_NOFILE)) {
> -			url_fclose(OUTFILE_PB);
> +			avio_close(outfile->pb);
>  		}
>  	}
>  	if (outfile) {
> @@ -1101,12 +1051,12 @@
>  	switch (o->type) {
>  	case FF_OPT_TYPE_INT:
>  	case FF_OPT_TYPE_INT64:
> -		val.i = o->default_val;
> +		val.i = o->default_val.i64;
>  		idp_type = IDP_INT;
>  		break;
>  	case FF_OPT_TYPE_DOUBLE:
>  	case FF_OPT_TYPE_FLOAT:
> -		val.f = o->default_val;
> +		val.f = o->default_val.dbl;
>  		idp_type = IDP_FLOAT;
>  		break;
>  	case FF_OPT_TYPE_STRING:
> @@ -1314,7 +1264,7 @@
>
> @@ Diff output truncated at 10240 characters. @@
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs


More information about the Bf-committers mailing list