Open risi70 opened 8 years ago
Compatibility issues with ffmpeg-libraries cause compilation to fail under Ubuntu 16.04. Fixes are well known and implemented in the included patch:
diff -u -r -x .git NeutrinoRDP/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c NeutrinoRDP-patched/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c --- NeutrinoRDP/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2016-05-20 05:02:13.719006000 +0200 +++ NeutrinoRDP-patched/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2016-05-20 05:12:43.087006000 +0200 @@ -35,12 +35,22 @@ #define AVMEDIA_TYPE_AUDIO 1 #endif +/* New Distros */ +#if LIBAVUTIL_VERSION_MAJOR >= 54 +#define DISTRO_UBUNTU1604 +#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 +#endif + typedef struct _TSMFFFmpegDecoder { ITSMFDecoder iface; int media_type; +#ifdef DISTRO_UBUNTU1604 + enum AVCodecID codec_id; +#else enum CodecID codec_id; +#endif AVCodecContext* codec_context; AVCodec* codec; AVFrame* frame; @@ -75,7 +85,11 @@ mdecoder->codec_context->time_base.den = media_type->SamplesPerSecond.Numerator; mdecoder->codec_context->time_base.num = media_type->SamplesPerSecond.Denominator; - mdecoder->frame = avcodec_alloc_frame(); +#ifdef DISTRO_UBUNTU1604 + mdecoder->frame = av_frame_alloc(); +#else + mdecoder->frame = avcodec_alloc_frame(); +#endif return true; } @@ -89,8 +103,12 @@ mdecoder->codec_context->channels = media_type->Channels; mdecoder->codec_context->block_align = media_type->BlockAlign; +/* Quite inelegant ifdef construct, but keeps compatibility with older distros */ +#ifdef DISTRO_UBUNTU1604 + av_force_cpu_flags(AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2); +#else #ifdef AV_CPU_FLAG_SSE2 - mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2; + mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2; #else #if LIBAVCODEC_VERSION_MAJOR < 53 mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMXEXT; @@ -98,6 +116,7 @@ mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMX2; #endif #endif +#endif return true; } @@ -345,7 +364,13 @@ mdecoder->decoded_size = avpicture_get_size(mdecoder->codec_context->pix_fmt, mdecoder->codec_context->width, mdecoder->codec_context->height); mdecoder->decoded_data = xzalloc(mdecoder->decoded_size); - frame = avcodec_alloc_frame(); + +#ifdef DISTRO_UBUNTU1604 + frame = av_frame_alloc(); +#else + frame = avcodec_alloc_frame(); +#endif + avpicture_fill((AVPicture *) frame, mdecoder->decoded_data, mdecoder->codec_context->pix_fmt, mdecoder->codec_context->width, mdecoder->codec_context->height); @@ -418,7 +443,13 @@ (int16_t*) dst, &frame_size, src, src_size); #else { - AVFrame* decoded_frame = avcodec_alloc_frame(); + +#ifdef DISTRO_UBUNTU1604 + AVFrame* decoded_frame = av_frame_alloc(); +#else + AVFrame* decoded_frame = avcodec_alloc_frame(); +#endif + int got_frame = 0; AVPacket pkt; av_init_packet(&pkt); diff -u -r -x .git NeutrinoRDP/channels/xrdpvr/xrdpvr_player.c NeutrinoRDP-patched/channels/xrdpvr/xrdpvr_player.c --- NeutrinoRDP/channels/xrdpvr/xrdpvr_player.c 2016-05-20 05:02:13.731006000 +0200 +++ NeutrinoRDP-patched/channels/xrdpvr/xrdpvr_player.c 2016-05-16 18:35:06.261905406 +0200 @@ -107,7 +107,7 @@ #define DISTRO_UBUNTU1404 #endif -#if LIBAVCODEC_VERSION_MAJOR == 56 && LIBAVCODEC_VERSION_MINOR == 26 +#if LIBAVCODEC_VERSION_MAJOR == 56 && LIBAVCODEC_VERSION_MINOR >= 13 #define DISTRO_DEBIAN8 #endif
Compatibility issues with ffmpeg-libraries cause compilation to fail under Ubuntu 16.04. Fixes are well known and implemented in the included patch: