slackbuilds_ponce/games/alephone/r5009.diff
David Spencer d7cbc3b5cb 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>
2015-06-20 11:55:24 +07:00

385 lines
12 KiB
Diff

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;