Description: Fix compilation against libav10
 Patch based on work by Anton Khirnov, rebasing on mplayer2 revision
 2c378c7 allowed great simplification.
Author: Reinhard Tartler <siretart@tauware.de>
Origin: debian
Bug-Debian: http://bugs.debian.org/739337
Last-Update: 2014-03-08

--- mplayer2-2.0-728-g2c378c7.orig/Makefile
+++ mplayer2-2.0-728-g2c378c7/Makefile
@@ -301,7 +301,6 @@ SRCS_COMMON = asxparser.c \
               libmpcodecs/vf_ilpack.c \
               libmpcodecs/vf_ivtc.c \
               libmpcodecs/vf_kerndeint.c \
-              libmpcodecs/vf_lavc.c \
               libmpcodecs/vf_lavcdeint.c \
               libmpcodecs/vf_mirror.c \
               libmpcodecs/vf_noformat.c \
--- mplayer2-2.0-728-g2c378c7.orig/screenshot.c
+++ mplayer2-2.0-728-g2c378c7/screenshot.c
@@ -82,6 +82,7 @@ static int write_png(screenshot_ctx *ctx
     FILE *fp = NULL;
     void *outbuffer = NULL;
     int success = 0;
+    int got_output;
 
     struct AVCodec *png_codec = avcodec_find_encoder(AV_CODEC_ID_PNG);
     AVCodecContext *avctx = NULL;
@@ -104,10 +105,8 @@ static int write_png(screenshot_ctx *ctx
         goto error_exit;
     }
 
+    AVPacket pkt = { 0 };
     size_t outbuffer_size = image->width * image->height * 3 * 2;
-    outbuffer = malloc(outbuffer_size);
-    if (!outbuffer)
-        goto error_exit;
 
     AVFrame *pic = ctx->pic;
     avcodec_get_frame_defaults(pic);
@@ -115,8 +114,8 @@ static int write_png(screenshot_ctx *ctx
         pic->data[n] = image->planes[n];
         pic->linesize[n] = image->stride[n];
     }
-    int size = avcodec_encode_video(avctx, outbuffer, outbuffer_size, pic);
-    if (size < 1)
+    int ret = avcodec_encode_video2(avctx, &pkt, pic, &got_output);
+    if (ret < 0 || !got_output)
         goto error_exit;
 
     fp = fopen(fname, "wb");
@@ -126,8 +125,9 @@ static int write_png(screenshot_ctx *ctx
         goto error_exit;
     }
 
-    fwrite(outbuffer, size, 1, fp);
+    fwrite(pkt.data, pkt.size, 1, fp);
     fflush(fp);
+    av_free_packet(&pkt);
 
     if (ferror(fp))
         goto error_exit;
@@ -139,7 +139,6 @@ error_exit:
     av_free(avctx);
     if (fp)
         fclose(fp);
-    free(outbuffer);
     return success;
 }
 
--- mplayer2-2.0-728-g2c378c7.orig/libmpcodecs/vf.c
+++ mplayer2-2.0-728-g2c378c7/libmpcodecs/vf.c
@@ -48,7 +48,7 @@ extern const vf_info_t vf_info_flip;
 extern const vf_info_t vf_info_rotate;
 extern const vf_info_t vf_info_mirror;
 extern const vf_info_t vf_info_palette;
-extern const vf_info_t vf_info_lavc;
+//extern const vf_info_t vf_info_lavc;
 extern const vf_info_t vf_info_dvbscale;
 extern const vf_info_t vf_info_cropdetect;
 extern const vf_info_t vf_info_test;
@@ -131,7 +131,7 @@ static const vf_info_t *const filter_lis
 #ifdef CONFIG_LIBPOSTPROC
     &vf_info_pp,
 #endif
-    &vf_info_lavc,
+    //&vf_info_lavc,
     &vf_info_lavcdeint,
     &vf_info_screenshot,
     &vf_info_fspp,
--- mplayer2-2.0-728-g2c378c7.orig/libvo/vo_png.c
+++ mplayer2-2.0-728-g2c378c7/libvo/vo_png.c
@@ -52,8 +52,6 @@ static int z_compression;
 static int framenum;
 static int use_alpha;
 static AVCodecContext *avctx;
-static uint8_t *outbuffer;
-int outbuffer_size;
 
 static int
 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
@@ -87,9 +85,10 @@ config(uint32_t width, uint32_t height,
 
 
 static uint32_t draw_image(mp_image_t* mpi){
+    AVPacket pkt = { 0 };
     AVFrame pic;
     int buffersize;
-    int res;
+    int res, got_output;
     char buf[100];
     FILE *outfile;
 
@@ -105,22 +104,18 @@ static uint32_t draw_image(mp_image_t* m
 
     pic.data[0] = mpi->planes[0];
     pic.linesize[0] = mpi->stride[0];
-    buffersize = mpi->w * mpi->h * 8;
-    if (outbuffer_size < buffersize) {
-        av_freep(&outbuffer);
-        outbuffer = av_malloc(buffersize);
-        outbuffer_size = buffersize;
-    }
-    res = avcodec_encode_video(avctx, outbuffer, outbuffer_size, &pic);
 
-    if(res < 0){
+    res = avcodec_encode_video2(avctx, &pkt, &pic, &got_output);
+
+    if(res < 0 || !got_output){
  	    mp_msg(MSGT_VO,MSGL_WARN, "[VO_PNG] Error in create_png.\n");
             fclose(outfile);
 	    return 1;
     }
 
-    fwrite(outbuffer, res, 1, outfile);
+    fwrite(pkt.data, pkt.size, 1, outfile);
     fclose(outfile);
+    av_free_packet(&pkt);
 
     return VO_TRUE;
 }
@@ -157,8 +152,6 @@ static void uninit(void)
     if (avctx)
         avcodec_close(avctx);
     av_freep(&avctx);
-    av_freep(&outbuffer);
-    outbuffer_size = 0;
 }
 
 static void check_events(void){}
--- mplayer2-2.0-728-g2c378c7.orig/libmpdemux/demux_lavf.c
+++ mplayer2-2.0-728-g2c378c7/libmpdemux/demux_lavf.c
@@ -422,8 +422,8 @@ static void handle_stream(demuxer_t *dem
          * heuristic makes up works with subtitles in practice.
          */
         double fps;
-        if (st->r_frame_rate.num)
-            fps = av_q2d(st->r_frame_rate);
+        if (st->avg_frame_rate.num)
+            fps = av_q2d(st->avg_frame_rate);
         else
             fps = 1.0 / FFMAX(av_q2d(st->time_base),
                               av_q2d(st->codec->time_base) *
