[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