$OpenBSD: patch-module_ffdecode_c,v 1.4 2019/02/19 23:40:49 sthen Exp $

- Fix build with pygame 1.9.3
- Update for newer FFmpeg API

Index: module/ffdecode.c
--- module/ffdecode.c.orig
+++ module/ffdecode.c
@@ -19,10 +19,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define NO_PYGAME_C_API
 #include <pygame/pygame.h>
 #include <math.h>
 #include <limits.h>
 #include <libavutil/avstring.h>
+#include <libavutil/time.h>
 #include <libavformat/avformat.h>
 #include <libavcodec/avcodec.h>
 #include <libswscale/swscale.h>
@@ -101,8 +103,8 @@ typedef struct VideoState {
        compensation */
 
 #ifndef HAS_RESAMPLE
-    uint8_t audio_buf1[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2] __attribute__ ((aligned (16))) ;
-    uint8_t audio_buf2[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2] __attribute__ ((aligned (16))) ;
+    uint8_t audio_buf1[(192000 * 3) / 2] __attribute__ ((aligned (16))) ;
+    uint8_t audio_buf2[(192000 * 3) / 2] __attribute__ ((aligned (16))) ;
 #else
     uint8_t *audio_buf1;
 #endif
@@ -627,13 +629,13 @@ static void alloc_picture(void *opaque, PyObject *pysu
 
     pixel = SDL_MapRGBA(surf->format, 1, 2, 3, 4);
     if (bytes[0] == 4 && bytes[1] == 1) {
-        vp->fmt = PIX_FMT_ARGB;
+        vp->fmt = AV_PIX_FMT_ARGB;
     } else if (bytes[0] == 4 && bytes[1] == 3) {
-        vp->fmt = PIX_FMT_ABGR;
+        vp->fmt = AV_PIX_FMT_ABGR;
     } else if (bytes[0] == 1) {
-        vp->fmt = PIX_FMT_RGBA;
+        vp->fmt = AV_PIX_FMT_RGBA;
     } else {
-        vp->fmt = PIX_FMT_BGRA;
+        vp->fmt = AV_PIX_FMT_BGRA;
     }
 
     pixel = SDL_MapRGBA(surf->format, 0, 0, 0, 255);
@@ -756,7 +758,7 @@ static int video_thread(void *arg)
     double pts;
 
     for(;;) {
-        frame = avcodec_alloc_frame();
+        frame = av_frame_alloc();
 
         while (is->paused && !is->videoq.abort_request) {
             SDL_Delay(2);
@@ -816,10 +818,10 @@ static int audio_decode_frame(VideoState *is, double *
             int resample_changed, audio_resample;
 
             if (!is->frame) {
-                if (!(is->frame = avcodec_alloc_frame()))
+                if (!(is->frame = av_frame_alloc()))
                     return AVERROR(ENOMEM);
             } else
-                avcodec_get_frame_defaults(is->frame);
+                av_frame_unref(is->frame);
 
             if (flush_complete)
                 break;
@@ -836,7 +838,7 @@ static int audio_decode_frame(VideoState *is, double *
 
             if (!got_frame) {
                 /* stop sending empty packets if the decoder is finished */
-                if (!pkt_temp->data && dec->codec->capabilities & CODEC_CAP_DELAY)
+                if (!pkt_temp->data && dec->codec->capabilities & AV_CODEC_CAP_DELAY)
                     flush_complete = 1;
                 continue;
             }
@@ -1231,9 +1233,9 @@ static int stream_component_open(VideoState *is, int s
     /* prepare audio output */
     if (enc->codec_type == AVMEDIA_TYPE_AUDIO) {
         if (enc->channels > 0) {
-            enc->request_channels = FFMIN(2, enc->channels);
+            enc->request_channel_layout = av_get_default_channel_layout(FFMIN(2, enc->channels));
         } else {
-            enc->request_channels = 2;
+            enc->request_channel_layout = av_get_default_channel_layout(2);
         }
     }
 
@@ -1242,7 +1244,7 @@ static int stream_component_open(VideoState *is, int s
     enc->debug = debug;
     enc->workaround_bugs = workaround_bugs;
     enc->idct_algo= idct;
-    if(fast) enc->flags2 |= CODEC_FLAG2_FAST;
+    if(fast) enc->flags2 |= AV_CODEC_FLAG2_FAST;
     enc->skip_frame= skip_frame;
     enc->skip_idct= skip_idct;
     enc->skip_loop_filter= skip_loop_filter;
