commit: 54e44680864197e00ec9dbe8e1d66d346e996dea Author: Alexis Ballier <aballier <AT> gentoo <DOT> org> AuthorDate: Sun Oct 4 17:32:12 2015 +0000 Commit: Alexis Ballier <aballier <AT> gentoo <DOT> org> CommitDate: Sun Oct 4 17:32:25 2015 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=54e44680
media-video/mplayer: bump to release 1.2 Package-Manager: portage-2.2.22 media-video/mplayer/Manifest | 1 + .../mplayer/files/mplayer-1.2-get_buffer.patch | 327 +++++++++++++++++++++ .../{mplayer-9999.ebuild => mplayer-1.2.ebuild} | 13 +- media-video/mplayer/mplayer-9999.ebuild | 2 +- 4 files changed, 341 insertions(+), 2 deletions(-) diff --git a/media-video/mplayer/Manifest b/media-video/mplayer/Manifest index 8aad2a9..bb818f3 100644 --- a/media-video/mplayer/Manifest +++ b/media-video/mplayer/Manifest @@ -1,4 +1,5 @@ DIST MPlayer-1.1.1.tar.xz 11202492 SHA256 ce8fc7c3179e6a57eb3a58cb7d1604388756b8a61764cc93e095e7aff3798c76 SHA512 06371d47b02caec83c7662f6bb4a827eafb7f3309f6cda959a0f49b647df031166a6e7c5d530b57b580104289ee260aa96f3f43cbfffcef816cea776b0d5aed0 WHIRLPOOL 3cd0f3845cd45961b778c384a322bc628cc9cd6fef3801b62389bd616a443ba5270c378a889412a7dc72d37ff26704d5d989d2c995a2a4a6540f6313ccacbb63 +DIST MPlayer-1.2.tar.xz 13019196 SHA256 ffe7f6f10adf2920707e8d6c04f0d3ed34c307efc6cd90ac46593ee8fba2e2b6 SHA512 ac10dd4facd0d8fbc3454a3a2eae0e0d2ed76fa60f30ebd6f8495632e4541af712ab2d005e88bc2baa8302ccb98d63ba80a051db80d2b76ac928a2bd779b47aa WHIRLPOOL 65bcda55684dced6b286e505df4180f849d6a9f2e1e44560f3393311694ea5a0e96cd7c454b8bbc4198b92c1fd3b0fb4f7c5f6842710b40dc47216037a88b33b DIST font-arial-cp1250.tar.bz2 249705 SHA256 423a07e780bb130cd8e4730715545c5d919c248dda595aab7a0a01de3c83fd12 SHA512 4f77ff5ceb8ec6e5d9f8f34d8950a6a6276d1fd5a947772fcbdb6554988b1ea665c12b82f45164f91fb7bd08000cb4afc26fa35beb4c760464160e22b9b8c340 WHIRLPOOL d635f54be65b0ca1047d943b6f6da433cda9fce6ed74fcab993501cf7f6b443eb711e182cd7fff09e553d251b5fd1c60196aa22e8370cba99fa175ed5ecdb47f DIST font-arial-iso-8859-1.tar.bz2 234242 SHA256 9730f481764f367c9089d0166fb6ccf9148808ffbbfeca635cf0e6db75765d29 SHA512 a1d03b6f09c48f48b7733f3bc0402ceab239a9abf88b860d852ea9fe69b4da690208a79d6f29d30204f5b37becf10672e8e8c0bfef201846d80ec54df617d029 WHIRLPOOL 8050362b125d3ca98214526cee2fa685e31487d13a6483c765bfc844bdc5e07beeba2c1ba313458096d43a63edd6c5e80b8b388c2792fc0ec7421e4072d8ca25 DIST font-arial-iso-8859-2.tar.bz2 222208 SHA256 71debfc960007c2f6242dfc91e8b1c005b30a99e129aeb00ab8c03f4371b41c1 SHA512 5671e628303fd816f64a51ad10e2f4dd9c3dc1b34c379a2ecf489b83931db7af668aaa4e00e96a00cacd63ed98daeae6b6a4d5925edfb06fc98d3a923f70257d WHIRLPOOL 08178087b4ea1dfb2250f4673785e31dd876b06af51c51b2bddc172b23e6e33cbc1b2c6b710a317e42dc05486974b26ed0ad3ca50a185567aa77d49bd1e72aee diff --git a/media-video/mplayer/files/mplayer-1.2-get_buffer.patch b/media-video/mplayer/files/mplayer-1.2-get_buffer.patch new file mode 100644 index 0000000..3329b98 --- /dev/null +++ b/media-video/mplayer/files/mplayer-1.2-get_buffer.patch @@ -0,0 +1,327 @@ +r37476 | rtogni | 2015-09-05 18:20:27 +0200 (Sat, 05 Sep 2015) | 5 lines + +Replace deprecated get_buffer, buffer_hints, and others + +This is needed to compile with latest FFmpeg + +Index: libmpcodecs/vd_ffmpeg.c +=================================================================== +--- libmpcodecs/vd_ffmpeg.c (revision 37475) ++++ libmpcodecs/vd_ffmpeg.c (revision 37476) +@@ -40,6 +40,7 @@ + #if CONFIG_VDPAU + #include "libavcodec/vdpau.h" + #endif ++#include "libavutil/pixdesc.h" + + static const vd_info_t info = { + "FFmpeg's libavcodec codec family", +@@ -95,8 +96,11 @@ + + #include "m_option.h" + +-static int get_buffer(AVCodecContext *avctx, AVFrame *pic); ++static int get_buffer(AVCodecContext *avctx, AVFrame *pic, int isreference); ++static int mpcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame); ++static int get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags); + static void release_buffer(AVCodecContext *avctx, AVFrame *pic); ++static void mpcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); + static void draw_slice(struct AVCodecContext *s, const AVFrame *src, int offset[4], + int y, int type, int height); + +@@ -269,19 +273,10 @@ + if (lavc_param_vismv || (lavc_param_debug & (FF_DEBUG_VIS_MB_TYPE|FF_DEBUG_VIS_QP))) { + ctx->do_slices = ctx->do_dr1 = 0; + } +-#ifndef CODEC_FLAG_EMU_EDGE +-#define CODEC_FLAG_EMU_EDGE 0 +-#endif + if(ctx->do_dr1){ +- avctx->flags |= CODEC_FLAG_EMU_EDGE; +- avctx-> reget_buffer = +- avctx-> get_buffer = get_buffer; +- avctx->release_buffer = release_buffer; ++ avctx->get_buffer2 = get_buffer2; + } else if (lavc_codec->capabilities & CODEC_CAP_DR1) { +- avctx->flags &= ~CODEC_FLAG_EMU_EDGE; +- avctx-> reget_buffer = avcodec_default_reget_buffer; +- avctx-> get_buffer = avcodec_default_get_buffer; +- avctx->release_buffer = avcodec_default_release_buffer; ++ avctx->get_buffer2 = avcodec_default_get_buffer2; + } + avctx->slice_flags = 0; + } +@@ -309,9 +304,7 @@ + if (IMGFMT_IS_HWACCEL(imgfmt)) { + ctx->do_dr1 = 1; + ctx->nonref_dr = 0; +- avctx->get_buffer = get_buffer; +- avctx->release_buffer = release_buffer; +- avctx->reget_buffer = get_buffer; ++ avctx->get_buffer2 = get_buffer2; + mp_msg(MSGT_DECVIDEO, MSGL_V, IMGFMT_IS_XVMC(imgfmt) ? + MSGTR_MPCODECS_XVMCAcceleratedMPEG2 : + "[VD_FFMPEG] VDPAU accelerated decoding\n"); +@@ -384,7 +377,6 @@ + #endif + avctx->flags2|= lavc_param_fast; + avctx->codec_tag= sh->format; +- avctx->stream_codec_tag= sh->video.fccHandler; + avctx->idct_algo= lavc_param_idct_algo; + avctx->error_concealment= lavc_param_error_concealment; + avctx->debug= lavc_param_debug; +@@ -668,7 +660,7 @@ + return 0; + } + +-static int get_buffer(AVCodecContext *avctx, AVFrame *pic){ ++static int get_buffer(AVCodecContext *avctx, AVFrame *pic, int isreference){ + sh_video_t *sh = avctx->opaque; + vd_ffmpeg_ctx *ctx = sh->context; + mp_image_t *mpi=NULL; +@@ -677,27 +669,12 @@ + int width = FFMAX(avctx->width, -(-avctx->coded_width >> avctx->lowres)); + int height= FFMAX(avctx->height, -(-avctx->coded_height >> avctx->lowres)); + // special case to handle reget_buffer +- if (pic->opaque && pic->data[0] && (!pic->buffer_hints || pic->buffer_hints & FF_BUFFER_HINTS_REUSABLE)) ++ if (pic->opaque && pic->data[0]) + return 0; + avcodec_align_dimensions(avctx, &width, &height); + //printf("get_buffer %d %d %d\n", pic->reference, ctx->ip_count, ctx->b_count); + +- if (pic->buffer_hints) { +- mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "Buffer hints: %u\n", pic->buffer_hints); +- type = MP_IMGTYPE_TEMP; +- if (pic->buffer_hints & FF_BUFFER_HINTS_READABLE) +- flags |= MP_IMGFLAG_READABLE; +- if (pic->buffer_hints & FF_BUFFER_HINTS_PRESERVE || +- pic->buffer_hints & FF_BUFFER_HINTS_REUSABLE) { +- ctx->ip_count++; +- type = MP_IMGTYPE_IP; +- flags |= MP_IMGFLAG_PRESERVE; +- } +- flags|=(avctx->skip_idct<=AVDISCARD_DEFAULT && avctx->skip_frame<=AVDISCARD_DEFAULT && ctx->do_slices) ? +- MP_IMGFLAG_DRAW_CALLBACK:0; +- mp_msg(MSGT_DECVIDEO, MSGL_DBG2, type == MP_IMGTYPE_IP ? "using IP\n" : "using TEMP\n"); +- } else { +- if(!pic->reference){ ++ if(!isreference){ + ctx->b_count++; + flags|=(avctx->skip_idct<=AVDISCARD_DEFAULT && avctx->skip_frame<=AVDISCARD_DEFAULT && ctx->do_slices) ? + MP_IMGFLAG_DRAW_CALLBACK:0; +@@ -711,11 +688,10 @@ + }else{ + type= MP_IMGTYPE_IP; + } +- } + + if (ctx->nonref_dr) { + if (flags & MP_IMGFLAG_PRESERVE) +- return avcodec_default_get_buffer(avctx, pic); ++ return mpcodec_default_get_buffer(avctx, pic); + // Use NUMBERED since for e.g. TEMP vos assume there will + // be no other frames between the get_image and matching put_image. + type = MP_IMGTYPE_NUMBERED; +@@ -722,7 +698,6 @@ + } + + if(init_vo(sh, avctx->pix_fmt, 1) < 0){ +- avctx->release_buffer= avcodec_default_release_buffer; + goto disable_dr1; + } + +@@ -822,7 +797,6 @@ + else + printf("."); + #endif +- pic->type= FF_BUFFER_TYPE_USER; + return 0; + + disable_dr1: +@@ -829,13 +803,11 @@ + ctx->do_dr1 = 0; + // For frame-multithreading these contexts aren't + // the same and must both be updated. +- ctx->avctx->get_buffer = +- avctx->get_buffer = avcodec_default_get_buffer; +- ctx->avctx->reget_buffer = +- avctx->reget_buffer = avcodec_default_reget_buffer; ++ ctx->avctx->get_buffer2 = ++ avctx->get_buffer2 = avcodec_default_get_buffer2; + if (pic->data[0]) +- release_buffer(avctx, pic); +- return avctx->get_buffer(avctx, pic); ++ mpcodec_default_release_buffer(avctx, pic); ++ return avctx->get_buffer2(avctx, pic,0); + } + + static void release_buffer(struct AVCodecContext *avctx, AVFrame *pic){ +@@ -843,8 +815,8 @@ + sh_video_t *sh = avctx->opaque; + vd_ffmpeg_ctx *ctx = sh->context; + int i; +- if (pic->type != FF_BUFFER_TYPE_USER) { +- avcodec_default_release_buffer(avctx, pic); ++ if (pic->opaque == NULL) { ++ mpcodec_default_release_buffer(avctx, pic); + return; + } + +@@ -954,7 +926,7 @@ + // even when we do dr we might actually get a buffer we had + // FFmpeg allocate - this mostly happens with nonref_dr. + // Ensure we treat it correctly. +- dr1= ctx->do_dr1 && pic->type == FF_BUFFER_TYPE_USER; ++ dr1= ctx->do_dr1 && pic->opaque != NULL; + if(ret<0) mp_msg(MSGT_DECVIDEO, MSGL_WARN, "Error while decoding frame!\n"); + //printf("repeat: %d\n", pic->repeat_pict); + //-- vstats generation +@@ -1128,3 +1100,148 @@ + set_format_params(avctx, selected_format); + return selected_format; + } ++ ++ ++/* ++ FFWrapper ++*/ ++static int mpcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame) ++{ ++ return avcodec_default_get_buffer2(avctx, frame, 0); ++} ++ ++static void mpcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic) ++{ ++ av_frame_unref(pic); ++} ++ ++typedef struct CompatReleaseBufPriv { ++ AVCodecContext avctx; ++ AVFrame frame; ++ uint8_t avframe_padding[1024]; // hack to allow linking to a avutil with larger AVFrame ++} CompatReleaseBufPriv; ++ ++static void compat_free_buffer(void *opaque, uint8_t *data) ++{ ++ CompatReleaseBufPriv *priv = opaque; ++ release_buffer(&priv->avctx, &priv->frame); ++ av_freep(&priv); ++} ++ ++static void compat_release_buffer(void *opaque, uint8_t *data) ++{ ++ AVBufferRef *buf = opaque; ++ av_buffer_unref(&buf); ++} ++ ++static int get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) ++{ ++ /* ++ * Wrap an old get_buffer()-allocated buffer in a bunch of AVBuffers. ++ * We wrap each plane in its own AVBuffer. Each of those has a reference to ++ * a dummy AVBuffer as its private data, unreffing it on free. ++ * When all the planes are freed, the dummy buffer's free callback calls ++ * release_buffer(). ++ */ ++ CompatReleaseBufPriv *priv = NULL; ++ AVBufferRef *dummy_buf = NULL; ++ int planes, i, ret; ++ ++ ret = get_buffer(avctx, frame, flags & AV_GET_BUFFER_FLAG_REF); ++ if (ret < 0) ++ return ret; ++ ++ /* return if the buffers are already set up ++ * this would happen e.g. when a custom get_buffer() calls ++ * avcodec_default_get_buffer ++ */ ++ if (frame->buf[0]) ++ goto end0; ++ ++ priv = av_mallocz(sizeof(*priv)); ++ if (!priv) { ++ ret = AVERROR(ENOMEM); ++ goto fail; ++ } ++ priv->avctx = *avctx; ++ priv->frame = *frame; ++ ++ dummy_buf = av_buffer_create(NULL, 0, compat_free_buffer, priv, 0); ++ if (!dummy_buf) { ++ ret = AVERROR(ENOMEM); ++ goto fail; ++ } ++ ++#define WRAP_PLANE(ref_out, data, data_size) \ ++do { \ ++ AVBufferRef *dummy_ref = av_buffer_ref(dummy_buf); \ ++ if (!dummy_ref) { \ ++ ret = AVERROR(ENOMEM); \ ++ goto fail; \ ++ } \ ++ ref_out = av_buffer_create(data, data_size, compat_release_buffer, \ ++ dummy_ref, 0); \ ++ if (!ref_out) { \ ++ av_buffer_unref(&dummy_ref); \ ++ av_frame_unref(frame); \ ++ ret = AVERROR(ENOMEM); \ ++ goto fail; \ ++ } \ ++} while (0) ++ ++ if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { ++ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); ++ ++ planes = av_pix_fmt_count_planes(frame->format); ++ /* workaround for AVHWAccel plane count of 0, buf[0] is used as ++ check for allocated buffers: make libavcodec happy */ ++ if (desc && desc->flags & AV_PIX_FMT_FLAG_HWACCEL) ++ planes = 1; ++ if (!desc || planes <= 0) { ++ ret = AVERROR(EINVAL); ++ goto fail; ++ } ++ ++ for (i = 0; i < planes; i++) { ++ int v_shift = (i == 1 || i == 2) ? desc->log2_chroma_h : 0; ++ int plane_size = (frame->height >> v_shift) * frame->linesize[i]; ++ ++ WRAP_PLANE(frame->buf[i], frame->data[i], plane_size); ++ } ++ } else { ++ int planar = av_sample_fmt_is_planar(frame->format); ++ planes = planar ? avctx->channels : 1; ++ ++ if (planes > FF_ARRAY_ELEMS(frame->buf)) { ++ frame->nb_extended_buf = planes - FF_ARRAY_ELEMS(frame->buf); ++ frame->extended_buf = av_malloc_array(sizeof(*frame->extended_buf), ++ frame->nb_extended_buf); ++ if (!frame->extended_buf) { ++ ret = AVERROR(ENOMEM); ++ goto fail; ++ } ++ } ++ ++ for (i = 0; i < FFMIN(planes, FF_ARRAY_ELEMS(frame->buf)); i++) ++ WRAP_PLANE(frame->buf[i], frame->extended_data[i], frame->linesize[0]); ++ ++ for (i = 0; i < frame->nb_extended_buf; i++) ++ WRAP_PLANE(frame->extended_buf[i], ++ frame->extended_data[i + FF_ARRAY_ELEMS(frame->buf)], ++ frame->linesize[0]); ++ } ++ ++ av_buffer_unref(&dummy_buf); ++ ++end0: ++ frame->width = avctx->width; ++ frame->height = avctx->height; ++ ++ return 0; ++ ++fail: ++ release_buffer(avctx, frame); ++ av_freep(&priv); ++ av_buffer_unref(&dummy_buf); ++ return ret; ++} diff --git a/media-video/mplayer/mplayer-9999.ebuild b/media-video/mplayer/mplayer-1.2.ebuild similarity index 96% copy from media-video/mplayer/mplayer-9999.ebuild copy to media-video/mplayer/mplayer-1.2.ebuild index af049c6..3289e6b 100644 --- a/media-video/mplayer/mplayer-9999.ebuild +++ b/media-video/mplayer/mplayer-1.2.ebuild @@ -159,7 +159,7 @@ RDEPEND+=" SLOT="0" LICENSE="GPL-2" if [[ ${PV} != *9999* ]]; then - KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x86-solaris" + KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ppc ~ppc64 ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x86-solaris" else KEYWORDS="" fi @@ -188,6 +188,11 @@ REQUIRED_USE=" xvmc? ( xv )" RESTRICT="faac? ( bindist )" +PATCHES=( + # Work with pulseaudio-6, bug #549680, https://trac.mplayerhq.hu/ticket/2241 + "${FILESDIR}"/${PN}-1.2_pre20150214-pulseaudio-6.0.patch +) + pkg_setup() { if [[ ${PV} == *9999* ]]; then elog @@ -260,6 +265,12 @@ src_prepare() { # Use sane default for >=virtual/udev-197 sed -i -e '/default_dvd_device/s:/dev/dvd:/dev/cdrom:' configure || die + + if has_version '>=media-video/ffmpeg-2.9'; then + epatch "${FILESDIR}/${PN}-1.2_pre20150730-chan.patch" + epatch "${FILESDIR}/${PN}-1.2-get_buffer.patch" + epatch "${FILESDIR}/${PN}-1.2_pre20150730-encode.patch" + fi } src_configure() { diff --git a/media-video/mplayer/mplayer-9999.ebuild b/media-video/mplayer/mplayer-9999.ebuild index af049c6..04b762c 100644 --- a/media-video/mplayer/mplayer-9999.ebuild +++ b/media-video/mplayer/mplayer-9999.ebuild @@ -60,7 +60,7 @@ RDEPEND+=" sys-libs/ncurses:0= app-arch/bzip2 sys-libs/zlib - >=media-video/ffmpeg-2.6:0=[vdpau?] + >=media-video/ffmpeg-2.8:0=[vdpau?] a52? ( media-libs/a52dec ) aalib? ( media-libs/aalib ) alsa? ( media-libs/alsa-lib )