diff options
author | Peter Schlaile <peter@schlaile.de> | 2007-09-23 18:05:22 +0400 |
---|---|---|
committer | Peter Schlaile <peter@schlaile.de> | 2007-09-23 18:05:22 +0400 |
commit | 37a8e56bf0a4e98de3682bdb260132a9fa4c5d45 (patch) | |
tree | 3c7990b6f2f19968746007b09346a52049130e5c /source/blender/blenkernel/intern/writeffmpeg.c | |
parent | fd44aa2204cc24204779cd73678ca08016319737 (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.c | 25 |
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 |