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:
David Spencer 2015-05-27 10:58:53 +01:00 committed by Willy Sudiarto Raharjo
parent 7ec02b8f86
commit d7cbc3b5cb
6 changed files with 1127 additions and 0 deletions

View file

@ -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

385
games/alephone/r5009.diff Normal file
View file

@ -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;

13
games/alephone/r5010.diff Normal file
View file

@ -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])

14
games/alephone/r5013.diff Normal file
View file

@ -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

514
games/alephone/r5033.diff Normal file
View file

@ -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\"."])

193
games/alephone/r5037.diff Normal file
View file

@ -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])