games/alephone: Patched for ffmpeg-2.6.3.
Signed-off-by: David Spencer <baildon.research@googlemail.com> Signed-off-by: Heinz Wiesinger <pprkut@slackbuilds.org> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
parent
7ec02b8f86
commit
d7cbc3b5cb
|
@ -58,6 +58,14 @@ find -L . \
|
|||
# Patch came from ArchLinux AUR, this is the two ffmpeg patches catted
|
||||
# together.
|
||||
patch -p1 < $CWD/ffmpeg_api.diff
|
||||
# Thanks to John Vogel for these ffmpeg patches:
|
||||
patch -p0 < $CWD/r5009.diff
|
||||
patch -p0 < $CWD/r5010.diff
|
||||
patch -p0 < $CWD/r5013.diff
|
||||
patch -p0 < $CWD/r5033.diff
|
||||
patch -p0 < $CWD/r5037.diff
|
||||
|
||||
autoreconf
|
||||
|
||||
[ "${FFMPEG:-yes}" = "no" ] && EXTRAOPT=--disable-ffmpeg
|
||||
|
||||
|
|
|
@ -0,0 +1,385 @@
|
|||
Index: Source_Files/Sound/FFmpegDecoder.cpp
|
||||
===================================================================
|
||||
--- Source_Files/Sound/FFmpegDecoder.cpp (revision 5008)
|
||||
+++ Source_Files/Sound/FFmpegDecoder.cpp (revision 5009)
|
||||
@@ -199,10 +199,13 @@
|
||||
|
||||
while (pkt_temp.size > 0)
|
||||
{
|
||||
- AVFrame frame;
|
||||
- avcodec_get_frame_defaults(&frame);
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,0)
|
||||
+ AVFrame *dframe = avcodec_alloc_frame();
|
||||
+#else
|
||||
+ AVFrame *dframe = av_frame_alloc();
|
||||
+#endif
|
||||
int got_frame = 0;
|
||||
- int bytes_read = avcodec_decode_audio4(dec_ctx, &frame, &got_frame, &pkt_temp);
|
||||
+ int bytes_read = avcodec_decode_audio4(dec_ctx, dframe, &got_frame, &pkt_temp);
|
||||
if (bytes_read < 0)
|
||||
{
|
||||
av_free_packet(&pkt);
|
||||
@@ -216,12 +219,12 @@
|
||||
|
||||
int stride = -1;
|
||||
if (channels > 1 && av_sample_fmt_is_planar(in_fmt))
|
||||
- stride = frame.extended_data[1] - frame.extended_data[0];
|
||||
+ stride = dframe->extended_data[1] - dframe->extended_data[0];
|
||||
|
||||
- int written = convert_audio(frame.nb_samples, channels,
|
||||
+ int written = convert_audio(dframe->nb_samples, channels,
|
||||
stride,
|
||||
- in_fmt, frame.extended_data[0],
|
||||
- frame.nb_samples, channels,
|
||||
+ in_fmt, dframe->extended_data[0],
|
||||
+ dframe->nb_samples, channels,
|
||||
-1,
|
||||
out_fmt, av->temp_data);
|
||||
|
||||
@@ -230,6 +233,12 @@
|
||||
pkt_temp.data += bytes_read;
|
||||
pkt_temp.size -= bytes_read;
|
||||
}
|
||||
+
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,0)
|
||||
+ av_freep(&dframe);
|
||||
+#else
|
||||
+ av_frame_free(&dframe);
|
||||
+#endif
|
||||
}
|
||||
|
||||
av_free_packet(&pkt);
|
||||
Index: Source_Files/FFmpeg/Movie.cpp
|
||||
===================================================================
|
||||
--- Source_Files/FFmpeg/Movie.cpp (revision 5008)
|
||||
+++ Source_Files/FFmpeg/Movie.cpp (revision 5009)
|
||||
@@ -85,6 +85,15 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
+// FFmpeg compatibility
|
||||
+#ifndef AV_CODEC_ID_VP8
|
||||
+#define AV_CODEC_ID_VP8 CODEC_ID_VP8
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_VORBIS
|
||||
+#define AV_CODEC_ID_VORBIS CODEC_ID_VORBIS
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
// shamelessly stolen from SDL 2.0
|
||||
static int get_cpu_count(void)
|
||||
{
|
||||
@@ -399,7 +408,7 @@
|
||||
AVStream *video_stream;
|
||||
if (success)
|
||||
{
|
||||
- video_codec = avcodec_find_encoder(CODEC_ID_VP8);
|
||||
+ video_codec = avcodec_find_encoder(AV_CODEC_ID_VP8);
|
||||
success = video_codec;
|
||||
if (!success) err_msg = "Could not find VP8 encoder";
|
||||
}
|
||||
@@ -445,7 +454,11 @@
|
||||
}
|
||||
if (success)
|
||||
{
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,0)
|
||||
av->video_frame = avcodec_alloc_frame();
|
||||
+#else
|
||||
+ av->video_frame = av_frame_alloc();
|
||||
+#endif
|
||||
success = av->video_frame;
|
||||
if (!success) err_msg = "Could not allocate video frame";
|
||||
}
|
||||
@@ -466,7 +479,7 @@
|
||||
AVStream *audio_stream;
|
||||
if (success)
|
||||
{
|
||||
- audio_codec = avcodec_find_encoder(CODEC_ID_VORBIS);
|
||||
+ audio_codec = avcodec_find_encoder(AV_CODEC_ID_VORBIS);
|
||||
success = audio_codec;
|
||||
if (!success) err_msg = "Could not find Vorbis encoder";
|
||||
}
|
||||
@@ -511,7 +524,11 @@
|
||||
}
|
||||
if (success)
|
||||
{
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,0)
|
||||
av->audio_frame = avcodec_alloc_frame();
|
||||
+#else
|
||||
+ av->audio_frame = av_frame_alloc();
|
||||
+#endif
|
||||
success = av->audio_frame;
|
||||
if (!success) err_msg = "Could not allocate audio frame";
|
||||
}
|
||||
@@ -550,6 +567,7 @@
|
||||
// Start movie file
|
||||
if (success)
|
||||
{
|
||||
+ video_stream->time_base = (AVRational){1, TICKS_PER_SECOND};
|
||||
avformat_write_header(av->fmt_ctx, NULL);
|
||||
}
|
||||
|
||||
@@ -615,13 +633,15 @@
|
||||
while (!done)
|
||||
{
|
||||
// add video
|
||||
- int vsize = avcodec_encode_video(vcodec,
|
||||
- av->video_buf, av->video_bufsize,
|
||||
- frame);
|
||||
+ AVPacket pkt;
|
||||
+ av_init_packet(&pkt);
|
||||
+ pkt.data = av->video_buf;
|
||||
+ pkt.size = av->video_bufsize;
|
||||
+
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,0,0)
|
||||
+ int vsize = avcodec_encode_video(vcodec, av->video_buf, av->video_bufsize, frame);
|
||||
if (vsize > 0)
|
||||
{
|
||||
- AVPacket pkt;
|
||||
- av_init_packet(&pkt);
|
||||
if (vcodec->coded_frame->pts != AV_NOPTS_VALUE)
|
||||
{
|
||||
pkt.pts = av_rescale_q(vcodec->coded_frame->pts,
|
||||
@@ -630,12 +650,19 @@
|
||||
}
|
||||
if (vcodec->coded_frame->key_frame)
|
||||
pkt.flags |= AV_PKT_FLAG_KEY;
|
||||
+ pkt.size = vsize;
|
||||
+ }
|
||||
+
|
||||
+#else
|
||||
+ int got_packet = 0;
|
||||
+ int vsize = avcodec_encode_video2(vcodec, &pkt, frame, &got_packet);
|
||||
+#endif
|
||||
+ if (vsize > 0)
|
||||
+ {
|
||||
pkt.stream_index = vstream->index;
|
||||
- pkt.data = av->video_buf;
|
||||
- pkt.size = vsize;
|
||||
av_interleaved_write_frame(av->fmt_ctx, &pkt);
|
||||
- av_free_packet(&pkt);
|
||||
}
|
||||
+ av_free_packet(&pkt);
|
||||
|
||||
if (!last || vsize <= 0)
|
||||
done = true;
|
||||
@@ -679,7 +706,11 @@
|
||||
write_samples, acodec->channels, write_samples * write_bps,
|
||||
acodec->sample_fmt, av->audio_data_conv);
|
||||
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1)
|
||||
avcodec_get_frame_defaults(av->audio_frame);
|
||||
+#else
|
||||
+ av_frame_unref(av->audio_frame);
|
||||
+#endif
|
||||
av->audio_frame->nb_samples = write_samples;
|
||||
int asize = avcodec_fill_audio_frame(av->audio_frame, acodec->channels,
|
||||
acodec->sample_fmt,
|
||||
@@ -695,7 +726,7 @@
|
||||
if (0 == avcodec_encode_audio2(acodec, &pkt, av->audio_frame, &got_pkt)
|
||||
&& got_pkt)
|
||||
{
|
||||
- if (acodec->coded_frame->pts != AV_NOPTS_VALUE)
|
||||
+ if (acodec->coded_frame && acodec->coded_frame->pts != AV_NOPTS_VALUE)
|
||||
{
|
||||
pkt.pts = av_rescale_q(acodec->coded_frame->pts,
|
||||
acodec->time_base,
|
||||
Index: Source_Files/FFmpeg/SDL_ffmpeg.c
|
||||
===================================================================
|
||||
--- Source_Files/FFmpeg/SDL_ffmpeg.c (revision 5008)
|
||||
+++ Source_Files/FFmpeg/SDL_ffmpeg.c (revision 5009)
|
||||
@@ -48,6 +48,38 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
+// FFmpeg compatibility
|
||||
+#ifndef AV_CODEC_ID_MPEG1VIDEO
|
||||
+#define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_MPEG2VIDEO
|
||||
+#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_MP2
|
||||
+#define AV_CODEC_ID_MP2 CODEC_ID_MP2
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_DVVIDEO
|
||||
+#define AV_CODEC_ID_DVVIDEO CODEC_ID_DVVIDEO
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_DVAUDIO
|
||||
+#define AV_CODEC_ID_DVAUDIO CODEC_ID_DVAUDIO
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_PCM_S16LE
|
||||
+#define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_PCM_S16BE
|
||||
+#define AV_CODEC_ID_PCM_S16BE CODEC_ID_PCM_S16BE
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_PCM_U16LE
|
||||
+#define AV_CODEC_ID_PCM_U16LE CODEC_ID_PCM_U16LE
|
||||
+#endif
|
||||
+#ifndef AV_CODEC_ID_PCM_U16BE
|
||||
+#define AV_CODEC_ID_PCM_U16BE CODEC_ID_PCM_U16BE
|
||||
+#endif
|
||||
+#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE
|
||||
+#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000
|
||||
+#endif
|
||||
+
|
||||
#include "SDL_ffmpeg.h"
|
||||
|
||||
#ifdef MSVC
|
||||
@@ -169,12 +201,12 @@
|
||||
|
||||
const SDL_ffmpegCodec SDL_ffmpegCodecPALDVD =
|
||||
{
|
||||
- CODEC_ID_MPEG2VIDEO,
|
||||
+ AV_CODEC_ID_MPEG2VIDEO,
|
||||
720, 576,
|
||||
1, 25,
|
||||
6000000,
|
||||
-1, -1,
|
||||
- CODEC_ID_MP2,
|
||||
+ AV_CODEC_ID_MP2,
|
||||
2, 48000,
|
||||
192000,
|
||||
-1, -1
|
||||
@@ -182,12 +214,12 @@
|
||||
|
||||
const SDL_ffmpegCodec SDL_ffmpegCodecPALDV =
|
||||
{
|
||||
- CODEC_ID_DVVIDEO,
|
||||
+ AV_CODEC_ID_DVVIDEO,
|
||||
720, 576,
|
||||
1, 25,
|
||||
6553600,
|
||||
-1, -1,
|
||||
- CODEC_ID_DVAUDIO,
|
||||
+ AV_CODEC_ID_DVAUDIO,
|
||||
2, 48000,
|
||||
256000,
|
||||
-1, -1
|
||||
@@ -324,7 +356,11 @@
|
||||
{
|
||||
if ( file->type == SDL_ffmpegInputStream )
|
||||
{
|
||||
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53,17,0)
|
||||
av_close_input_file( file->_ffmpeg );
|
||||
+#else
|
||||
+ avformat_close_input( &file->_ffmpeg );
|
||||
+#endif
|
||||
}
|
||||
else if ( file->type == SDL_ffmpegOutputStream )
|
||||
{
|
||||
@@ -448,7 +484,11 @@
|
||||
{
|
||||
stream->mutex = SDL_CreateMutex();
|
||||
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,0)
|
||||
stream->decodeFrame = avcodec_alloc_frame();
|
||||
+#else
|
||||
+ stream->decodeFrame = av_frame_alloc();
|
||||
+#endif
|
||||
|
||||
SDL_ffmpegStream **s = &file->vs;
|
||||
while ( *s )
|
||||
@@ -1301,11 +1341,17 @@
|
||||
{
|
||||
if ( stream && stream->_ffmpeg && stream->_ffmpeg->codec )
|
||||
{
|
||||
- if ( nominator ) *nominator = stream->_ffmpeg->r_frame_rate.num;
|
||||
+ AVRational frate;
|
||||
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55,12,100)
|
||||
+ frate = stream->_ffmpeg->r_frame_rate;
|
||||
+#else
|
||||
+ frate = av_stream_get_r_frame_rate(stream->_ffmpeg);
|
||||
+#endif
|
||||
+ if ( nominator ) *nominator = frate.num;
|
||||
|
||||
- if ( denominator ) *denominator = stream->_ffmpeg->r_frame_rate.den;
|
||||
+ if ( denominator ) *denominator = frate.den;
|
||||
|
||||
- return ( float )stream->_ffmpeg->r_frame_rate.num / stream->_ffmpeg->r_frame_rate.den;
|
||||
+ return ( float )frate.num / frate.den;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1587,13 +1633,13 @@
|
||||
stream->codec->pix_fmt = PIX_FMT_YUV420P;
|
||||
|
||||
/* set mpeg2 codec parameters */
|
||||
- if ( stream->codec->codec_id == CODEC_ID_MPEG2VIDEO )
|
||||
+ if ( stream->codec->codec_id == AV_CODEC_ID_MPEG2VIDEO )
|
||||
{
|
||||
stream->codec->max_b_frames = 2;
|
||||
}
|
||||
|
||||
/* set mpeg1 codec parameters */
|
||||
- if ( stream->codec->codec_id == CODEC_ID_MPEG1VIDEO )
|
||||
+ if ( stream->codec->codec_id == AV_CODEC_ID_MPEG1VIDEO )
|
||||
{
|
||||
/* needed to avoid using macroblocks in which some coeffs overflow
|
||||
this doesnt happen with normal video, it just happens here as the
|
||||
@@ -1757,10 +1803,10 @@
|
||||
|
||||
switch ( stream->codec->codec_id )
|
||||
{
|
||||
- case CODEC_ID_PCM_S16LE:
|
||||
- case CODEC_ID_PCM_S16BE:
|
||||
- case CODEC_ID_PCM_U16LE:
|
||||
- case CODEC_ID_PCM_U16BE:
|
||||
+ case AV_CODEC_ID_PCM_S16LE:
|
||||
+ case AV_CODEC_ID_PCM_S16BE:
|
||||
+ case AV_CODEC_ID_PCM_U16LE:
|
||||
+ case AV_CODEC_ID_PCM_U16BE:
|
||||
str->encodeAudioInputSize >>= 1;
|
||||
break;
|
||||
default:
|
||||
@@ -2032,19 +2078,41 @@
|
||||
while ( size > 0 )
|
||||
{
|
||||
/* Decode the packet */
|
||||
-
|
||||
-#if ( LIBAVCODEC_VERSION_MAJOR <= 52 && LIBAVCODEC_VERSION_MINOR <= 20 )
|
||||
- int len = avcodec_decode_audio2( file->audioStream->_ffmpeg->codec, ( int16_t* )file->audioStream->sampleBuffer, &audioSize, pack->data, pack->size );
|
||||
-#else
|
||||
- int len = avcodec_decode_audio3( file->audioStream->_ffmpeg->codec, ( int16_t* )file->audioStream->sampleBuffer, &audioSize, pack );
|
||||
+ AVCodecContext *avctx = file->audioStream->_ffmpeg->codec;
|
||||
+ AVFrame dframe;
|
||||
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1)
|
||||
+ avcodec_get_frame_defaults(&dframe);
|
||||
#endif
|
||||
-
|
||||
- /* if an error occured, we skip the frame */
|
||||
- if ( len <= 0 || !audioSize )
|
||||
+ int got_frame = 0;
|
||||
+ int len = avcodec_decode_audio4( avctx, &dframe, &got_frame, pack );
|
||||
+
|
||||
+ if (len < 0 || !got_frame)
|
||||
{
|
||||
SDL_ffmpegSetError( "error decoding audio frame" );
|
||||
break;
|
||||
}
|
||||
+
|
||||
+ int planar = av_sample_fmt_is_planar( avctx->sample_fmt );
|
||||
+ int plane_size;
|
||||
+ int data_size = av_samples_get_buffer_size( &plane_size, avctx->channels, dframe.nb_samples, avctx->sample_fmt, 1 );
|
||||
+ if ( data_size > 10000 )
|
||||
+ {
|
||||
+ SDL_ffmpegSetError( "too much data in decoded audio frame" );
|
||||
+ break;
|
||||
+ }
|
||||
+ memcpy( file->audioStream->sampleBuffer, dframe.extended_data[0], plane_size );
|
||||
+ audioSize = plane_size;
|
||||
+ if ( planar && avctx->channels > 1 )
|
||||
+ {
|
||||
+ int8_t *out = file->audioStream->sampleBuffer + plane_size;
|
||||
+ int ch;
|
||||
+ for ( ch = 1; ch < avctx->channels; ch++ )
|
||||
+ {
|
||||
+ memcpy( out, dframe.extended_data[ch], plane_size );
|
||||
+ out += plane_size;
|
||||
+ audioSize += plane_size;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/* change pointers */
|
||||
data += len;
|
|
@ -0,0 +1,13 @@
|
|||
Index: configure.ac
|
||||
===================================================================
|
||||
--- configure.ac (revision 5009)
|
||||
+++ configure.ac (revision 5010)
|
||||
@@ -195,7 +195,7 @@
|
||||
|
||||
if [[ "x$enable_ffmpeg" = "xyes" ]]; then
|
||||
dnl Check for libavcodec
|
||||
-PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 53.35.0 libavformat >= 53.21.0 libavutil >= 51.22.0 libswscale >= 2.1.0], [
|
||||
+PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 53.61.100 libavformat >= 53.32.100 libavutil >= 51.35.100 libswscale >= 2.1.100], [
|
||||
CPPFLAGS="$FFMPEG_CFLAGS $CPPFLAGS"
|
||||
LIBS="$FFMPEG_LIBS $LIBS"
|
||||
AC_DEFINE(HAVE_FFMPEG, 1, [ffmpeg support enabled])
|
|
@ -0,0 +1,14 @@
|
|||
Index: Source_Files/Sound/FFmpegDecoder.cpp
|
||||
===================================================================
|
||||
--- Source_Files/Sound/FFmpegDecoder.cpp (revision 5012)
|
||||
+++ Source_Files/Sound/FFmpegDecoder.cpp (revision 5013)
|
||||
@@ -21,6 +21,9 @@
|
||||
|
||||
*/
|
||||
|
||||
+// make FFmpeg happy
|
||||
+#define __STDC_CONSTANT_MACROS
|
||||
+
|
||||
#include "FFmpegDecoder.h"
|
||||
|
||||
#ifdef HAVE_FFMPEG
|
|
@ -0,0 +1,514 @@
|
|||
Index: configure.ac
|
||||
===================================================================
|
||||
--- configure.ac (revision 5032)
|
||||
+++ configure.ac (revision 5033)
|
||||
@@ -1,9 +1,13 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
-dnl Written in 2000 by Christian Bauer <Christian.Bauer@uni-mainz.de>
|
||||
+dnl Written by Christian Bauer and the Aleph One developers.
|
||||
|
||||
-AC_INIT([Aleph One/SDL], m4_esyscmd([ grep '^#define A1_DATE_VERSION' Source_Files/Misc/alephversion.h | sed -e 's/\(.*\"\)\(.*\)\(\"\)/\2/g' | tr -d '\n']), [http://sourceforge.net/bugs/?group_id=1997], [AlephOne])
|
||||
+AC_INIT([Aleph One],
|
||||
+ m4_esyscmd([ grep '^#define A1_DATE_VERSION' Source_Files/Misc/alephversion.h | sed -e 's/\(.*\"\)\(.*\)\(\"\)/\2/g' | tr -d '\n']),
|
||||
+ [http://sourceforge.net/p/marathon/bugs/],
|
||||
+ [AlephOne],
|
||||
+ [http://marathon.sourceforge.net/])
|
||||
AC_CONFIG_SRCDIR([Source_Files/shell.cpp])
|
||||
-AC_PREREQ(2.52)
|
||||
+AC_PREREQ([2.65])
|
||||
|
||||
dnl Detect the canonical host and target build environment.
|
||||
AC_CANONICAL_HOST
|
||||
@@ -11,288 +15,212 @@
|
||||
|
||||
dnl Init automake.
|
||||
AM_INIT_AUTOMAKE
|
||||
-AM_CONFIG_HEADER(config.h)
|
||||
+AM_CONFIG_HEADER([config.h])
|
||||
|
||||
dnl Configure options.
|
||||
-AC_ARG_ENABLE(opengl,
|
||||
-[ --enable-opengl use OpenGL for rendering [default=yes]], , enable_opengl=yes)
|
||||
-AC_ARG_ENABLE(mad,
|
||||
-[ --enable-mad use libmad for mp3 playback [default=yes]], , enable_mad=yes)
|
||||
-AC_ARG_ENABLE(ffmpeg,
|
||||
-[ --enable-ffmpeg use ffmpeg for audio/video playback and film export [default=yes]], , enable_ffmpeg=yes)
|
||||
-AC_ARG_ENABLE(sndfile,
|
||||
-[ --enable-sndfile use libsndfile for decoding audio files [default=yes]], , enable_sndfile=yes)
|
||||
-AC_ARG_ENABLE(vorbis,
|
||||
-[ --enable-vorbis enable ogg/vorbis music playback [default=yes]], , enable_vorbis=yes)
|
||||
-AC_ARG_ENABLE(lua,
|
||||
-[ --enable-lua use built-in Lua scripting [default=yes]], , enable_lua=yes)
|
||||
-AC_ARG_ENABLE(smpeg,
|
||||
-[ --enable-smpeg use SMPEG for movie playback [default=yes]], , enable_smpeg=yes)
|
||||
-AC_ARG_ENABLE(speex,
|
||||
-[ --enable-speex enable Speex net mic playback [default=yes]], , enable_speex=yes)
|
||||
-AC_ARG_ENABLE(alsa,
|
||||
-[ --enable-alsa enable ALSA net mic transmission [default=yes]], , enable_alsa=yes)
|
||||
-AC_ARG_ENABLE(zzip,
|
||||
-[ --enable-zzip enable zziplib support [default=yes]], , enable_zzip=yes)
|
||||
-AC_ARG_ENABLE(png,
|
||||
-[ --enable-png enable PNG screenshot support [default=yes]], , enable_png=yes)
|
||||
|
||||
-dnl Checks for programs.
|
||||
+dnl AX_ARG_ENABLE(option, desc)
|
||||
+AC_DEFUN([AX_ARG_ENABLE],
|
||||
+ [ desc_$1="$2"
|
||||
+ AC_ARG_ENABLE([$1], AS_HELP_STRING([--disable-$1], [do not include $2])) ])
|
||||
+dnl AX_ARG_WITH(option)
|
||||
+AC_DEFUN([AX_ARG_WITH],
|
||||
+ [ desc_$1="$2"
|
||||
+ AC_ARG_WITH([$1], AS_HELP_STRING([--without-$1], [do not use $2])) ])
|
||||
+
|
||||
+AX_ARG_ENABLE([opengl], [OpenGL rendering])
|
||||
+AX_ARG_ENABLE([lua], [built-in Lua scripting])
|
||||
+
|
||||
+AX_ARG_WITH([sdl_image], [SDL_image support])
|
||||
+AX_ARG_WITH([ffmpeg], [FFmpeg playback and film export])
|
||||
+AX_ARG_WITH([mad], [libmad MP3 playback])
|
||||
+AX_ARG_WITH([sndfile], [libsndfile audio decoding])
|
||||
+AX_ARG_WITH([vorbis], [libvorbis Ogg/Vorbis music playback])
|
||||
+AX_ARG_WITH([smpeg], [SMPEG movie playback])
|
||||
+AX_ARG_WITH([speex], [Speex net mic playback])
|
||||
+AX_ARG_WITH([alsa], [ALSA net mic transmission])
|
||||
+AX_ARG_WITH([zzip], [zziplib support])
|
||||
+AX_ARG_WITH([png], [libpng PNG screenshot support])
|
||||
+
|
||||
+
|
||||
+dnl Check for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CXXCPP
|
||||
+AC_PROG_OBJCXX
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_RANLIB
|
||||
|
||||
-dnl some platform specific stuff
|
||||
-case $target in
|
||||
-*-*-mingw32*)
|
||||
- AC_CHECK_TOOL(WINDRES, windres, :)
|
||||
- ;;
|
||||
-*-*-netbsd*)
|
||||
- CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
|
||||
- ;;
|
||||
-*)
|
||||
- ;;
|
||||
-esac
|
||||
+dnl Some platform specific stuff.
|
||||
+AS_CASE([$target],
|
||||
+ [*-*-mingw32*],
|
||||
+ [ make_windows=true
|
||||
+ AC_CHECK_TOOL([WINDRES], [windres], [:])
|
||||
+ AC_DEFINE([WIN32_DISABLE_MUSIC], [1], [Win32 music disabled])
|
||||
+ LIBS="$LIBS -ldsound -lwsock32" ],
|
||||
+ [*-*-netbsd*],
|
||||
+ [CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"])
|
||||
+AM_CONDITIONAL([MAKE_WINDOWS], [test "x$make_windows" = "xtrue"])
|
||||
|
||||
-dnl Checks for headers.
|
||||
-AC_CHECK_HEADERS(unistd.h)
|
||||
-AC_CHECK_HEADERS(pwd.h)
|
||||
+dnl Set target system name.
|
||||
+AC_DEFINE_UNQUOTED([TARGET_PLATFORM], ["$target_os $target_cpu"], [Target platform name])
|
||||
|
||||
-dnl Checks for library functions.
|
||||
-AC_CHECK_FUNC(snprintf, [
|
||||
- AC_DEFINE(HAVE_SNPRINTF, 1, [snprintf() is available])
|
||||
-])
|
||||
-AC_CHECK_FUNC(vsnprintf, [
|
||||
- AC_DEFINE(HAVE_VSNPRINTF, 1, [vsnprintf() is available])
|
||||
-])
|
||||
+dnl Check for headers.
|
||||
+AC_CHECK_HEADERS([unistd.h pwd.h])
|
||||
|
||||
-AC_CHECK_FUNC(mkstemp, [
|
||||
- AC_DEFINE(LUA_USE_MKSTEMP, 1, [mkstemp() is available])
|
||||
-])
|
||||
-AC_CHECK_FUNC(sysconf, [
|
||||
- AC_DEFINE(HAVE_SYSCONF, 1, [sysconf() is available])
|
||||
-])
|
||||
-AC_CHECK_FUNC(sysctlbyname, [
|
||||
- AC_DEFINE(HAVE_SYSCTLBYNAME, 1, [sysctlbyname() is available])
|
||||
-])
|
||||
+dnl Check for boost functions.
|
||||
+AC_LANG_PUSH(C++)
|
||||
+AC_CHECK_HEADER([boost/bind.hpp],
|
||||
+ ,
|
||||
+ [AC_MSG_ERROR([You need boost/bind.hpp from the boost library to run Aleph One.])])
|
||||
+AC_CHECK_HEADER([boost/function.hpp],
|
||||
+ ,
|
||||
+ [AC_MSG_ERROR([You need boost/function.hpp from the boost library to run Aleph One.])])
|
||||
+AC_LANG_POP(C++)
|
||||
|
||||
-dnl Check for SDL.
|
||||
-AM_PATH_SDL(1.2.0, , AC_MSG_ERROR([You need SDL 1.2 to run Aleph One.]))
|
||||
-CPPFLAGS="$CPPFLAGS $SDL_CFLAGS -DSDL"
|
||||
-LIBS="$LIBS $SDL_LIBS"
|
||||
+dnl Check for library functions.
|
||||
+AC_CHECK_FUNCS([snprintf vsnprintf sysconf sysctlbyname])
|
||||
+AC_CHECK_FUNC([mkstemp],
|
||||
+ [AC_DEFINE([LUA_USE_MKSTEMP], [1], [mkstemp() available])])
|
||||
|
||||
-dnl Check for SDL_image.
|
||||
-AC_CHECK_HEADERS(SDL_image.h, [
|
||||
- AC_CHECK_LIB(SDL_image, IMG_Load, [
|
||||
- LIBS="-lSDL_image $LIBS"
|
||||
- AC_DEFINE(HAVE_SDL_IMAGE, 1, [SDL_image support is enabled])
|
||||
- ])
|
||||
-])
|
||||
+dnl Check for net functions.
|
||||
+AC_SEARCH_LIBS([gethostbyname], [nsl])
|
||||
+AC_SEARCH_LIBS([socket], [socket],
|
||||
+ ,
|
||||
+ [AC_CHECK_LIB([nsl], [socket],
|
||||
+ [ LIBS="$LIBS -lsocket -lnsl" ],
|
||||
+ ,
|
||||
+ [-lsocket])])
|
||||
|
||||
-AC_CHECK_HEADERS(SDL_ttf.h, [
|
||||
- AC_CHECK_LIB(SDL_ttf, TTF_Init, [
|
||||
- LIBS="-lSDL_ttf $LIBS"
|
||||
- AC_DEFINE(HAVE_SDL_TTF, 1, [SDL_TTF support is enabled])
|
||||
- ])],
|
||||
- AC_MSG_ERROR([You need SDL_ttf to run Aleph One.])
|
||||
-)
|
||||
+dnl Check for libraries.
|
||||
|
||||
-dnl Check for SDL_net.
|
||||
-AC_CHECK_HEADERS(SDL_net.h, [
|
||||
- AC_CHECK_LIB(SDL_net, SDLNet_Init, [
|
||||
- LIBS="-lSDL_net $LIBS"
|
||||
- AC_DEFINE(HAVE_SDL_NET, 1, [SDL_net support is enabled])
|
||||
- ])
|
||||
-])
|
||||
-if [[ "x$ac_cv_lib_SDL_net_SDLNet_Init" != xyes ]]; then
|
||||
- AC_MSG_ERROR([You need SDL_net to run Aleph One.])
|
||||
-fi
|
||||
-AM_CONDITIONAL(HAVE_SDL_NET, test x$ac_cv_lib_SDL_net_SDLNet_Init = xyes)
|
||||
+dnl AX_REQUIRE_LIB(desc, define, header, lib, func)
|
||||
+AC_DEFUN([AX_REQUIRE_LIB],
|
||||
+ [ AC_CHECK_HEADERS([$3], [AC_CHECK_LIB([$4], [$5])])
|
||||
+ AS_IF([test "x${ac_cv_lib_$4_$5}" = "xyes"],
|
||||
+ [AC_DEFINE([HAVE_$2], [1], [$1 support enabled])],
|
||||
+ [AC_MSG_ERROR([You need $1 to run Aleph One.])]) ])
|
||||
|
||||
-AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||
-AC_SEARCH_LIBS(socket, socket, ,
|
||||
- [AC_CHECK_LIB(nsl, socket, LIBS="$LIBS -lsocket -lnsl", , -lsocket)])
|
||||
+dnl Check for required SDL dependencies.
|
||||
+AM_PATH_SDL(1.2.0, , AC_MSG_ERROR([You need SDL 1.2 to run Aleph One.]))
|
||||
+CPPFLAGS="$CPPFLAGS $SDL_CFLAGS -DSDL"
|
||||
+LIBS="$LIBS $SDL_LIBS"
|
||||
|
||||
+AX_REQUIRE_LIB([SDL_ttf], [SDL_TTF],
|
||||
+ [SDL_ttf.h], [SDL_ttf], [TTF_Init])
|
||||
+AX_REQUIRE_LIB([SDL_net], [SDL_NET],
|
||||
+ [SDL_net.h], [SDL_net], [SDLNet_Init])
|
||||
|
||||
-dnl Check for zlib
|
||||
-AC_CHECK_HEADER(zlib.h, , AC_ERROR([Aleph One requires zlib]))
|
||||
-AC_CHECK_LIB(z, zlibVersion, LIBS="-lz $LIBS", AC_ERROR([Aleph One requires zlib]))
|
||||
+dnl Check for zlib.
|
||||
+AX_REQUIRE_LIB([zlib], [ZLIB],
|
||||
+ [zlib.h], [z], [zlibVersion])
|
||||
|
||||
-dnl Check for zziplib
|
||||
-have_zzip=false
|
||||
-if [[ "x$enable_zzip" = "xyes" ]]; then
|
||||
-PKG_CHECK_MODULES([ZZIP], [zziplib >= 0.10.75], [
|
||||
- CPPFLAGS="$ZZIP_CFLAGS $CPPFLAGS"
|
||||
- LIBS="$ZZIP_LIBS $LIBS"
|
||||
- have_zzip=true
|
||||
- AC_DEFINE(HAVE_ZZIP, 1, [ZZIP support enabled])
|
||||
-])
|
||||
-fi
|
||||
-AM_CONDITIONAL(BUILD_ZZIP_RWOPS, test x$have_zzip = xtrue)
|
||||
+dnl Check for OpenGL.
|
||||
+AS_IF([test "x$enable_opengl" != "xno"],
|
||||
+ [ AC_MSG_CHECKING([for OpenGL support])
|
||||
+ compiled_opengl=no
|
||||
+ AS_CASE([$target],
|
||||
+ [*-*-cygwin* | *-*-mingw32*],
|
||||
+ [ SYS_GL_LIBS="-lGLEW -lopengl32 -lglu32"
|
||||
+ LIBS="$LIBS -lstdc++" ],
|
||||
+ [*-*-darwin*],
|
||||
+ [ SYS_GL_LIBS="-F/System/Library/Frameworks -framework AGL -framework OpenGL"
|
||||
+ CPPFLAGS="$CPPFLAGS -D__DARWIN__ -F/System/Library/Frameworks -I/System/Library/Frameworks/OpenGL.framework/Headers" ],
|
||||
+ [*-*-linux*],
|
||||
+ [ SYS_GL_LIBS="-lGL -lpthread" ],
|
||||
+ [ SYS_GL_LIBS="-lGL" ])
|
||||
+ AC_TRY_COMPILE([
|
||||
+ #ifndef __DARWIN__
|
||||
+ #include <GL/gl.h>
|
||||
+ #else
|
||||
+ #include <OpenGL/gl.h>
|
||||
+ #endif
|
||||
+ ],
|
||||
+ ,
|
||||
+ [ compiled_opengl=yes ])
|
||||
+ AC_MSG_RESULT($compiled_opengl)
|
||||
+ AS_IF([test "x$compiled_opengl" = "xyes"],
|
||||
+ [ have_opengl=true
|
||||
+ AC_DEFINE([HAVE_OPENGL], [1], [OpenGL support enabled])
|
||||
+ AC_CHECK_LIB([GLU], [gluScaleImage],
|
||||
+ [SYS_GL_LIBS="$SYS_GL_LIBS -lGLU"],
|
||||
+ ,
|
||||
+ [$SYS_GL_LIBS])
|
||||
+ LIBS="$LIBS $SYS_GL_LIBS"
|
||||
+ AC_CHECK_HEADERS([GL/glext.h], [], [], [#include <GL/gl.h>]) ],
|
||||
+ [ AS_IF([test "x$enable_opengl" = "xyes"],
|
||||
+ [AC_MSG_ERROR([OpenGL support requested but not available])],
|
||||
+ [AC_MSG_WARN([OpenGL not available])]) ]) ])
|
||||
+AM_CONDITIONAL([MAKE_OPENGL], [test "x$have_opengl" = "xtrue" ])
|
||||
|
||||
-have_png=false
|
||||
-if [[ "x$enable_png" = "xyes" ]]; then
|
||||
-PKG_CHECK_MODULES([PNG], [libpng], [
|
||||
- CPPFLAGS="$PNG_CFLAGS $CPPFLAGS"
|
||||
- LIBS="$PNG_LIBS $LIBS"
|
||||
- have_png=true
|
||||
- AC_DEFINE(HAVE_PNG, 1, [PNG support enabled])]
|
||||
-)
|
||||
-fi
|
||||
-AM_CONDITIONAL(HAVE_PNG, test x$have_png = xtrue)
|
||||
+dnl Enable Lua.
|
||||
+AS_IF([test "x$enable_lua" != "xno"],
|
||||
+ [ have_lua=true
|
||||
+ AC_DEFINE([HAVE_LUA], [1], [Lua support enabled]) ])
|
||||
|
||||
-dnl Check for boost/bind
|
||||
-AC_LANG_PUSH(C++)
|
||||
-AC_CHECK_HEADER([boost/bind.hpp], , [AC_MSG_ERROR([You need boost/bind.hpp from the boost library to run Aleph One])])
|
||||
-AC_LANG_POP(C++)
|
||||
|
||||
-dnl Check for boost/function
|
||||
-AC_LANG_PUSH(C++)
|
||||
-AC_CHECK_HEADER([boost/function.hpp], , [AC_MSG_ERROR([You need boost/function.hpp from the boost library to run Aleph One])])
|
||||
-AC_LANG_POP(C++)
|
||||
+dnl Check optional packages.
|
||||
|
||||
-if [[ "x$enable_smpeg" = "xyes" ]]; then
|
||||
-dnl Check for SMPEG
|
||||
-AC_CHECK_HEADERS([smpeg/smpeg.h], [
|
||||
- AC_CHECK_LIB(smpeg, SMPEG_new, [
|
||||
- LIBS="-lsmpeg $LIBS"
|
||||
- AC_DEFINE(HAVE_SMPEG, 1, [SMPEG movie playback is enabled])
|
||||
- ])
|
||||
-])
|
||||
-fi
|
||||
+dnl AX_CHECK_FEATURE_LIB(option, define, header, lib, func)
|
||||
+AC_DEFUN([AX_CHECK_FEATURE_LIB],
|
||||
+ [ AS_IF([test "x${with_$1}" != "xno"],
|
||||
+ [ AC_CHECK_HEADERS([$3], [AC_CHECK_LIB([$4], [$5])])
|
||||
+ AS_IF([test "x${ac_cv_lib_$4_$5}" = "xyes"],
|
||||
+ [ have_$1=true
|
||||
+ AC_DEFINE([HAVE_$2], [1], [${desc_$1} enabled]) ],
|
||||
+ [AS_IF([test "x${with_$1}" = "xyes"],
|
||||
+ [AC_MSG_ERROR([${desc_$1} requested but not found])])])
|
||||
+ ]) ])
|
||||
+dnl AX_CHECK_FEATURE_PKG(option, define, package, lib)
|
||||
+AC_DEFUN([AX_CHECK_FEATURE_PKG],
|
||||
+ [ AS_IF([test "x${with_$1}" != "xno"],
|
||||
+ [ PKG_CHECK_MODULES([$3], [$4],
|
||||
+ [ CPPFLAGS="${[$3]_CFLAGS} $CPPFLAGS"
|
||||
+ LIBS="${[$3]_LIBS} $LIBS"
|
||||
+ have_$1=true
|
||||
+ AC_DEFINE([HAVE_$2], [1], [${desc_$1} enabled]) ],
|
||||
+ [AS_IF([test "x${with_$1}" = "xyes"],
|
||||
+ [AC_MSG_ERROR([${desc_$1} requested but not available])])])
|
||||
+
|
||||
+ ])
|
||||
+ AM_CONDITIONAL([HAVE_$2], [test "x${have_$1}" = "xtrue"])
|
||||
+ ])
|
||||
|
||||
-if [[ "x$enable_mad" = "xyes" ]]; then
|
||||
-dnl Check for libmad
|
||||
-AC_CHECK_HEADERS([mad.h], [
|
||||
- AC_CHECK_LIB(mad, mad_stream_init, [
|
||||
- LIBS="-lmad $LIBS"
|
||||
- AC_DEFINE(HAVE_MAD, 1, [MAD mp3 playback is enabled])
|
||||
-])
|
||||
-])
|
||||
-fi
|
||||
+AX_CHECK_FEATURE_LIB([sdl_image], [SDL_IMAGE],
|
||||
+ [SDL_image.h], [SDL_image], [IMG_Load])
|
||||
|
||||
-if [[ "x$enable_sndfile" = "xyes" ]]; then
|
||||
-dnl Check for libsndfile
|
||||
-AC_CHECK_HEADERS([sndfile.h], [
|
||||
- AC_CHECK_LIB(sndfile, sf_open, [
|
||||
- LIBS="-lsndfile $LIBS"
|
||||
- AC_DEFINE(HAVE_SNDFILE, 1, [libsndfile support is enabled])
|
||||
-])
|
||||
-])
|
||||
-fi
|
||||
+AX_CHECK_FEATURE_PKG([ffmpeg], [FFMPEG],
|
||||
+ [FFMPEG], [libavcodec >= 53.61.100 libavformat >= 53.32.100 libavutil >= 51.35.100 libswscale >= 2.1.1])
|
||||
|
||||
-if [[ "x$enable_vorbis" = "xyes" ]]; then
|
||||
-dnl Check for vorbisfile
|
||||
-PKG_CHECK_MODULES([VORBISFILE], [vorbisfile], [
|
||||
- CPPFLAGS="$VORBISFILE_CFLAGS $CPPFLAGS"
|
||||
- LIBS="$VORBISFILE_LIBS $LIBS"
|
||||
- AC_DEFINE(HAVE_VORBISFILE, 1, [vorbis support enabled])
|
||||
-])
|
||||
-fi
|
||||
+AX_CHECK_FEATURE_LIB([mad], [MAD],
|
||||
+ [mad.h], [mad], [mad_stream_init])
|
||||
|
||||
-if [[ "x$enable_ffmpeg" = "xyes" ]]; then
|
||||
-dnl Check for libavcodec
|
||||
-PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 53.61.100 libavformat >= 53.32.100 libavutil >= 51.35.100 libswscale >= 2.1.100], [
|
||||
- CPPFLAGS="$FFMPEG_CFLAGS $CPPFLAGS"
|
||||
- LIBS="$FFMPEG_LIBS $LIBS"
|
||||
- AC_DEFINE(HAVE_FFMPEG, 1, [ffmpeg support enabled])
|
||||
- have_ffmpeg=true
|
||||
-])
|
||||
-fi
|
||||
-AM_CONDITIONAL(HAVE_FFMPEG, test x$have_ffmpeg = xtrue)
|
||||
+AX_CHECK_FEATURE_LIB([sndfile], [SNDFILE],
|
||||
+ [sndfile.h], [sndfile], [sf_open])
|
||||
|
||||
-if [[ "x$enable_lua" = "xyes" ]]; then
|
||||
-AC_DEFINE(HAVE_LUA, 1, [Lua support is enabled])
|
||||
-fi
|
||||
+AX_CHECK_FEATURE_PKG([vorbis], [VORBISFILE],
|
||||
+ [VORBISFILE], [vorbisfile])
|
||||
|
||||
-if [[ "x$enable_speex" = "xyes" ]]; then
|
||||
-dnl Check for Speex
|
||||
-AC_CHECK_HEADERS(speex/speex.h, [
|
||||
- AC_CHECK_LIB(speex, speex_decoder_init, [
|
||||
- LIBS="-lspeex $LIBS"
|
||||
- AC_DEFINE(SPEEX, 1, [Speex support is enabled])
|
||||
- ])
|
||||
- AC_CHECK_LIB(speexdsp, speex_preprocess_state_init, [
|
||||
- LIBS="-lspeexdsp $LIBS"
|
||||
-])
|
||||
-])
|
||||
-fi
|
||||
+AX_CHECK_FEATURE_LIB([smpeg], [SMPEG],
|
||||
+ [smpeg/smpeg.h], [smpeg], [SMPEG_new])
|
||||
|
||||
-if [[ "x$enable_alsa" = "xyes" ]]; then
|
||||
-dnl Check for ALSA
|
||||
-AC_CHECK_HEADERS([alsa/asoundlib.h], [
|
||||
- AC_CHECK_LIB(asound, snd_pcm_open, [
|
||||
- LIBS="-lasound $LIBS"
|
||||
- AC_DEFINE(HAVE_ALSA, 1, [ALSA netmic is enabled])
|
||||
- ])
|
||||
-])
|
||||
-fi
|
||||
+AX_CHECK_FEATURE_LIB([speex], [SPEEX],
|
||||
+ [speex/speex.h], [speex], [speex_decoder_init])
|
||||
+AS_IF([test "x$have_speex" = "xyes"],
|
||||
+ [AC_CHECK_LIB([speexdsp], [speex_preprocess_state_init])])
|
||||
|
||||
-dnl Figure out which OpenGL library to use
|
||||
-case "$target" in
|
||||
- *-*-cygwin* | *-*-mingw32*)
|
||||
- SYS_GL_LIBS="-lGLEW -lopengl32 -lglu32"
|
||||
- LIBS="$LIBS -lstdc++"
|
||||
- ;;
|
||||
- *-*-darwin*)
|
||||
- SYS_GL_LIBS="-F/System/Library/Frameworks -framework AGL -framework OpenGL"
|
||||
- CPPFLAGS="$CPPFLAGS -D__DARWIN__ -F/System/Library/Frameworks -I/System/Library/Frameworks/OpenGL.framework/Headers"
|
||||
- ;;
|
||||
- *-*-linux*)
|
||||
- SYS_GL_LIBS="-lGL -lpthread"
|
||||
- ;;
|
||||
- *)
|
||||
- SYS_GL_LIBS="-lGL"
|
||||
- ;;
|
||||
-esac
|
||||
+AX_CHECK_FEATURE_LIB([alsa], [ALSA],
|
||||
+ [alsa/asoundlib.h], [asound], [snd_pcm_open])
|
||||
|
||||
-dnl Check for OpenGL.
|
||||
-if [[ "x$enable_opengl" = "xyes" ]]; then
|
||||
- AC_MSG_CHECKING(for OpenGL support)
|
||||
- have_opengl=no
|
||||
- AC_TRY_COMPILE([
|
||||
- #ifndef __DARWIN__
|
||||
- #include <GL/gl.h>
|
||||
- #else
|
||||
- #include <OpenGL/gl.h>
|
||||
- #endif
|
||||
- ],[
|
||||
- ],[
|
||||
- have_opengl=yes
|
||||
- ])
|
||||
- AC_MSG_RESULT($have_opengl)
|
||||
- if test x$have_opengl = xyes; then
|
||||
- AC_DEFINE(HAVE_OPENGL, 1, [OpenGL support is enabled])
|
||||
- AC_CHECK_LIB(GLU, gluScaleImage, [SYS_GL_LIBS="$SYS_GL_LIBS -lGLU"], , $SYS_GL_LIBS)
|
||||
- LIBS="$LIBS $SYS_GL_LIBS"
|
||||
- AC_CHECK_HEADERS(GL/glext.h, [], [], [#include <GL/gl.h>])
|
||||
- make_opengl=true
|
||||
- else
|
||||
- AC_MSG_WARN([Could not find OpenGL, ignoring --enable-opengl.])
|
||||
- make_opengl=false
|
||||
- fi
|
||||
-fi
|
||||
-AM_CONDITIONAL(MAKE_OPENGL, test x$make_opengl = xtrue)
|
||||
+AX_CHECK_FEATURE_PKG([zzip], [ZZIP],
|
||||
+ [ZZIP], [zziplib >= 0.10.75])
|
||||
+AM_CONDITIONAL([BUILD_ZZIP_RWOPS], [test "x$have_zzip" = "xtrue"])
|
||||
|
||||
-dnl Set target system name.
|
||||
-AC_DEFINE_UNQUOTED(TARGET_PLATFORM, "$target_os $target_cpu", [Target platform name])
|
||||
+AX_CHECK_FEATURE_PKG([png], [PNG],
|
||||
+ [PNG], [libpng])
|
||||
|
||||
-dnl add some windows goodies
|
||||
-case $target in
|
||||
-*-*-mingw32*)
|
||||
- make_windows=true
|
||||
- AC_DEFINE(WIN32_DISABLE_MUSIC, 1, [Win32 music is disabled])
|
||||
- LIBS="$LIBS -ldsound -lwsock32"
|
||||
- ;;
|
||||
-*)
|
||||
- make_windows=false ;;
|
||||
-esac
|
||||
-AM_CONDITIONAL(MAKE_WINDOWS, test x$make_windows = xtrue)
|
||||
|
||||
-
|
||||
dnl Generate Makefiles.
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
@@ -321,5 +249,32 @@
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
-dnl Print summary.
|
||||
-echo "Configuration done. Now type \"make\"."
|
||||
+dnl Print summary of enabled/disabled options.
|
||||
+
|
||||
+dnl AX_PRINT_SUMMARY(option)
|
||||
+AC_DEFUN([AX_PRINT_SUMMARY],
|
||||
+ [ AS_IF([test "x${have_$1}" = "xtrue"],
|
||||
+ [AS_ECHO([" Enabled: ${desc_$1}"])],
|
||||
+ [test "x${enable_$1}" = "xno" ||
|
||||
+ test "x${with_$1}" = "xno"],
|
||||
+ [AS_ECHO([" Disabled: ${desc_$1}"])],
|
||||
+ [AS_ECHO([" Not found: ${desc_$1}"])])
|
||||
+ ])
|
||||
+
|
||||
+AS_ECHO([""])
|
||||
+AS_ECHO(["Summary of optional features:"])
|
||||
+AS_ECHO([""])
|
||||
+AX_PRINT_SUMMARY([opengl])
|
||||
+AX_PRINT_SUMMARY([lua])
|
||||
+AX_PRINT_SUMMARY([sdl_image])
|
||||
+AX_PRINT_SUMMARY([ffmpeg])
|
||||
+AX_PRINT_SUMMARY([mad])
|
||||
+AX_PRINT_SUMMARY([sndfile])
|
||||
+AX_PRINT_SUMMARY([vorbis])
|
||||
+AX_PRINT_SUMMARY([smpeg])
|
||||
+AX_PRINT_SUMMARY([speex])
|
||||
+AX_PRINT_SUMMARY([alsa])
|
||||
+AX_PRINT_SUMMARY([zzip])
|
||||
+AX_PRINT_SUMMARY([png])
|
||||
+AS_ECHO([""])
|
||||
+AS_ECHO(["Configuration done. Now type \"make\"."])
|
|
@ -0,0 +1,193 @@
|
|||
Index: Source_Files/FFmpeg/Movie.cpp
|
||||
===================================================================
|
||||
--- Source_Files/FFmpeg/Movie.cpp (revision 5036)
|
||||
+++ Source_Files/FFmpeg/Movie.cpp (revision 5037)
|
||||
@@ -138,6 +138,9 @@
|
||||
AVFormatContext *fmt_ctx;
|
||||
int video_stream_idx;
|
||||
int audio_stream_idx;
|
||||
+
|
||||
+ size_t video_counter;
|
||||
+ size_t audio_counter;
|
||||
};
|
||||
typedef struct libav_vars libav_vars_t;
|
||||
|
||||
@@ -495,6 +498,7 @@
|
||||
audio_stream->codec->codec_id = audio_codec->id;
|
||||
audio_stream->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||
audio_stream->codec->sample_rate = mx->obtained.freq;
|
||||
+ audio_stream->codec->time_base = (AVRational){1, mx->obtained.freq};
|
||||
audio_stream->codec->channels = 2;
|
||||
|
||||
if (av->fmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
|
||||
@@ -507,19 +511,8 @@
|
||||
audio_stream->codec->global_quality = FF_QP2LAMBDA * (aq / 10);
|
||||
audio_stream->codec->flags |= CODEC_FLAG_QSCALE;
|
||||
|
||||
- // find correct sample format
|
||||
- audio_stream->codec->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
+ audio_stream->codec->sample_fmt = AV_SAMPLE_FMT_FLTP;
|
||||
success = (0 <= avcodec_open2(audio_stream->codec, audio_codec, NULL));
|
||||
- if (!success)
|
||||
- {
|
||||
- audio_stream->codec->sample_fmt = AV_SAMPLE_FMT_FLT;
|
||||
- success = (0 <= avcodec_open2(audio_stream->codec, audio_codec, NULL));
|
||||
- }
|
||||
- if (!success)
|
||||
- {
|
||||
- audio_stream->codec->sample_fmt = AV_SAMPLE_FMT_FLTP;
|
||||
- success = (0 <= avcodec_open2(audio_stream->codec, audio_codec, NULL));
|
||||
- }
|
||||
if (!success) err_msg = "Could not open audio codec";
|
||||
}
|
||||
if (success)
|
||||
@@ -568,6 +561,7 @@
|
||||
if (success)
|
||||
{
|
||||
video_stream->time_base = (AVRational){1, TICKS_PER_SECOND};
|
||||
+ audio_stream->time_base = (AVRational){1, mx->obtained.freq};
|
||||
avformat_write_header(av->fmt_ctx, NULL);
|
||||
}
|
||||
|
||||
@@ -625,7 +619,7 @@
|
||||
|
||||
sws_scale(av->sws_ctx, pdata, pitch, 0, temp_surface->h,
|
||||
av->video_frame->data, av->video_frame->linesize);
|
||||
- av->video_frame->pts = vcodec->frame_number;
|
||||
+ av->video_frame->pts = av->video_counter++;
|
||||
frame = av->video_frame;
|
||||
}
|
||||
|
||||
@@ -638,33 +632,22 @@
|
||||
pkt.data = av->video_buf;
|
||||
pkt.size = av->video_bufsize;
|
||||
|
||||
-#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,0,0)
|
||||
- int vsize = avcodec_encode_video(vcodec, av->video_buf, av->video_bufsize, frame);
|
||||
- if (vsize > 0)
|
||||
- {
|
||||
- if (vcodec->coded_frame->pts != AV_NOPTS_VALUE)
|
||||
- {
|
||||
- pkt.pts = av_rescale_q(vcodec->coded_frame->pts,
|
||||
- vcodec->time_base,
|
||||
- vstream->time_base);
|
||||
- }
|
||||
- if (vcodec->coded_frame->key_frame)
|
||||
- pkt.flags |= AV_PKT_FLAG_KEY;
|
||||
- pkt.size = vsize;
|
||||
- }
|
||||
-
|
||||
-#else
|
||||
int got_packet = 0;
|
||||
int vsize = avcodec_encode_video2(vcodec, &pkt, frame, &got_packet);
|
||||
-#endif
|
||||
- if (vsize > 0)
|
||||
+ if (vsize == 0 && got_packet)
|
||||
{
|
||||
+ if (pkt.pts != AV_NOPTS_VALUE && pkt.pts < pkt.dts)
|
||||
+ pkt.pts = pkt.dts;
|
||||
+ if (pkt.pts != AV_NOPTS_VALUE)
|
||||
+ pkt.pts = av_rescale_q(pkt.pts, vcodec->time_base, vstream->time_base);
|
||||
+ if (pkt.dts != AV_NOPTS_VALUE)
|
||||
+ pkt.dts = av_rescale_q(pkt.dts, vcodec->time_base, vstream->time_base);
|
||||
+ pkt.duration = av_rescale_q(pkt.duration, vcodec->time_base, vstream->time_base);
|
||||
pkt.stream_index = vstream->index;
|
||||
av_interleaved_write_frame(av->fmt_ctx, &pkt);
|
||||
+ av_free_packet(&pkt);
|
||||
}
|
||||
- av_free_packet(&pkt);
|
||||
-
|
||||
- if (!last || vsize <= 0)
|
||||
+ if (!last || vsize < 0 || !got_packet)
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
@@ -712,6 +695,10 @@
|
||||
av_frame_unref(av->audio_frame);
|
||||
#endif
|
||||
av->audio_frame->nb_samples = write_samples;
|
||||
+ av->audio_frame->pts = av_rescale_q(av->audio_counter,
|
||||
+ (AVRational){1, acodec->sample_rate},
|
||||
+ acodec->time_base);
|
||||
+ av->audio_counter += write_samples;
|
||||
int asize = avcodec_fill_audio_frame(av->audio_frame, acodec->channels,
|
||||
acodec->sample_fmt,
|
||||
av->audio_data_conv,
|
||||
@@ -726,24 +713,57 @@
|
||||
if (0 == avcodec_encode_audio2(acodec, &pkt, av->audio_frame, &got_pkt)
|
||||
&& got_pkt)
|
||||
{
|
||||
- if (acodec->coded_frame && acodec->coded_frame->pts != AV_NOPTS_VALUE)
|
||||
- {
|
||||
- pkt.pts = av_rescale_q(acodec->coded_frame->pts,
|
||||
- acodec->time_base,
|
||||
- astream->time_base);
|
||||
- }
|
||||
+ if (pkt.pts != AV_NOPTS_VALUE && pkt.pts < pkt.dts)
|
||||
+ pkt.pts = pkt.dts;
|
||||
+ if (pkt.pts != AV_NOPTS_VALUE)
|
||||
+ pkt.pts = av_rescale_q(pkt.pts, acodec->time_base, astream->time_base);
|
||||
+ if (pkt.dts != AV_NOPTS_VALUE)
|
||||
+ pkt.dts = av_rescale_q(pkt.dts, acodec->time_base, astream->time_base);
|
||||
+ pkt.duration = av_rescale_q(pkt.duration, acodec->time_base, astream->time_base);
|
||||
pkt.stream_index = astream->index;
|
||||
- pkt.flags |= AV_PKT_FLAG_KEY;
|
||||
av_interleaved_write_frame(av->fmt_ctx, &pkt);
|
||||
av_free_packet(&pkt);
|
||||
}
|
||||
}
|
||||
}
|
||||
+ if (last)
|
||||
+ {
|
||||
+ bool done = false;
|
||||
+ while (!done)
|
||||
+ {
|
||||
+ AVPacket pkt;
|
||||
+ memset(&pkt, 0, sizeof(AVPacket));
|
||||
+ av_init_packet(&pkt);
|
||||
+
|
||||
+ int got_pkt = 0;
|
||||
+ if (0 == avcodec_encode_audio2(acodec, &pkt, NULL, &got_pkt)
|
||||
+ && got_pkt)
|
||||
+ {
|
||||
+ if (pkt.pts != AV_NOPTS_VALUE && pkt.pts < pkt.dts)
|
||||
+ pkt.pts = pkt.dts;
|
||||
+ if (pkt.pts != AV_NOPTS_VALUE)
|
||||
+ pkt.pts = av_rescale_q(pkt.pts, acodec->time_base, astream->time_base);
|
||||
+ if (pkt.dts != AV_NOPTS_VALUE)
|
||||
+ pkt.dts = av_rescale_q(pkt.dts, acodec->time_base, astream->time_base);
|
||||
+ pkt.duration = av_rescale_q(pkt.duration, acodec->time_base, astream->time_base);
|
||||
+ pkt.stream_index = astream->index;
|
||||
+ av_interleaved_write_frame(av->fmt_ctx, &pkt);
|
||||
+ av_free_packet(&pkt);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ done = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
|
||||
}
|
||||
|
||||
void Movie::EncodeThread()
|
||||
{
|
||||
+ av->video_counter = 0;
|
||||
+ av->audio_counter = 0;
|
||||
while (true)
|
||||
{
|
||||
SDL_SemWait(encodeReady);
|
||||
Index: configure.ac
|
||||
===================================================================
|
||||
--- configure.ac (revision 5036)
|
||||
+++ configure.ac (revision 5037)
|
||||
@@ -191,7 +191,7 @@
|
||||
[SDL_image.h], [SDL_image], [IMG_Load])
|
||||
|
||||
AX_CHECK_FEATURE_PKG([ffmpeg], [FFMPEG],
|
||||
- [FFMPEG], [libavcodec >= 53.61.100 libavformat >= 53.32.100 libavutil >= 51.35.100 libswscale >= 2.1.1])
|
||||
+ [FFMPEG], [libavcodec >= 54.35.0 libavformat >= 54.20.0 libavutil >= 52.3.0 libswscale >= 2.1.1])
|
||||
|
||||
AX_CHECK_FEATURE_LIB([mad], [MAD],
|
||||
[mad.h], [mad], [mad_stream_init])
|
Loading…
Reference in New Issue