/* === S Y N F I G ========================================================= */
-/*! \file trgt.cpp
+/*! \file trgt_av.cpp
** \brief \writeme
**
-** $Id: trgt_av.cpp,v 1.1.1.1 2005/01/04 01:23:11 darco Exp $
+** $Id$
**
** \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>
SYNFIG_TARGET_SET_NAME(Target_LibAVCodec,"libav");
SYNFIG_TARGET_SET_EXT(Target_LibAVCodec,"avi");
SYNFIG_TARGET_SET_VERSION(Target_LibAVCodec,"0.1");
-SYNFIG_TARGET_SET_CVS_ID(Target_LibAVCodec,"$Id: trgt_av.cpp,v 1.1.1.1 2005/01/04 01:23:11 darco Exp $");
+SYNFIG_TARGET_SET_CVS_ID(Target_LibAVCodec,"$Id$");
/* === C L A S S E S & S T R U C T S ======================================= */
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 is invalid (NULL), then we are done compressing frames and we are trying to get
- the buffer cleared out (or if it's already in the right format) so no transofrm necessary
+ the buffer cleared out (or if it's already in the right format) so no transform necessary
*/
if ( pict )
{
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");