From b9b28fe5e5935dccc94539383cba437071a4254c Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Sun, 17 Feb 2019 21:59:41 -0500 Subject: media-tv/kodi: ffmpeg 3.4.5 fixes, don't unbundle fonts Bug: https://bugs.gentoo.org/678222 Closes: https://bugs.gentoo.org/669204 Package-Manager: Portage-2.3.60, Repoman-2.3.12 Signed-off-by: Craig Andrews --- ...adapt-to-deprecated-symbols-and-functions.patch | 401 +++++++++++++++++++++ .../kodi-17-fix-audio-with-latest-ffmpeg.patch | 15 + media-tv/kodi/kodi-17.6-r10.ebuild | 278 ++++++++++++++ 3 files changed, 694 insertions(+) create mode 100644 media-tv/kodi/files/kodi-17-adapt-to-deprecated-symbols-and-functions.patch create mode 100644 media-tv/kodi/files/kodi-17-fix-audio-with-latest-ffmpeg.patch create mode 100644 media-tv/kodi/kodi-17.6-r10.ebuild diff --git a/media-tv/kodi/files/kodi-17-adapt-to-deprecated-symbols-and-functions.patch b/media-tv/kodi/files/kodi-17-adapt-to-deprecated-symbols-and-functions.patch new file mode 100644 index 000000000000..0ec08810db5e --- /dev/null +++ b/media-tv/kodi/files/kodi-17-adapt-to-deprecated-symbols-and-functions.patch @@ -0,0 +1,401 @@ +From 19f28e88a5dfed82e9844f69210f7c045f18ca8e Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Wed, 1 Nov 2017 16:12:13 +0100 +Subject: [PATCH] ffmpeg: drop deprecated symbols and functions + +--- + xbmc/cdrip/EncoderFFmpeg.cpp | 4 +- + .../AudioEngine/Encoders/AEEncoderFFmpeg.h | 2 +- + .../AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 2 +- + .../Engines/ActiveAE/ActiveAEFilter.cpp | 6 +-- + .../DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp | 6 +-- + .../Overlay/DVDOverlayCodecFFmpeg.cpp | 2 +- + .../DVDCodecs/Video/DVDVideoCodec.h | 1 + + .../DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp | 39 +++++-------------- + .../DVDCodecs/Video/DVDVideoPPFFmpeg.cpp | 5 +-- + .../VideoPlayer/DVDCodecs/Video/VAAPI.cpp | 4 +- + .../DVDDemuxers/DVDDemuxClient.cpp | 6 +-- + .../DVDDemuxers/DVDDemuxFFmpeg.cpp | 6 +-- + .../VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp | 4 +- + xbmc/cores/VideoPlayer/VideoPlayerVideo.cpp | 1 - + xbmc/guilib/FFmpegImage.cpp | 4 +- + xbmc/utils/BitstreamConverter.cpp | 12 +++--- + 16 files changed, 40 insertions(+), 64 deletions(-) + +Index: kodi-17.6+dfsg1/xbmc/cdrip/EncoderFFmpeg.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cdrip/EncoderFFmpeg.cpp ++++ kodi-17.6+dfsg1/xbmc/cdrip/EncoderFFmpeg.cpp +@@ -119,8 +119,8 @@ + + if(m_Format->oformat->flags & AVFMT_GLOBALHEADER) + { +- m_CodecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER; +- m_Format->flags |= CODEC_FLAG_GLOBAL_HEADER; ++ m_CodecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; ++ m_Format->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; + } + + switch(m_iInBitsPerSample) +Index: kodi-17.6+dfsg1/xbmc/cores/AudioEngine/Encoders/AEEncoderFFmpeg.h +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/AudioEngine/Encoders/AEEncoderFFmpeg.h ++++ kodi-17.6+dfsg1/xbmc/cores/AudioEngine/Encoders/AEEncoderFFmpeg.h +@@ -56,7 +56,7 @@ + SwrContext *m_SwrCtx; + CAEChannelInfo m_Layout; + AVPacket m_Pkt; +- uint8_t m_Buffer[8 + FF_MIN_BUFFER_SIZE]; ++ uint8_t m_Buffer[8 + AV_INPUT_BUFFER_MIN_SIZE]; + int m_BufferSize; + int m_OutputSize; + double m_OutputRatio; +Index: kodi-17.6+dfsg1/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +@@ -2955,7 +2955,7 @@ + int fileSize = sound->GetFileSize(); + + fmt_ctx = avformat_alloc_context(); +- unsigned char* buffer = (unsigned char*)av_malloc(SOUNDBUFFER_SIZE+FF_INPUT_BUFFER_PADDING_SIZE); ++ unsigned char* buffer = (unsigned char*)av_malloc(SOUNDBUFFER_SIZE+AV_INPUT_BUFFER_PADDING_SIZE); + io_ctx = avio_alloc_context(buffer, SOUNDBUFFER_SIZE, 0, + sound, CActiveAESound::Read, NULL, CActiveAESound::Seek); + io_ctx->max_packet_size = sound->GetChunkSize(); +Index: kodi-17.6+dfsg1/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEFilter.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEFilter.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEFilter.cpp +@@ -91,8 +91,8 @@ + return false; + } + +- AVFilter* srcFilter = avfilter_get_by_name("abuffer"); +- AVFilter* outFilter = avfilter_get_by_name("abuffersink"); ++ const AVFilter* srcFilter = avfilter_get_by_name("abuffer"); ++ const AVFilter* outFilter = avfilter_get_by_name("abuffersink"); + + std::string args = StringUtils::Format("time_base=1/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%" PRIx64, + m_sampleRate, +@@ -121,7 +121,7 @@ + + bool CActiveAEFilter::CreateAtempoFilter() + { +- AVFilter *atempo; ++ const AVFilter *atempo; + + atempo = avfilter_get_by_name("atempo"); + m_pFilterCtxAtempo = avfilter_graph_alloc_filter(m_pFilterGraph, atempo, "atempo"); +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp +@@ -82,8 +82,8 @@ + m_pCodecContext->debug = 0; + m_pCodecContext->workaround_bugs = 1; + +- if (pCodec->capabilities & CODEC_CAP_TRUNCATED) +- m_pCodecContext->flags |= CODEC_FLAG_TRUNCATED; ++ if (pCodec->capabilities & AV_CODEC_CAP_TRUNCATED) ++ m_pCodecContext->flags |= AV_CODEC_FLAG_TRUNCATED; + + m_matrixEncoding = AV_MATRIX_ENCODING_NONE; + m_channels = 0; +@@ -98,7 +98,7 @@ + + if( hints.extradata && hints.extrasize > 0 ) + { +- m_pCodecContext->extradata = (uint8_t*)av_mallocz(hints.extrasize + FF_INPUT_BUFFER_PADDING_SIZE); ++ m_pCodecContext->extradata = (uint8_t*)av_mallocz(hints.extrasize + AV_INPUT_BUFFER_PADDING_SIZE); + if(m_pCodecContext->extradata) + { + m_pCodecContext->extradata_size = hints.extrasize; +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp +@@ -73,7 +73,7 @@ + if( hints.extradata && hints.extrasize > 0 ) + { + m_pCodecContext->extradata_size = hints.extrasize; +- m_pCodecContext->extradata = (uint8_t*)av_mallocz(hints.extrasize + FF_INPUT_BUFFER_PADDING_SIZE); ++ m_pCodecContext->extradata = (uint8_t*)av_mallocz(hints.extrasize + AV_INPUT_BUFFER_PADDING_SIZE); + memcpy(m_pCodecContext->extradata, hints.extradata, hints.extrasize); + + // start parsing of extra data - create a copy to be safe and make it zero-terminating to avoid access violations! +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodec.h +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodec.h ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodec.h +@@ -118,6 +118,7 @@ + int8_t* qp_table; //< Quantization parameters, primarily used by filters + int qstride; + int qscale_type; ++ int pict_type; + + unsigned int iWidth; + unsigned int iHeight; +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp +@@ -171,7 +171,7 @@ + ctx->SetHardware(NULL); + avctx->get_buffer2 = avcodec_default_get_buffer2; + avctx->slice_flags = 0; +- avctx->hwaccel_context = 0; ++ av_buffer_unref(&avctx->hw_frames_ctx); + } + + const AVPixelFormat * cur = fmt; +@@ -382,16 +382,6 @@ + else + m_decoderState = STATE_SW_SINGLE; + +-#if defined(TARGET_DARWIN_IOS) +- // ffmpeg with enabled neon will crash and burn if this is enabled +- m_pCodecContext->flags &= CODEC_FLAG_EMU_EDGE; +-#else +- if (pCodec->id != AV_CODEC_ID_H264 && pCodec->capabilities & CODEC_CAP_DR1 +- && pCodec->id != AV_CODEC_ID_VP8 +- ) +- m_pCodecContext->flags |= CODEC_FLAG_EMU_EDGE; +-#endif +- + // if we don't do this, then some codecs seem to fail. + m_pCodecContext->coded_height = hints.height; + m_pCodecContext->coded_width = hints.width; +@@ -400,7 +390,7 @@ + if( hints.extradata && hints.extrasize > 0 ) + { + m_pCodecContext->extradata_size = hints.extrasize; +- m_pCodecContext->extradata = (uint8_t*)av_mallocz(hints.extrasize + FF_INPUT_BUFFER_PADDING_SIZE); ++ m_pCodecContext->extradata = (uint8_t*)av_mallocz(hints.extrasize + AV_INPUT_BUFFER_PADDING_SIZE); + memcpy(m_pCodecContext->extradata, hints.extradata, hints.extrasize); + } + +@@ -791,6 +781,7 @@ + m_droppedFrames = 0; + m_iLastKeyframe = m_pCodecContext->has_b_frames; + avcodec_flush_buffers(m_pCodecContext); ++ av_frame_unref(m_pFrame); + + if (m_pHardware) + m_pHardware->Reset(); +@@ -883,22 +874,10 @@ + pDvdVideoPicture->color_range = 0; + + int qscale_type; +- pDvdVideoPicture->qp_table = av_frame_get_qp_table(m_pFrame, &pDvdVideoPicture->qstride, &qscale_type); +- +- switch (qscale_type) +- { +- case FF_QSCALE_TYPE_MPEG1: +- pDvdVideoPicture->qscale_type = DVP_QSCALE_MPEG1; +- break; +- case FF_QSCALE_TYPE_MPEG2: +- pDvdVideoPicture->qscale_type = DVP_QSCALE_MPEG2; +- break; +- case FF_QSCALE_TYPE_H264: +- pDvdVideoPicture->qscale_type = DVP_QSCALE_H264; +- break; +- default: +- pDvdVideoPicture->qscale_type = DVP_QSCALE_UNKNOWN; +- } ++ pDvdVideoPicture->qp_table = av_frame_get_qp_table(m_pFrame, ++ &pDvdVideoPicture->qstride, ++ &pDvdVideoPicture->qscale_type); ++ pDvdVideoPicture->pict_type = m_pFrame->pict_type; + + if (pDvdVideoPicture->iRepeatPicture) + pDvdVideoPicture->dts = DVD_NOPTS_VALUE; +@@ -989,8 +968,8 @@ + return -1; + } + +- AVFilter* srcFilter = avfilter_get_by_name("buffer"); +- AVFilter* outFilter = avfilter_get_by_name("buffersink"); // should be last filter in the graph for now ++ const AVFilter* srcFilter = avfilter_get_by_name("buffer"); ++ const AVFilter* outFilter = avfilter_get_by_name("buffersink"); // should be last filter in the graph for now + + std::string args = StringUtils::Format("%d:%d:%d:%d:%d:%d:%d", + m_pCodecContext->width, +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoPPFFmpeg.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoPPFFmpeg.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoPPFFmpeg.cpp +@@ -132,15 +132,12 @@ + } + } + +- int pict_type = (m_pSource->qscale_type != DVP_QSCALE_MPEG1) ? +- PP_PICT_TYPE_QP2 : 0; +- + pp_postprocess((const uint8_t**)m_pSource->data, m_pSource->iLineSize, + m_pTarget->data, m_pTarget->iLineSize, + m_pSource->iWidth, m_pSource->iHeight, + m_pSource->qp_table, m_pSource->qstride, + m_pMode, m_pContext, +- pict_type); //m_pSource->iFrameType); ++ m_pSource->pict_type | m_pSource->qscale_type ? PP_PICT_TYPE_QP2 : 0); + + //Copy frame information over to target, but make sure it is set as allocated should decoder have forgotten + m_pTarget->iFlags = m_pSource->iFlags | DVP_FLAG_ALLOCATED; +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp +@@ -3090,8 +3090,8 @@ + return false; + } + +- AVFilter* srcFilter = avfilter_get_by_name("buffer"); +- AVFilter* outFilter = avfilter_get_by_name("buffersink"); ++ const AVFilter* srcFilter = avfilter_get_by_name("buffer"); ++ const AVFilter* outFilter = avfilter_get_by_name("buffersink"); + + std::string args = StringUtils::Format("%d:%d:%d:%d:%d:%d:%d", + m_config.vidWidth, +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp +@@ -25,7 +25,7 @@ + #include "settings/Settings.h" + #include "../DVDClock.h" + +-#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE) ++#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE) + + + class CDemuxStreamClientInternal +@@ -179,9 +179,9 @@ + st->changes++; + st->disabled = false; + st->ExtraSize = len; +- st->ExtraData = new uint8_t[len+FF_INPUT_BUFFER_PADDING_SIZE]; ++ st->ExtraData = new uint8_t[len+AV_INPUT_BUFFER_PADDING_SIZE]; + memcpy(st->ExtraData, pkt->pData, len); +- memset((uint8_t*)st->ExtraData + len, 0 , FF_INPUT_BUFFER_PADDING_SIZE); ++ memset((uint8_t*)st->ExtraData + len, 0 , AV_INPUT_BUFFER_PADDING_SIZE); + stream->m_parser_split = false; + } + } +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -78,7 +78,7 @@ + {} + }; + +-#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE) ++#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE) + + std::string CDemuxStreamAudioFFmpeg::GetStreamName() + { +@@ -1881,12 +1881,12 @@ + // Found extradata, fill it in. This will cause + // a new stream to be created and used. + st->codec->extradata_size = i; +- st->codec->extradata = (uint8_t*)av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); ++ st->codec->extradata = (uint8_t*)av_malloc(st->codec->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (st->codec->extradata) + { + CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); + memcpy(st->codec->extradata, pkt->data, st->codec->extradata_size); +- memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ memset(st->codec->extradata + i, 0, AV_INPUT_BUFFER_PADDING_SIZE); + } + else + { +Index: kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp ++++ kodi-17.6+dfsg1/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp +@@ -68,7 +68,7 @@ + * Note, if the first 23 bits of the additional bytes are not 0 then damaged + * MPEG bitstreams could cause overread and segfault + */ +- pPacket->pData =(uint8_t*)_aligned_malloc(iDataSize + FF_INPUT_BUFFER_PADDING_SIZE, 16); ++ pPacket->pData =(uint8_t*)_aligned_malloc(iDataSize + AV_INPUT_BUFFER_PADDING_SIZE, 16); + if (!pPacket->pData) + { + FreeDemuxPacket(pPacket); +@@ -76,7 +76,7 @@ + } + + // reset the last 8 bytes to 0; +- memset(pPacket->pData + iDataSize, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ memset(pPacket->pData + iDataSize, 0, AV_INPUT_BUFFER_PADDING_SIZE); + } + + // setup defaults +Index: kodi-17.6+dfsg1/xbmc/guilib/FFmpegImage.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/guilib/FFmpegImage.cpp ++++ kodi-17.6+dfsg1/xbmc/guilib/FFmpegImage.cpp +@@ -551,7 +551,7 @@ + tdm.avOutctx->time_base.num = 1; + tdm.avOutctx->time_base.den = 1; + tdm.avOutctx->pix_fmt = jpg_output ? AV_PIX_FMT_YUVJ420P : AV_PIX_FMT_RGBA; +- tdm.avOutctx->flags = CODEC_FLAG_QSCALE; ++ tdm.avOutctx->flags = AV_CODEC_FLAG_QSCALE; + tdm.avOutctx->mb_lmin = tdm.avOutctx->qmin * FF_QP2LAMBDA; + tdm.avOutctx->mb_lmax = tdm.avOutctx->qmax * FF_QP2LAMBDA; + tdm.avOutctx->global_quality = tdm.avOutctx->qmin * FF_QP2LAMBDA; +Index: kodi-17.6+dfsg1/xbmc/utils/BitstreamConverter.cpp +=================================================================== +--- kodi-17.6+dfsg1.orig/xbmc/utils/BitstreamConverter.cpp ++++ kodi-17.6+dfsg1/xbmc/utils/BitstreamConverter.cpp +@@ -686,13 +686,13 @@ + unit_size = extradata[0] << 8 | extradata[1]; + total_size += unit_size + 4; + +- if (total_size > INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE || ++ if (total_size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE || + (extradata + 2 + unit_size) > ((uint8_t*)in_extradata + in_extrasize)) + { + av_free(out); + return false; + } +- tmp = av_realloc(out, total_size + FF_INPUT_BUFFER_PADDING_SIZE); ++ tmp = av_realloc(out, total_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!tmp) + { + av_free(out); +@@ -713,7 +713,7 @@ + } + + if (out) +- memset(out + total_size, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ memset(out + total_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); + + if (!sps_seen) + CLog::Log(LOGDEBUG, "SPS NALU missing or invalid. The resulting stream may not play"); +@@ -776,13 +776,13 @@ + } + total_size += unit_size + 4; + +- if (total_size > INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE || ++ if (total_size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE || + (extradata + unit_size) > ((uint8_t*)in_extradata + in_extrasize)) + { + av_free(out); + return false; + } +- tmp = av_realloc(out, total_size + FF_INPUT_BUFFER_PADDING_SIZE); ++ tmp = av_realloc(out, total_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!tmp) + { + av_free(out); +@@ -796,7 +796,7 @@ + } + + if (out) +- memset(out + total_size, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ memset(out + total_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); + + if (!sps_seen) + CLog::Log(LOGDEBUG, "SPS NALU missing or invalid. The resulting stream may not play"); diff --git a/media-tv/kodi/files/kodi-17-fix-audio-with-latest-ffmpeg.patch b/media-tv/kodi/files/kodi-17-fix-audio-with-latest-ffmpeg.patch new file mode 100644 index 000000000000..5f5e613bed2d --- /dev/null +++ b/media-tv/kodi/files/kodi-17-fix-audio-with-latest-ffmpeg.patch @@ -0,0 +1,15 @@ +From: Stefan Hachmann +To: 881536@bugs.debian.org +Subject: Re: Bug#881536: ffmpeg: Breaks sound in kodi + +--- a/xbmc/cores/VideoPlayer/VideoPlayerAudio.cpp ++++ b/xbmc/cores/VideoPlayer/VideoPlayerAudio.cpp +@@ -486,7 +486,7 @@ + // guess next pts + m_audioClock += audioframe.duration; + +- int ret = m_pAudioCodec->Decode(nullptr, 0, DVD_NOPTS_VALUE, DVD_NOPTS_VALUE); ++ int ret = 0; + if (ret < 0) + { + CLog::Log(LOGERROR, "CVideoPlayerAudio::DecodeFrame - Decode Error. Skipping audio packet (%d)", ret); diff --git a/media-tv/kodi/kodi-17.6-r10.ebuild b/media-tv/kodi/kodi-17.6-r10.ebuild new file mode 100644 index 000000000000..240a7f8fc808 --- /dev/null +++ b/media-tv/kodi/kodi-17.6-r10.ebuild @@ -0,0 +1,278 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +# Does not work with py3 here +PYTHON_COMPAT=( python2_7 ) +PYTHON_REQ_USE="sqlite" + +inherit autotools cmake-utils eutils linux-info pax-utils python-single-r1 versionator + +LIBDVDCSS_COMMIT="2f12236bc1c92f73c21e973363f79eb300de603f" +LIBDVDREAD_COMMIT="17d99db97e7b8f23077b342369d3c22a6250affd" +LIBDVDNAV_COMMIT="43b5f81f5fe30bceae3b7cecf2b0ca57fc930dac" +FFMPEG_VERSION="3.1.11" +FFMPEG_KODI_VERSION="17.5" +CODENAME="Krypton" +PATCHES=( + "${FILESDIR}/${P}-nmblookup.patch" + "${FILESDIR}/${P}-wrapper.patch" + "${FILESDIR}/${PN}-17-adapt-to-deprecated-symbols-and-functions.patch" + "${FILESDIR}/${PN}-17-fix-audio-with-latest-ffmpeg.patch" +) +SRC_URI="https://github.com/xbmc/libdvdcss/archive/${LIBDVDCSS_COMMIT}.tar.gz -> libdvdcss-${LIBDVDCSS_COMMIT}.tar.gz + https://github.com/xbmc/libdvdread/archive/${LIBDVDREAD_COMMIT}.tar.gz -> libdvdread-${LIBDVDREAD_COMMIT}.tar.gz + https://github.com/xbmc/libdvdnav/archive/${LIBDVDNAV_COMMIT}.tar.gz -> libdvdnav-${LIBDVDNAV_COMMIT}.tar.gz + !system-ffmpeg? ( https://github.com/xbmc/FFmpeg/archive/${FFMPEG_VERSION}-${CODENAME}-${FFMPEG_KODI_VERSION}.tar.gz -> ffmpeg-${PN}-${FFMPEG_VERSION}-${CODENAME}-${FFMPEG_KODI_VERSION}.tar.gz )" + +DESCRIPTION="A free and open source media-player and entertainment hub" +HOMEPAGE="https://kodi.tv/ https://kodi.wiki/" + +LICENSE="GPL-2" +SLOT="0" +# use flag is called libusb so that it doesn't fool people in thinking that +# it is _required_ for USB support. Otherwise they'll disable udev and +# that's going to be worse. +IUSE="airplay alsa bluetooth bluray caps cec +css dbus debug dvd gles lcms libressl libusb lirc mariadb mysql nfs nonfree +opengl pulseaudio samba sftp systemd +system-ffmpeg test +udev udisks upnp upower vaapi vdpau webserver +xslt zeroconf" +REQUIRED_USE=" + ${PYTHON_REQUIRED_USE} + || ( gles opengl ) + ?? ( mariadb mysql ) + udev? ( !libusb ) + udisks? ( dbus ) + upower? ( dbus ) +" + +COMMON_DEPEND="${PYTHON_DEPS} + airplay? ( + app-pda/libplist + net-libs/shairplay + ) + alsa? ( media-libs/alsa-lib ) + bluetooth? ( net-wireless/bluez ) + bluray? ( >=media-libs/libbluray-0.7.0 ) + caps? ( sys-libs/libcap ) + dbus? ( sys-apps/dbus ) + dev-db/sqlite + dev-libs/expat + dev-libs/fribidi + cec? ( >=dev-libs/libcec-4.0 ) + dev-libs/libpcre[cxx] + dev-libs/libxml2 + >=dev-libs/lzo-2.04 + dev-libs/tinyxml[stl] + >=dev-libs/yajl-2 + dev-python/pillow[${PYTHON_USEDEP}] + dev-libs/libcdio + gles? ( media-libs/mesa[gles2] ) + lcms? ( media-libs/lcms:2 ) + libusb? ( virtual/libusb:1 ) + virtual/ttf-fonts + media-libs/fontconfig + media-libs/freetype + >=media-libs/libass-0.13.4 + media-libs/mesa[egl] + >=media-libs/taglib-1.11.1 + system-ffmpeg? ( + >=media-video/ffmpeg-${FFMPEG_VERSION}:=[encode,openssl,postproc] + =net-misc/curl-7.51.0 + nfs? ( net-fs/libnfs:= ) + opengl? ( media-libs/glu ) + !libressl? ( >=dev-libs/openssl-1.0.2j:0= ) + libressl? ( dev-libs/libressl:0= ) + pulseaudio? ( media-sound/pulseaudio ) + samba? ( >=net-fs/samba-3.4.6[smbclient(+)] ) + sftp? ( net-libs/libssh[sftp] ) + sys-libs/zlib + udev? ( virtual/udev ) + vaapi? ( x11-libs/libva:=[opengl] ) + vdpau? ( + || ( >=x11-libs/libvdpau-1.1 >=x11-drivers/nvidia-drivers-180.51 ) + system-ffmpeg? ( media-video/ffmpeg[vdpau] ) + ) + webserver? ( >=net-libs/libmicrohttpd-0.9.50[messages] ) + xslt? ( dev-libs/libxslt ) + zeroconf? ( net-dns/avahi[dbus] ) +" +RDEPEND="${COMMON_DEPEND} + lirc? ( + || ( app-misc/lirc app-misc/inputlircd ) + ) + !media-tv/xbmc + udisks? ( sys-fs/udisks:0 ) + upower? ( sys-power/upower )" + +DEPEND="${COMMON_DEPEND} + app-arch/bzip2 + app-arch/unzip + app-arch/xz-utils + app-arch/zip + dev-lang/swig + dev-libs/crossguid + dev-util/cmake + dev-util/gperf + media-libs/giflib + >=media-libs/libjpeg-turbo-1.5.1:= + >=media-libs/libpng-1.6.26:0= + test? ( dev-cpp/gtest ) + virtual/pkgconfig + x86? ( dev-lang/nasm ) +" +case ${PV} in +9999) + EGIT_REPO_URI="https://github.com/xbmc/xbmc.git" + inherit git-r3 + # Force java for latest git version to avoid having to hand maintain the + # generated addons package. #488118 + DEPEND+=" + virtual/jre + " + ;; +*) + MY_PV=${PV/_p/_r} + MY_PV=${MY_PV/_alpha/a} + MY_PV=${MY_PV/_beta/b} + MY_PV=${MY_PV/_rc/rc} + MY_P="${PN}-${MY_PV}" + SRC_URI+=" https://github.com/xbmc/xbmc/archive/${MY_PV}-${CODENAME}.tar.gz -> ${MY_P}.tar.gz + !java? ( https://github.com/candrews/gentoo-kodi/raw/master/${MY_P}-generated-addons.tar.xz )" + KEYWORDS="~amd64 ~x86" + IUSE+=" java" + DEPEND+=" + java? ( virtual/jre ) + " + + S=${WORKDIR}/xbmc-${MY_PV}-${CODENAME} + ;; +esac + +CONFIG_CHECK="~IP_MULTICAST" +ERROR_IP_MULTICAST=" +In some cases Kodi needs to access multicast addresses. +Please consider enabling IP_MULTICAST under Networking options. +" + +CMAKE_USE_DIR=${S}/project/cmake/ + +pkg_setup() { + check_extra_config + python-single-r1_pkg_setup +} + +src_prepare() { + if in_iuse java && use !java; then + eapply "${FILESDIR}"/${PN}-cmake-no-java.patch + fi + cmake-utils_src_prepare + + # avoid long delays when powerkit isn't running #348580 + sed -i \ + -e '/dbus_connection_send_with_reply_and_block/s:-1:3000:' \ + xbmc/linux/*.cpp || die + + # Prepare tools and libs witch are configured with autotools during compile time + AUTOTOOLS_DIRS=( + "${S}"/lib/cpluff + "${S}"/tools/depends/native/TexturePacker/src + "${S}"/tools/depends/native/JsonSchemaBuilder/src + ) + + local d + for d in "${AUTOTOOLS_DIRS[@]}" ; do + pushd ${d} >/dev/null || die + AT_NOELIBTOOLIZE="yes" AT_TOPLEVEL_EAUTORECONF="yes" eautoreconf + popd >/dev/null || die + done + elibtoolize + + # Prevent autoreconf rerun + sed -e 's/autoreconf -vif/echo "autoreconf already done in src_prepare()"/' -i \ + "${S}"/project/cmake/modules/FindCpluff.cmake \ + "${S}"/tools/depends/native/TexturePacker/src/autogen.sh \ + "${S}"/tools/depends/native/JsonSchemaBuilder/src/autogen.sh \ + || die +} + +src_configure() { + local mycmakeargs=( + -Ddocdir="${EPREFIX}/usr/share/doc/${PF}" + -DENABLE_LDGOLD=OFF # https://bugs.gentoo.org/show_bug.cgi?id=606124 + -DENABLE_ALSA=$(usex alsa) + -DENABLE_AIRTUNES=$(usex airplay) + -DENABLE_AVAHI=$(usex zeroconf) + -DENABLE_BLUETOOTH=$(usex bluetooth) + -DENABLE_BLURAY=$(usex bluray) + -DENABLE_CCACHE=OFF + -DENABLE_CEC=$(usex cec) + -DENABLE_DBUS=$(usex dbus) + -DENABLE_DVDCSS=$(usex css) + -DENABLE_INTERNAL_CROSSGUID=OFF + -DENABLE_INTERNAL_FFMPEG="$(usex !system-ffmpeg)" + -DENABLE_CAP=$(usex caps) + -DENABLE_LCMS2=$(usex lcms) + -DENABLE_LIRC=$(usex lirc) + -DENABLE_MICROHTTPD=$(usex webserver) + -DENABLE_NFS=$(usex nfs) + -DENABLE_NONFREE=$(usex nonfree) + -DENABLE_OPENGLES=$(usex gles) + -DENABLE_OPENGL=$(usex opengl) + -DENABLE_OPENSSL=ON + -DENABLE_OPTICAL=$(usex dvd) + -DENABLE_PLIST=$(usex airplay) + -DENABLE_PULSEAUDIO=$(usex pulseaudio) + -DENABLE_SMBCLIENT=$(usex samba) + -DENABLE_SSH=$(usex sftp) + -DENABLE_UDEV=$(usex udev) + -DENABLE_UPNP=$(usex upnp) + -DENABLE_VAAPI=$(usex vaapi) + -DENABLE_VDPAU=$(usex vdpau) + -DENABLE_X11=ON + -DENABLE_XSLT=$(usex xslt) + -Dlibdvdread_URL="${DISTDIR}/libdvdread-${LIBDVDREAD_COMMIT}.tar.gz" + -Dlibdvdnav_URL="${DISTDIR}/libdvdnav-${LIBDVDNAV_COMMIT}.tar.gz" + -Dlibdvdcss_URL="${DISTDIR}/libdvdcss-${LIBDVDCSS_COMMIT}.tar.gz" + ) + + if use mysql || use mariadb ; then + mycmakeargs+=( -DENABLE_MYSQLCLIENT="yes" ) + else + mycmakeargs+=( -DENABLE_MYSQLCLIENT="no" ) + fi + + use libusb && mycmakeargs+=( -DENABLE_LIBUSB=$(usex libusb) ) + + if use system-ffmpeg; then + mycmakeargs+=( -DWITH_FFMPEG="yes" ) + else + mycmakeargs+=( -DFFMPEG_URL="${DISTDIR}/ffmpeg-${PN}-${FFMPEG_VERSION}-${CODENAME}-${FFMPEG_KODI_VERSION}.tar.gz" ) + fi + + cmake-utils_src_configure +} + +src_compile() { + cmake-utils_src_compile all + use test && emake -C "${BUILD_DIR}" kodi-test +} + +src_test() { + emake -C "${BUILD_DIR}" test +} + +src_install() { + cmake-utils_src_install + + pax-mark Em "${ED%/}"/usr/$(get_libdir)/${PN}/${PN}.bin + + rm "${ED%/}"/usr/share/doc/*/{LICENSE.GPL,copying.txt}* || die + + newicon media/icon48x48.png kodi.png + + python_domodule tools/EventClients/lib/python/xbmcclient.py + python_newscript "tools/EventClients/Clients/Kodi Send/kodi-send.py" kodi-send +} -- cgit v1.2.3-65-gdbad