Your message dated Sun, 17 Apr 2016 19:37:08 +0000
with message-id <e1arsvi-0003rc...@franck.debian.org>
and subject line Bug#803844: fixed in mplayer 2:1.3.0-1
has caused the Debian Bug report #803844,
regarding mplayer: FTBFS with FFmpeg 2.9
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
803844: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803844
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: mplayer
Version: 1.2-1
Severity: important
Tags: patch
User: pkg-multimedia-maintainers@lists.alioth.debian.org
Usertags: ffmpeg2.9

Dear Maintainer,

your package fails to build with the upcoming ffmpeg 2.9.
This bug will become release-critical at some point when the
ffmpeg2.9 transition gets closer.

Attached is a patch replacing the deprecated functionality.
It also works with ffmpeg 2.8.
Please apply this patch and forward it upstream, if necessary.

These changes are non-trivial and should be runtime-tested.

Best regards,
Andreas

diff --git a/debian/patches/0103_svn37447.patch b/debian/patches/0103_svn37447.patch
new file mode 100644
index 0000000..b511b5a
--- /dev/null
+++ b/debian/patches/0103_svn37447.patch
@@ -0,0 +1,34 @@
+From: rtogni
+Date: Fri, 14 Aug 2015 19:30:34 +0000
+Subject: [PATCH] Replace deprecated avctx->request_channels with
+ request_channel_layout
+
+Origin: svn://svn.mplayerhq.hu/mplayer/trunk@37447
+---
+ libmpcodecs/ad_ffmpeg.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c
+index 3abbf64..6def3bd 100644
+--- a/libmpcodecs/ad_ffmpeg.c
++++ b/libmpcodecs/ad_ffmpeg.c
+@@ -46,6 +46,7 @@ LIBAD_EXTERN(ffmpeg)
+ 
+ #include "libavcodec/avcodec.h"
+ #include "libavutil/dict.h"
++#include "libavutil/channel_layout.h"
+ 
+ struct adctx {
+     int last_samplerate;
+@@ -127,7 +128,7 @@ static int init(sh_audio_t *sh_audio)
+ 	lavc_context->bits_per_coded_sample = sh_audio->wf->wBitsPerSample;
+     }
+     lavc_context->channel_layout = sh_audio->channel_layout;
+-    lavc_context->request_channels = audio_output_channels;
++    lavc_context->request_channel_layout = av_get_default_channel_layout(audio_output_channels);
+     lavc_context->codec_tag = sh_audio->format; //FOURCC
+     lavc_context->codec_id = lavc_codec->id; // not sure if required, imho not --A'rpi
+ 
+-- 
+2.5.0
+
diff --git a/debian/patches/0104_svn37451.patch b/debian/patches/0104_svn37451.patch
new file mode 100644
index 0000000..7409000
--- /dev/null
+++ b/debian/patches/0104_svn37451.patch
@@ -0,0 +1,167 @@
+From: rtogni
+Date: Mon, 17 Aug 2015 21:18:31 +0000
+Subject: [PATCH] Replace deprecated avcodec resamples with libswresample
+ in af_lavcresample
+
+Origin: svn://svn.mplayerhq.hu/mplayer/trunk@37451
+---
+ libaf/af_lavcresample.c | 102 +++++++++++++++++++-----------------------------
+ 1 file changed, 41 insertions(+), 61 deletions(-)
+
+diff --git a/libaf/af_lavcresample.c b/libaf/af_lavcresample.c
+index a69e7de..fd7fe0c 100644
+--- a/libaf/af_lavcresample.c
++++ b/libaf/af_lavcresample.c
+@@ -25,15 +25,20 @@
+ 
+ #include "config.h"
+ #include "af.h"
+-#include "libavcodec/avcodec.h"
+ #include "libavutil/rational.h"
++#include "libswresample/swresample.h"
++#include "libavutil/channel_layout.h"
++#include "libavutil/opt.h"
++#include "libavutil/mem.h"
++#include "libavutil/common.h"
+ 
+ // Data for specific instances of this filter
+ typedef struct af_resample_s{
+-    struct AVResampleContext *avrctx;
+-    int16_t *in[AF_NCH];
++    struct SwrContext *swrctx;
++    uint8_t *in[1];
++    uint8_t *tmp[1];
+     int in_alloc;
+-    int index;
++    int tmp_alloc;
+ 
+     int filter_length;
+     int linear;
+@@ -70,8 +75,19 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
+ 
+     if (s->ctx_out_rate != af->data->rate || s->ctx_in_rate != data->rate || s->ctx_filter_size != s->filter_length ||
+         s->ctx_phase_shift != s->phase_shift || s->ctx_linear != s->linear || s->ctx_cutoff != s->cutoff) {
+-        if(s->avrctx) av_resample_close(s->avrctx);
+-        s->avrctx= av_resample_init(af->data->rate, /*in_rate*/data->rate, s->filter_length, s->phase_shift, s->linear, s->cutoff);
++        swr_free(&s->swrctx);
++        if((s->swrctx=swr_alloc()) == NULL) return AF_ERROR;
++        av_opt_set_int(s->swrctx, "out_sample_rate", af->data->rate, 0);
++        av_opt_set_int(s->swrctx, "in_sample_rate", data->rate, 0);
++        av_opt_set_int(s->swrctx, "filter_size", s->filter_length, 0);
++        av_opt_set_int(s->swrctx, "phase_shift", s->phase_shift, 0);
++        av_opt_set_int(s->swrctx, "linear_interp", s->linear, 0);
++        av_opt_set_double(s->swrctx, "cutoff", s->cutoff, 0);
++        av_opt_set_sample_fmt(s->swrctx, "in_sample_fmt", AV_SAMPLE_FMT_S16, 0);
++        av_opt_set_sample_fmt(s->swrctx, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0);
++        av_opt_set_int(s->swrctx, "in_channel_count", af->data->nch, 0);
++        av_opt_set_int(s->swrctx, "out_channel_count", af->data->nch, 0);
++        if(swr_init(s->swrctx) < 0) return AF_ERROR;
+         s->ctx_out_rate    = af->data->rate;
+         s->ctx_in_rate     = data->rate;
+         s->ctx_filter_size = s->filter_length;
+@@ -106,11 +122,10 @@ static void uninit(struct af_instance_s* af)
+         free(af->data->audio);
+     free(af->data);
+     if(af->setup){
+-        int i;
+         af_resample_t *s = af->setup;
+-        if(s->avrctx) av_resample_close(s->avrctx);
+-        for (i=0; i < AF_NCH; i++)
+-            free(s->in[i]);
++        swr_free(&s->swrctx);
++        av_free(s->in[0]);
++        av_free(s->tmp[0]);
+         free(s);
+     }
+ }
+@@ -119,71 +134,36 @@ static void uninit(struct af_instance_s* af)
+ static af_data_t* play(struct af_instance_s* af, af_data_t* data)
+ {
+   af_resample_t *s = af->setup;
+-  int i, j, consumed, ret;
+-  int16_t *in = (int16_t*)data->audio;
+-  int16_t *out;
++  int ret;
++  int8_t *in = (int8_t*)data->audio;
++  int8_t *out;
+   int chans   = data->nch;
+-  int in_len  = data->len/(2*chans);
++  int in_len  = data->len;
+   int out_len = in_len * af->mul + 10;
+-  int16_t tmp[AF_NCH][out_len];
+ 
+   if(AF_OK != RESIZE_LOCAL_BUFFER(af,data))
+       return NULL;
+ 
+-  out= (int16_t*)af->data->audio;
++  av_fast_malloc(&s->tmp[0], &s->tmp_alloc, FFALIGN(out_len,32));
++  if(s->tmp[0] == NULL) return NULL;
+ 
+-  out_len= FFMIN(out_len, af->data->len/(2*chans));
++  out= (int8_t*)af->data->audio;
+ 
+-  if(s->in_alloc < in_len + s->index){
+-      s->in_alloc= in_len + s->index;
+-      for(i=0; i<chans; i++){
+-          s->in[i]= realloc(s->in[i], s->in_alloc*sizeof(int16_t));
+-      }
+-  }
++  out_len= FFMIN(out_len, af->data->len);
+ 
+-  if(chans==1){
+-      memcpy(&s->in[0][s->index], in, in_len * sizeof(int16_t));
+-  }else if(chans==2){
+-      for(j=0; j<in_len; j++){
+-          s->in[0][j + s->index]= *(in++);
+-          s->in[1][j + s->index]= *(in++);
+-      }
+-  }else{
+-      for(j=0; j<in_len; j++){
+-          for(i=0; i<chans; i++){
+-              s->in[i][j + s->index]= *(in++);
+-          }
+-      }
+-  }
+-  in_len += s->index;
++  av_fast_malloc(&s->in[0], &s->in_alloc, FFALIGN(in_len,32));
++  if(s->in[0] == NULL) return NULL;
+ 
+-  for(i=0; i<chans; i++){
+-      ret= av_resample(s->avrctx, tmp[i], s->in[i], &consumed, in_len, out_len, i+1 == chans);
+-  }
+-  out_len= ret;
++  memcpy(s->in[0], in, in_len);
+ 
+-  s->index= in_len - consumed;
+-  for(i=0; i<chans; i++){
+-      memmove(s->in[i], s->in[i] + consumed, s->index*sizeof(int16_t));
+-  }
++  ret = swr_convert(s->swrctx, &s->tmp[0], out_len/chans/2, &s->in[0], in_len/chans/2);
++  if (ret < 0) return NULL;
++  out_len= ret*chans*2;
+ 
+-  if(chans==1){
+-      memcpy(out, tmp[0], out_len*sizeof(int16_t));
+-  }else if(chans==2){
+-      for(j=0; j<out_len; j++){
+-          *(out++)= tmp[0][j];
+-          *(out++)= tmp[1][j];
+-      }
+-  }else{
+-      for(j=0; j<out_len; j++){
+-          for(i=0; i<chans; i++){
+-              *(out++)= tmp[i][j];
+-          }
+-      }
+-  }
++  memcpy(out, s->tmp[0], out_len);
+ 
+   data->audio = af->data->audio;
+-  data->len   = out_len*chans*2;
++  data->len   = out_len;
+   data->rate  = af->data->rate;
+   return data;
+ }
+-- 
+2.5.0
+
diff --git a/debian/patches/0105_svn37453.patch b/debian/patches/0105_svn37453.patch
new file mode 100644
index 0000000..0584fbf
--- /dev/null
+++ b/debian/patches/0105_svn37453.patch
@@ -0,0 +1,93 @@
+From: rtogni
+Date: Sun, 23 Aug 2015 20:32:50 +0000
+Subject: [PATCH] Replace deprecated av_encode_video() with
+ av_encode_video2()
+
+Origin: svn://svn.mplayerhq.hu/mplayer/trunk@37453
+---
+ libmpcodecs/vf_lavc.c    | 12 +++++++++---
+ libmpcodecs/vf_mcdeint.c |  7 ++++++-
+ libmpcodecs/vf_uspp.c    |  7 ++++++-
+ 3 files changed, 21 insertions(+), 5 deletions(-)
+
+diff --git a/libmpcodecs/vf_lavc.c b/libmpcodecs/vf_lavc.c
+index 5e1b85f..62dcf91 100644
+--- a/libmpcodecs/vf_lavc.c
++++ b/libmpcodecs/vf_lavc.c
+@@ -86,6 +86,8 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
+     mp_image_t* dmpi;
+     int out_size;
+     AVFrame *pic= vf->priv->pic;
++    int ret, got_pkt;
++    AVPacket pkt;
+ 
+     pic->data[0]=mpi->planes[0];
+     pic->data[1]=mpi->planes[1];
+@@ -94,10 +96,14 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
+     pic->linesize[1]=mpi->stride[1];
+     pic->linesize[2]=mpi->stride[2];
+ 
+-    out_size = avcodec_encode_video(&lavc_venc_context,
+-	vf->priv->outbuf, vf->priv->outbuf_size, pic);
++    av_init_packet(&pkt);
++    pkt.data = vf->priv->outbuf;
++    pkt.size = vf->priv->outbuf_size;
++    ret = avcodec_encode_video2(&lavc_venc_context, &pkt, pic, &got_pkt);
+ 
+-    if(out_size<=0) return 1;
++    if(ret<=0) return 1;
++    if(!got_pkt) return 1;
++    out_size =  pkt.size;
+ 
+     dmpi=vf_get_image(vf->next,IMGFMT_MPEGPES,
+ 	MP_IMGTYPE_EXPORT, 0,
+diff --git a/libmpcodecs/vf_mcdeint.c b/libmpcodecs/vf_mcdeint.c
+index 6258d8b..1b2d1bb 100644
+--- a/libmpcodecs/vf_mcdeint.c
++++ b/libmpcodecs/vf_mcdeint.c
+@@ -92,6 +92,8 @@ struct vf_priv_s {
+ 
+ static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int dst_stride[3], int src_stride[3], int width, int height){
+     int x, y, i;
++    int got_pkt;
++    AVPacket pkt;
+ 
+     for(i=0; i<3; i++){
+         p->frame->data[i]= src[i];
+@@ -101,7 +103,10 @@ static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int ds
+     p->avctx_enc->me_cmp=
+     p->avctx_enc->me_sub_cmp= FF_CMP_SAD /*| (p->parity ? FF_CMP_ODD : FF_CMP_EVEN)*/;
+     p->frame->quality= p->qp*FF_QP2LAMBDA;
+-    avcodec_encode_video(p->avctx_enc, p->outbuf, p->outbuf_size, p->frame);
++    av_init_packet(&pkt);
++    pkt.data = p->outbuf;
++    pkt.size = p->outbuf_size;
++    avcodec_encode_video2(p->avctx_enc, &pkt, p->frame, &got_pkt);
+     p->frame_dec = p->avctx_enc->coded_frame;
+ 
+     for(i=0; i<3; i++){
+diff --git a/libmpcodecs/vf_uspp.c b/libmpcodecs/vf_uspp.c
+index 18cb7fa..dd41700 100644
+--- a/libmpcodecs/vf_uspp.c
++++ b/libmpcodecs/vf_uspp.c
+@@ -177,11 +177,16 @@ static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int ds
+         const int x1= offset[i+count-1][0];
+         const int y1= offset[i+count-1][1];
+         int offset;
++        AVPacket pkt;
++        int ret, got_pkt;
+         p->frame->data[0]= p->src[0] + x1 + y1 * p->frame->linesize[0];
+         p->frame->data[1]= p->src[1] + x1/2 + y1/2 * p->frame->linesize[1];
+         p->frame->data[2]= p->src[2] + x1/2 + y1/2 * p->frame->linesize[2];
+ 
+-        avcodec_encode_video(p->avctx_enc[i], p->outbuf, p->outbuf_size, p->frame);
++        av_init_packet(&pkt);
++        pkt.data = p->outbuf;
++        pkt.size = p->outbuf_size;
++        avcodec_encode_video2(p->avctx_enc[i], &pkt, p->frame, &got_pkt);
+         p->frame_dec = p->avctx_enc[i]->coded_frame;
+ 
+         offset= (BLOCK-x1) + (BLOCK-y1)*p->frame_dec->linesize[0];
+-- 
+2.5.0
+
diff --git a/debian/patches/0106_svn37463.patch b/debian/patches/0106_svn37463.patch
new file mode 100644
index 0000000..0266627
--- /dev/null
+++ b/debian/patches/0106_svn37463.patch
@@ -0,0 +1,36 @@
+From: ib
+Date: Tue, 25 Aug 2015 10:19:53 +0000
+Subject: [PATCH] Add missing library swresample.
+
+This is necessary since r37451.
+
+Origin: svn://svn.mplayerhq.hu/mplayer/trunk@37463
+---
+ configure | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/configure b/configure
+index 21f712d..4dbcdf5 100755
+--- a/configure
++++ b/configure
+@@ -7090,13 +7090,13 @@ fi
+ if test "$ffmpeg_so" = auto ; then
+   ffmpeg_so=no
+   if $_pkg_config --exists libavutil ; then
+-    inc_ffmpeg=$($_pkg_config --cflags libswscale libavformat libavcodec libavutil)
+-    ld_tmp=$($_pkg_config --libs libswscale libavformat libavcodec libavutil)
++    inc_ffmpeg=$($_pkg_config --cflags libswscale libswresample libavformat libavcodec libavutil)
++    ld_tmp=$($_pkg_config --libs libswscale libswresample libavformat libavcodec libavutil)
+     header_check libavutil/avutil.h $inc_ffmpeg $ld_tmp &&
+       extra_cflags="$extra_cflags $inc_ffmpeg" &&
+       extra_ldflags="$extra_ldflags $ld_tmp" && ffmpeg_so=yes && ffmpeg=yes
+-  elif header_check libavutil/avutil.h -lswscale -lavformat -lavcodec -lavutil ; then
+-    extra_ldflags="$extra_ldflags -lswscale -lavformat -lavcodec -lavutil"
++  elif header_check libavutil/avutil.h -lswscale -lswresample -lavformat -lavcodec -lavutil ; then
++    extra_ldflags="$extra_ldflags -lswscale -lswresample -lavformat -lavcodec -lavutil"
+     ffmpeg_so=yes
+     ffmpeg=yes
+   fi
+-- 
+2.5.0
+
diff --git a/debian/patches/0107_svn37476.patch b/debian/patches/0107_svn37476.patch
new file mode 100644
index 0000000..1ed82ef
--- /dev/null
+++ b/debian/patches/0107_svn37476.patch
@@ -0,0 +1,333 @@
+From: rtogni
+Date: Sat, 5 Sep 2015 16:20:27 +0000
+Subject: [PATCH] Replace deprecated get_buffer, buffer_hints, and others
+
+This is needed to compile with latest FFmpeg
+
+Origin: svn://svn.mplayerhq.hu/mplayer/trunk@37476
+---
+ libmpcodecs/vd_ffmpeg.c | 211 +++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 164 insertions(+), 47 deletions(-)
+
+diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
+index 55f6fd0..2b28881 100644
+--- a/libmpcodecs/vd_ffmpeg.c
++++ b/libmpcodecs/vd_ffmpeg.c
+@@ -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 @@ typedef struct {
+ 
+ #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 @@ static void set_dr_slice_settings(struct AVCodecContext *avctx, const AVCodec *l
+     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 @@ static void set_format_params(struct AVCodecContext *avctx,
+     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 @@ static int init(sh_video_t *sh){
+ #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 @@ static int init_vo(sh_video_t *sh, enum AVPixelFormat pix_fmt, int ignore_aspect
+     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 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
+     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,18 +688,16 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
+         }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;
+     }
+ 
+     if(init_vo(sh, avctx->pix_fmt, 1) < 0){
+-        avctx->release_buffer= avcodec_default_release_buffer;
+         goto disable_dr1;
+     }
+ 
+@@ -822,20 +797,17 @@ else if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)
+ else
+     printf(".");
+ #endif
+-    pic->type= FF_BUFFER_TYPE_USER;
+     return 0;
+ 
+ disable_dr1:
+     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 @@ static void release_buffer(struct AVCodecContext *avctx, AVFrame *pic){
+     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 @@ static mp_image_t *decode(sh_video_t *sh, void *data, int len, int flags){
+     // 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 @@ static enum AVPixelFormat get_format(struct AVCodecContext *avctx,
+     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;
++}
+-- 
+2.6.1
+
diff --git a/debian/patches/series b/debian/patches/series
index 0e7fb1b..a24225c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,5 +3,10 @@
 0100_svn37545.patch
 0101_svn37548.patch
 0102_svn37549.patch
+0103_svn37447.patch
+0104_svn37451.patch
+0105_svn37453.patch
+0106_svn37463.patch
+0107_svn37476.patch
 0200_Hurd_PATH_MAX.patch
 0201_PATH_MAX_HURD.patch

--- End Message ---
--- Begin Message ---
Source: mplayer
Source-Version: 2:1.3.0-1

We believe that the bug you reported is fixed in the latest version of
mplayer, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 803...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Mateusz Łukasik <mat...@linuxmint.pl> (supplier of updated mplayer package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Sun, 17 Apr 2016 21:19:27 +0200
Source: mplayer
Binary: mplayer-gui mencoder mplayer mplayer-doc
Architecture: source
Version: 2:1.3.0-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Multimedia Maintainers 
<pkg-multimedia-maintainers@lists.alioth.debian.org>
Changed-By: Mateusz Łukasik <mat...@linuxmint.pl>
Description:
 mencoder   - MPlayer's Movie Encoder
 mplayer    - movie player for Unix-like systems
 mplayer-doc - documentation for MPlayer
 mplayer-gui - movie player for Unix-like systems (GUI variant)
Closes: 803844
Changes:
 mplayer (2:1.3.0-1) unstable; urgency=medium
 .
   [ Mateusz Łukasik ]
   * Team upload.
   * New upstream release.
     - Fix FTBFS with ffmpeg 2.9 (Closes: #803844)
   * Drop mplayer-dbg package.
   * debian/control:
     - Rename Build-Depends-Arch to Build-Depends.
     - Bump Standards-Version to 3.9.8 (no changes needed).
   * debian/copyright:
     - Add missing GPL-2+ license.
   * debian/patches:
     - Refresh patches.
     - Add 0003_fix_spelling_error_in_binary.patch to fix lintian warning
       about spelling error in binary.
   * Update debian/*.lintian-overrides.
   * debian/rules:
     - Enable hardening=+all.
 .
   [ Sebastian Ramacher ]
   * Bump libav* B-Ds to >= 7:3.0~.
Checksums-Sha1:
 1cb3ba28bf87f8a89cc3b7abb2f79fb0da5f43d7 3399 mplayer_1.3.0-1.dsc
 26a52b0e713c9cf140c56b14711f9df28a772a11 5199400 mplayer_1.3.0.orig.tar.xz
 ba433a2aa147a46ea219b7cbf361a0d239d0517b 36632 mplayer_1.3.0-1.debian.tar.xz
Checksums-Sha256:
 00655c9ed00538413d5b6c13b756200569a1e5d42c1bf9c746220fa4520be081 3399 
mplayer_1.3.0-1.dsc
 e836081b1afa0069dcf4a55fce7aad40bf1f1e66ff8993c51e4b7ff790c8355c 5199400 
mplayer_1.3.0.orig.tar.xz
 b0400e5ab24c4d05e430a08e9aff2ad185e62eeee67b3fd8391cfd42fc915c59 36632 
mplayer_1.3.0-1.debian.tar.xz
Files:
 c06e9514d3f9ce39434df6b406c32278 3399 video optional mplayer_1.3.0-1.dsc
 a337a4e5e209663f700fc204ec01533f 5199400 video optional 
mplayer_1.3.0.orig.tar.xz
 5ff2218af311280b284175409cad5420 36632 video optional 
mplayer_1.3.0-1.debian.tar.xz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBCAAGBQJXE+PoAAoJEGny/FFupxmTOhsP/R/+77vSZPA6XnDzc8j3sfyP
ZtIyyzow3wjMA/N6ZV1yAYPySq8/qjJDPqI0P+COMSRS64nUI46gx036Mc7VZ6uo
cYN8MwdrZeiDEBU1I0DJACEcACRangNcsQ7CKom1rRBHqWKNuD66DpE605/ECHTR
bOr4faPXSmZ02feLer/MpSq73Dgf3qWvuzad9RG1fGLc195QE1HXHs2ooROfuSqR
nQoggEx2Gs+uymWzj71I7AdFGmF6S8WgdIQQjlNBNgZLOUNy7fTkRDJ3PopqYoUi
X7cZLWCrrn4//oZ5A3fMflc0Ppy6wrXV5s/el1iaMVM+Pt9sdwfxPWYXpujOQ93H
CwNaW5mt6Tv3avp1zZKyaXXH7SCIktYymCXODpm9AgAgJJOjC/2uLH4AbtB+0AEJ
gvWj+JfG+iMnc4zFOilMWYAZPh2mlz112jTG3PUiIrYv05JwW8eTsnZXCDlHNVDn
RnJf3hV0KUpV6Ca6VrT6Tm/22SCyVYdQn85rvsp1vT0R/AxbcSRMMmSYZCFqJ28P
Pt3RG1tbvKOh3iRNdd05ad7dUJx1X0IhrtXIaisFc3cFwc9NVRq7vLrRfIpUwBOQ
OG08jVTRf1ChQC3xHFJl/x7zCXK5ID79g2+3YoYPv8l3hihiKHi/A8lRFmWBJgxV
vSVEJqSoqk7gxobVQCgB
=w+mI
-----END PGP SIGNATURE-----

--- End Message ---
_______________________________________________
pkg-multimedia-maintainers mailing list
pkg-multimedia-maintainers@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-multimedia-maintainers

Reply via email to