Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Schlaile <peter@schlaile.de>2006-06-09 23:48:50 +0400
committerPeter Schlaile <peter@schlaile.de>2006-06-09 23:48:50 +0400
commitf78be8bdcd295dab18a45825b981405520a53805 (patch)
tree9cc90f18e47d22985d254486a6c4063892b0b668 /source/blender/blenkernel
parentbfe1d7c53e41d0f9913e231cf3066d2d7e31605e (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.h4
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c55
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) {