**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2008 Paul Wise
+** Copyright (c) 2008 Gerco Ballintijn
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
extern "C"
{
-#include <avformat.h>
+
+/*
+ ffmpeg library headers have historically had multiple locations.
+ We should check all of the locations to be more portable.
+*/
+
+#ifdef HAVE_LIBAVFORMAT_AVFORMAT_H
+# include <libavformat/avformat.h>
+#elif defined(HAVE_AVFORMAT_H)
+# include <avformat.h>
+#elif defined(HAVE_FFMPEG_AVFORMAT_H)
+# include <ffmpeg/avformat.h>
+#endif
+
+#ifdef WITH_LIBSWSCALE
+#ifdef HAVE_LIBSWSCALE_SWSCALE_H
+# include <libswscale/swscale.h>
+#elif defined(HAVE_SWSCALE_H)
+# include <swscale.h>
+#elif defined(HAVE_FFMPEG_SWSCALE_H)
+# include <ffmpeg/swscale.h>
+#endif
+#endif
+
}
#include <synfig/general.h>
class VideoEncoder
{
public:
- AVFrame *encodable; //for compressiong and output to a file (in compatible pixel format)
+ AVFrame *encodable; //for compression and output to a file (in compatible pixel format)
vector<unsigned char> videobuffer;
if ( pict && context->pix_fmt != PIX_FMT_RGB24 )
{
//We're using RGBA at the moment, write custom conversion code later (get less accuracy errors)
+#ifdef WITH_LIBSWSCALE
+ struct SwsContext* img_convert_ctx =
+ sws_getContext(context->width, context->height, PIX_FMT_RGB24,
+ context->width, context->height, context->pix_fmt,
+ SWS_BICUBIC, NULL, NULL, NULL);
+
+ sws_scale(img_convert_ctx, pict->data, pict->linesize,
+
+ 0, context->height, encodable->data,
+ encodable->linesize);
+
+ sws_freeContext (img_convert_ctx);
+#else
img_convert((AVPicture *)encodable, context->pix_fmt,
(AVPicture *)pict, PIX_FMT_RGB24,
context->width, context->height);
+#endif
pict = encodable;
}
if( context->coded_frame && context->coded_frame->key_frame)
pkt.flags |= PKT_FLAG_KEY;
- //cludge for raw picture format (they said they'd fix)
+ //kluge for raw picture format (they said they'd fix)
if (formatc->oformat->flags & AVFMT_RAWPICTURE)
{
ret = av_write_frame(formatc, &pkt);
return true;
}
- void close(AVFormatContext *formatc, AVStream *stream)
+ void close(AVFormatContext */*formatc*/, AVStream *stream)
{
if(stream)
avcodec_close(stream->codec);
void CleanUp()
{
- int i;
+ unsigned int i;
if(picture) free_picture(picture);
if(!(format->flags & AVFMT_NOFILE))
{
/* close the output file */
+#if LIBAVFORMAT_VERSION_INT >= (52<<16)
+ url_fclose(formatc->pb);
+#else
url_fclose(&formatc->pb);
+#endif
}
/* free the stream */
}
// add an audio output stream
- AVStream *add_audio_stream(int codec_id,const AudioInfo &aInfo)
+ AVStream *add_audio_stream(int codec_id,const AudioInfo &/*aInfo*/)
{
AVCodecContext *context;
AVStream *stream;
}
bool
-Target_LibAVCodec::start_frame(synfig::ProgressCallback *callback)
+Target_LibAVCodec::start_frame(synfig::ProgressCallback */*callback*/)
{
//prepare all the color buffer stuff, etc.
bool Target_LibAVCodec::init()
{
- //hardcode test for mpeg
+ //hardcoded test for mpeg
if(!data->Initialize(filename.c_str(),NULL))
{
synfig::warning("Unable to Initialize the audio video encoders");