From d7cbc3b5cbadafef4a1469de1a8389e3621d6513 Mon Sep 17 00:00:00 2001 From: David Spencer Date: Wed, 27 May 2015 10:58:53 +0100 Subject: games/alephone: Patched for ffmpeg-2.6.3. Signed-off-by: David Spencer Signed-off-by: Heinz Wiesinger Signed-off-by: Willy Sudiarto Raharjo --- games/alephone/r5009.diff | 385 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 385 insertions(+) create mode 100644 games/alephone/r5009.diff (limited to 'games/alephone/r5009.diff') diff --git a/games/alephone/r5009.diff b/games/alephone/r5009.diff new file mode 100644 index 0000000000..39f9e648cf --- /dev/null +++ b/games/alephone/r5009.diff @@ -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; -- cgit v1.2.3