diff options
author | Peter Schlaile <peter@schlaile.de> | 2006-06-09 23:48:50 +0400 |
---|---|---|
committer | Peter Schlaile <peter@schlaile.de> | 2006-06-09 23:48:50 +0400 |
commit | f78be8bdcd295dab18a45825b981405520a53805 (patch) | |
tree | 9cc90f18e47d22985d254486a6c4063892b0b668 /source/blender/blenkernel | |
parent | bfe1d7c53e41d0f9913e231cf3066d2d7e31605e (diff) |
==FFMPEG==
Added support for XVid and H264-codecs in codec-selection. (only work, if
ffmpeg is compiled with XVid and/or H264-support. Failure in doing so
results in an error message that codec can't be selected.)
Both are written always to AVIs since raw-h264-files created by ffmpeg
can't even be opened by itself...
Video render options are reset to sane defaults (=DVD preset) on startup now.
Don't expect quicktime-support to be very exciting, since ffmpeg can't really
multiplex quicktime files. (Tried several codecs with the ffmpeg-commandline
tool,... sigh)
Timestamp crash on Debian-Sarge version is fixed.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_writeffmpeg.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/writeffmpeg.c | 55 |
2 files changed, 42 insertions, 17 deletions
diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h index 288955f2cba..13084e925e0 100644 --- a/source/blender/blenkernel/BKE_writeffmpeg.h +++ b/source/blender/blenkernel/BKE_writeffmpeg.h @@ -43,12 +43,16 @@ extern "C" { #define FFMPEG_AVI 3 #define FFMPEG_MOV 4 #define FFMPEG_DV 5 +#define FFMPEG_H264 6 +#define FFMPEG_XVID 7 #define FFMPEG_CODEC_MPEG1 0 #define FFMPEG_CODEC_MPEG2 1 #define FFMPEG_CODEC_MPEG4 2 #define FFMPEG_CODEC_HUFFYUV 3 #define FFMPEG_CODEC_DV 4 +#define FFMPEG_CODEC_H264 5 +#define FFMPEG_CODEC_XVID 6 #define FFMPEG_PRESET_NONE 0 #define FFMPEG_PRESET_DVD 1 diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index 7eae18553fd..aa4cb00e21f 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -181,6 +181,14 @@ AVOutputFormat* ffmpeg_get_format(int format) case FFMPEG_MOV: f = guess_format("mov", NULL, NULL); break; + case FFMPEG_H264: + /* FIXME: avi for now... */ + f = guess_format("avi", NULL, NULL); + break; + case FFMPEG_XVID: + /* FIXME: avi for now... */ + f = guess_format("avi", NULL, NULL); + break; default: f = NULL; } @@ -238,7 +246,9 @@ static void write_video_frame(AVFrame* frame) { int outsize = 0; int ret; AVCodecContext* c = get_codec_from_stream(video_stream); +#ifdef FFMPEG_CODEC_TIME_BASE frame->pts = G.scene->r.cfra - G.scene->r.sfra; +#endif outsize = avcodec_encode_video(c, video_buffer, video_buffersize, frame); @@ -400,6 +410,11 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of, /* makes HuffYUV happy ... */ c->pix_fmt = PIX_FMT_YUV422P; } + + if (codec_id == CODEC_ID_XVID) { + /* arghhhh ... */ + c->pix_fmt = PIX_FMT_YUV420P; + } if (!strcmp(of->oformat->name, "mp4") || !strcmp(of->oformat->name, "mov") || @@ -549,23 +564,29 @@ void start_ffmpeg_impl(RenderData *rd, int rectx, int recty) snprintf(of->filename, sizeof(of->filename), "%s", name); /* set the codec to the user's selection */ switch(ffmpeg_type) { - case FFMPEG_AVI: - case FFMPEG_MOV: - fmt->video_codec = ffmpeg_codec; - break; - case FFMPEG_DV: - fmt->video_codec = CODEC_ID_DVVIDEO; - break; - case FFMPEG_MPEG1: - fmt->video_codec = CODEC_ID_MPEG1VIDEO; - break; - case FFMPEG_MPEG2: - fmt->video_codec = CODEC_ID_MPEG2VIDEO; - break; - case FFMPEG_MPEG4: - default: - fmt->video_codec = CODEC_ID_MPEG4; - break; + case FFMPEG_AVI: + case FFMPEG_MOV: + fmt->video_codec = ffmpeg_codec; + break; + case FFMPEG_DV: + fmt->video_codec = CODEC_ID_DVVIDEO; + break; + case FFMPEG_MPEG1: + fmt->video_codec = CODEC_ID_MPEG1VIDEO; + break; + case FFMPEG_MPEG2: + fmt->video_codec = CODEC_ID_MPEG2VIDEO; + break; + case FFMPEG_H264: + fmt->video_codec = CODEC_ID_H264; + break; + case FFMPEG_XVID: + fmt->video_codec = CODEC_ID_XVID; + break; + case FFMPEG_MPEG4: + default: + fmt->video_codec = CODEC_ID_MPEG4; + break; } if (fmt->video_codec == CODEC_ID_DVVIDEO) { if (rectx != 720) { |