Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Nov 2016 22:00:36 +0000 (UTC)
From:      Jan Beich <jbeich@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r426344 - in head/emulators/kcemu: . files
Message-ID:  <201611182200.uAIM0afa004897@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jbeich
Date: Fri Nov 18 22:00:36 2016
New Revision: 426344
URL: https://svnweb.freebsd.org/changeset/ports/426344

Log:
  emulators/kcemu: unbreak build with ffmpeg 3.x
  
  ffmpeg.cc:79:29: error: use of undeclared identifier 'PIX_FMT_YUV420P'; did you mean 'AV_PIX_FMT_YUV420P'?
    _stream->codec->pix_fmt = PIX_FMT_YUV420P;
                              ^~~~~~~~~~~~~~~
                              AV_PIX_FMT_YUV420P
  /usr/local/include/libavutil/pixfmt.h:62:5: note: 'AV_PIX_FMT_YUV420P' declared here
      AV_PIX_FMT_YUV420P,   ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
      ^
  ffmpeg.cc:100:12: error: use of undeclared identifier 'avcodec_alloc_frame'
    _frame = avcodec_alloc_frame();
             ^
  ffmpeg.cc:159:18: error: use of undeclared identifier 'avcodec_encode_video'; did you mean 'avcodec_encode_video2'?
    int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame);
                   ^~~~~~~~~~~~~~~~~~~~
                   avcodec_encode_video2
  /usr/local/include/libavcodec/avcodec.h:5261:5: note: 'avcodec_encode_video2' declared here
  int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
      ^
  ffmpeg.cc:159:55: error: cannot initialize a parameter of type 'AVPacket *' with an lvalue of type 'byte_t *' (aka 'unsigned char *')
    int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame);
                                                        ^~~~
  /usr/local/include/libavcodec/avcodec.h:5261:60: note: passing argument to parameter 'avpkt' here
  int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
                                                             ^
  
  PR:		214188
  Approved by:	maintainer timeout (2 weeks)

Modified:
  head/emulators/kcemu/Makefile   (contents, props changed)
  head/emulators/kcemu/files/patch-src-ui-gtk-ffmpeg.cc   (contents, props changed)

Modified: head/emulators/kcemu/Makefile
==============================================================================
--- head/emulators/kcemu/Makefile	Fri Nov 18 21:46:16 2016	(r426343)
+++ head/emulators/kcemu/Makefile	Fri Nov 18 22:00:36 2016	(r426344)
@@ -3,7 +3,7 @@
 
 PORTNAME=	kcemu
 PORTVERSION=	0.5.1
-PORTREVISION=	8
+PORTREVISION=	9
 CATEGORIES=	emulators
 MASTER_SITES=	SF/${PORTNAME}/KCemu/KCemu-${PORTVERSION}
 DISTNAME=	KCemu-${PORTVERSION}

Modified: head/emulators/kcemu/files/patch-src-ui-gtk-ffmpeg.cc
==============================================================================
--- head/emulators/kcemu/files/patch-src-ui-gtk-ffmpeg.cc	Fri Nov 18 21:46:16 2016	(r426343)
+++ head/emulators/kcemu/files/patch-src-ui-gtk-ffmpeg.cc	Fri Nov 18 22:00:36 2016	(r426344)
@@ -1,5 +1,5 @@
---- src/ui/gtk/ffmpeg.cc.orig	2010-03-07 20:50:23.000000000 +0100
-+++ src/ui/gtk/ffmpeg.cc	2015-07-03 22:59:12.842256554 +0200
+--- src/ui/gtk/ffmpeg.cc.orig	2010-03-07 19:50:23 UTC
++++ src/ui/gtk/ffmpeg.cc
 @@ -48,7 +48,7 @@ FfmpegVideoEncoder::init(const char *fil
  
    av_register_all();
@@ -27,7 +27,14 @@
    _stream->codec->codec_tag = MKTAG('D', 'X', '5', '0');
  
    _stream->codec->bit_rate = 79000 + 1000 * pow(1.4, quality * 20.0);
-@@ -81,14 +82,8 @@ FfmpegVideoEncoder::init(const char *fil
+@@ -75,20 +76,14 @@ FfmpegVideoEncoder::init(const char *fil
+   _stream->codec->time_base.den = 50;
+   _stream->codec->time_base.num = fps_den;
+   _stream->codec->gop_size = 100 / fps_den;
+-  _stream->codec->pix_fmt = PIX_FMT_YUV420P;
++  _stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
+ 
+   // some formats want stream headers to be separate
    if (_context->oformat->flags & AVFMT_GLOBALHEADER)
      _stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
  
@@ -43,6 +50,15 @@
      {
        close();
        return false;
+@@ -102,7 +97,7 @@ FfmpegVideoEncoder::init(const char *fil
+       return false;
+     }
+ 
+-  _frame = avcodec_alloc_frame();
++  _frame = av_frame_alloc();
+   if (_frame == NULL)
+     {
+       close();
 @@ -119,14 +114,14 @@ FfmpegVideoEncoder::init(const char *fil
  
    avpicture_fill((AVPicture *) _frame, buf, _stream->codec->pix_fmt, width, height);
@@ -60,16 +76,36 @@
    return true;
  }
  
-@@ -171,7 +166,7 @@ FfmpegVideoEncoder::encode(byte_t *image
+@@ -161,20 +156,21 @@ FfmpegVideoEncoder::encode(byte_t *image
+         }
+     }
+ 
+-  int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame);
+-  if (out_size == 0)
+-    return true;
+-
+   AVPacket pkt;
+   av_init_packet(&pkt);
++  pkt.data = _buf;
++  pkt.size = _bufsize;
++
++  int got_packet = 0;
++  int ret = avcodec_encode_video2(_stream->codec, &pkt, _frame, &got_packet);
++  if (ret < 0 || !got_packet || pkt.size <= 0)
++    return true;
+ 
    if (_stream->codec->coded_frame->pts != AV_NOPTS_VALUE)
      pkt.pts = av_rescale_q(_stream->codec->coded_frame->pts, _stream->codec->time_base, _stream->time_base);
    if (_stream->codec->coded_frame->key_frame)
 -    pkt.flags |= PKT_FLAG_KEY;
 +    pkt.flags |= AV_PKT_FLAG_KEY;
    pkt.stream_index = _stream->index;
-   pkt.data = _buf;
-   pkt.size = out_size;
-@@ -197,7 +192,7 @@ FfmpegVideoEncoder::close(void)
+-  pkt.data = _buf;
+-  pkt.size = out_size;
+ 
+   return av_interleaved_write_frame(_context, &pkt) == 0;
+ }
+@@ -197,7 +193,7 @@ FfmpegVideoEncoder::close(void)
        av_freep(&_context->streams[i]->codec);
        av_freep(&_context->streams[i]);
      }
@@ -78,7 +114,7 @@
    
    av_free(_context);
    
-@@ -207,4 +202,4 @@ FfmpegVideoEncoder::close(void)
+@@ -207,4 +203,4 @@ FfmpegVideoEncoder::close(void)
    _buf = NULL;
  }
  



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611182200.uAIM0afa004897>