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 )