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>2007-09-23 18:05:22 +0400
committerPeter Schlaile <peter@schlaile.de>2007-09-23 18:05:22 +0400
commit37a8e56bf0a4e98de3682bdb260132a9fa4c5d45 (patch)
tree3c7990b6f2f19968746007b09346a52049130e5c /source/blender/blenkernel/intern/writeffmpeg.c
parentfd44aa2204cc24204779cd73678ca08016319737 (diff)
== Sequencer / FFMPEG ==
Updating to latest FFMPEG version.
Diffstat (limited to 'source/blender/blenkernel/intern/writeffmpeg.c')
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index 703f2803ede..34aa44e9357 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -32,6 +32,7 @@
#include <ffmpeg/avformat.h>
#include <ffmpeg/avcodec.h>
#include <ffmpeg/rational.h>
+#include <ffmpeg/swscale.h>
#if LIBAVFORMAT_VERSION_INT < (49 << 16)
#define FFMPEG_OLD_FRAME_RATE 1
@@ -81,6 +82,7 @@ static AVFormatContext* outfile = 0;
static AVStream* video_stream = 0;
static AVStream* audio_stream = 0;
static AVFrame* current_frame = 0;
+static struct SwsContext *img_convert_ctx = 0;
static uint8_t* video_buffer = 0;
static int video_buffersize = 0;
@@ -317,8 +319,9 @@ static AVFrame* generate_video_frame(uint8_t* pixels)
}
if (c->pix_fmt != PIX_FMT_RGBA32) {
- img_convert((AVPicture*)current_frame, c->pix_fmt,
- (AVPicture*)rgb_frame, PIX_FMT_RGBA32, width, height);
+ sws_scale(img_convert_ctx, rgb_frame->data,
+ rgb_frame->linesize, 0, c->height,
+ current_frame->data, current_frame->linesize);
delete_picture(rgb_frame);
}
return current_frame;
@@ -420,6 +423,13 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
"FFMPEG video buffer");
current_frame = alloc_picture(c->pix_fmt, c->width, c->height);
+
+ img_convert_ctx = sws_getContext(c->width, c->height,
+ PIX_FMT_RGBA32,
+ c->width, c->height,
+ c->pix_fmt,
+ SWS_BICUBIC,
+ NULL, NULL, NULL);
return st;
}
@@ -749,8 +759,10 @@ void end_ffmpeg(void)
fprintf(stderr, "Closing ffmpeg...\n");
- write_audio_frames();
-
+ if (audio_stream) {
+ write_audio_frames();
+ }
+
if (outfile) {
av_write_trailer(outfile);
}
@@ -797,6 +809,11 @@ void end_ffmpeg(void)
MEM_freeN(audio_input_buffer);
audio_input_buffer = 0;
}
+
+ if (img_convert_ctx) {
+ sws_freeContext(img_convert_ctx);
+ img_convert_ctx = 0;
+ }
}
#endif